diff --git a/BUILD.md b/BUILD.md index 31755c36919..d08f78947ac 100644 --- a/BUILD.md +++ b/BUILD.md @@ -204,6 +204,14 @@ It fixes some source files to add missing `#include`s. conan export --version 2.0.8 external/nudb ``` +Export our [Conan recipe for LLVM](./conan/llvm). + + ``` + # Conan 1.x + conan export -k conan/llvm llvm/20.1.1@ + conan export -k conan/wamr wamr/2.2.0@ + ``` + ### Build and Test 1. Create a build directory and move into it. @@ -225,8 +233,10 @@ It fixes some source files to add missing `#include`s. 2. Generate CMake files for every configuration you want to build. ``` - conan install .. --output-folder . --build missing --settings build_type=Release - conan install .. --output-folder . --build missing --settings build_type=Debug + #release + conan install .. --output-folder . -b missing -s build_type=Release + #debug + conan install .. --output-folder . -b missing -s build_type=Release -s "&:build_type=Debug" ``` For a single-configuration generator, e.g. `Unix Makefiles` or `Ninja`, diff --git a/CMakeLists.txt b/CMakeLists.txt index 03dba51d0c5..4e9faf8d73d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,12 @@ add_subdirectory(external/secp256k1) add_library(secp256k1::secp256k1 ALIAS secp256k1) add_subdirectory(external/ed25519-donna) add_subdirectory(external/antithesis-sdk) +add_subdirectory(external/wasmedge) +add_subdirectory(external/wasmtime) +add_subdirectory(external/wasmer) +add_subdirectory(external/wasmi) +add_subdirectory(external/wamr) + find_package(gRPC REQUIRED) find_package(lz4 REQUIRED) # Target names with :: are not allowed in a generator expression. @@ -103,6 +109,9 @@ endif() find_package(nudb REQUIRED) find_package(date REQUIRED) find_package(xxHash REQUIRED) +#find_package(wasmedge REQUIRED) +#find_package(wasmtime REQUIRED) +#find_package(wasmer REQUIRED) target_link_libraries(ripple_libs INTERFACE ed25519::ed25519 diff --git a/cmake/RippledCore.cmake b/cmake/RippledCore.cmake index fc0576872a5..946ec30f451 100644 --- a/cmake/RippledCore.cmake +++ b/cmake/RippledCore.cmake @@ -65,6 +65,11 @@ target_link_libraries(xrpl.imports.main xrpl.libpb xxHash::xxhash $<$:antithesis-sdk-cpp> + wasmedge_so::wasmedge_so + wasmtime_so::wasmtime_so + wasmer_so::wasmer_so + wasmi_so::wasmi_so + wamr_so::wamr_so ) include(add_module) diff --git a/conan/llvm-18/conandata.yml b/conan/llvm-18/conandata.yml new file mode 100644 index 00000000000..b23176ae5ba --- /dev/null +++ b/conan/llvm-18/conandata.yml @@ -0,0 +1,9 @@ +patches: + 18.1.8: + - patch_description: disable default verification of fixed endpoints + patch_file: patches/no_verify_fix_endpoints.patch + patch_type: conan +sources: + 18.1.8: + sha256: 09c08693a9afd6236f27a2ebae62cda656eba19021ef3f94d59e931d662d4856 + url: https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-18.1.8.tar.gz diff --git a/conan/llvm-18/conanfile.py b/conan/llvm-18/conanfile.py new file mode 100644 index 00000000000..f3d067e5c6a --- /dev/null +++ b/conan/llvm-18/conanfile.py @@ -0,0 +1,267 @@ +from conans import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout +from conan.tools.files import apply_conandata_patches, export_conandata_patches, get, copy +import os + +required_conan_version = ">=1.53.0" + +class Llvm_18Conan(ConanFile): + name = "llvm-18" + version = "18.1.8" + license = "Apache License v2.0 with LLVM Exceptions" + url = "https://github.com/llvm/llvm-project.git" + description = "LLVM with fixes" + package_type = "library" + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + generators = "CMakeToolchain", "CMakeDeps" + #exports_sources = "patches/no_verify_fix_endpoints.patch" + + + def export_sources(self): + export_conandata_patches(self) + + + 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): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + + #tc.settings.build_type = "Release" + tc.variables["LLVM_ENABLE_PROJECTS"] = "llvm" + #tc.variables["LLVM_BUILD_LLVM_DYLIB"] = 1 + 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, "llvm")) + 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 = [ + "LLVMDemangle", + "LLVMSupport", + "LLVMTableGen", + "LLVMTableGenGlobalISel", + "LLVMTableGenCommon", + "LLVMCore", + "LLVMFuzzerCLI", + "LLVMFuzzMutate", + "LLVMFileCheck", + "LLVMInterfaceStub", + "LLVMIRPrinter", + "LLVMIRReader", + "LLVMCodeGenTypes", + "LLVMCodeGen", + "LLVMSelectionDAG", + "LLVMAsmPrinter", + "LLVMMIRParser", + "LLVMGlobalISel", + "LLVMBinaryFormat", + "LLVMBitReader", + "LLVMBitWriter", + "LLVMBitstreamReader", + "LLVMDWARFLinker", + "LLVMDWARFLinkerClassic", + "LLVMDWARFLinkerParallel", + "LLVMExtensions", + "LLVMFrontendDriver", + "LLVMFrontendHLSL", + "LLVMFrontendOpenACC", + "LLVMFrontendOpenMP", + "LLVMFrontendOffloading", + "LLVMTransformUtils", + "LLVMInstrumentation", + "LLVMAggressiveInstCombine", + "LLVMInstCombine", + "LLVMScalarOpts", + "LLVMipo", + "LLVMVectorize", + "LLVMObjCARCOpts", + "LLVMCoroutines", + "LLVMCFGuard", + "LLVMHipStdPar", + "LLVMLinker", + "LLVMAnalysis", + "LLVMLTO", + "LLVMMC", + "LLVMMCParser", + "LLVMMCDisassembler", + "LLVMMCA", + "LLVMObjCopy", + "LLVMObject", + "LLVMObjectYAML", + "LLVMOption", + "LLVMRemarks", + "LLVMDebuginfod", + "LLVMDebugInfoDWARF", + "LLVMDebugInfoGSYM", + "LLVMDebugInfoLogicalView", + "LLVMDebugInfoMSF", + "LLVMDebugInfoCodeView", + "LLVMDebugInfoPDB", + "LLVMSymbolize", + "LLVMDebugInfoBTF", + "LLVMDWP", + "LLVMExecutionEngine", + "LLVMInterpreter", + "LLVMJITLink", + "LLVMMCJIT", + "LLVMOrcJIT", + "LLVMOrcDebugging", + "LLVMOrcShared", + "LLVMOrcTargetProcess", + "LLVMRuntimeDyld", + "LLVMTarget", + "LLVMAArch64CodeGen", + "LLVMAArch64AsmParser", + "LLVMAArch64Disassembler", + "LLVMAArch64Desc", + "LLVMAArch64Info", + "LLVMAArch64Utils", + "LLVMAMDGPUCodeGen", + "LLVMAMDGPUAsmParser", + "LLVMAMDGPUDisassembler", + "LLVMAMDGPUTargetMCA", + "LLVMAMDGPUDesc", + "LLVMAMDGPUInfo", + "LLVMAMDGPUUtils", + "LLVMARMCodeGen", + "LLVMARMAsmParser", + "LLVMARMDisassembler", + "LLVMARMDesc", + "LLVMARMInfo", + "LLVMARMUtils", + "LLVMAVRCodeGen", + "LLVMAVRAsmParser", + "LLVMAVRDisassembler", + "LLVMAVRDesc", + "LLVMAVRInfo", + "LLVMBPFCodeGen", + "LLVMBPFAsmParser", + "LLVMBPFDisassembler", + "LLVMBPFDesc", + "LLVMBPFInfo", + "LLVMHexagonCodeGen", + "LLVMHexagonAsmParser", + "LLVMHexagonDisassembler", + "LLVMHexagonDesc", + "LLVMHexagonInfo", + "LLVMLanaiCodeGen", + "LLVMLanaiAsmParser", + "LLVMLanaiDisassembler", + "LLVMLanaiDesc", + "LLVMLanaiInfo", + "LLVMLoongArchCodeGen", + "LLVMLoongArchAsmParser", + "LLVMLoongArchDisassembler", + "LLVMLoongArchDesc", + "LLVMLoongArchInfo", + "LLVMMipsCodeGen", + "LLVMMipsAsmParser", + "LLVMMipsDisassembler", + "LLVMMipsDesc", + "LLVMMipsInfo", + "LLVMMSP430CodeGen", + "LLVMMSP430Desc", + "LLVMMSP430Info", + "LLVMMSP430AsmParser", + "LLVMMSP430Disassembler", + "LLVMNVPTXCodeGen", + "LLVMNVPTXDesc", + "LLVMNVPTXInfo", + "LLVMPowerPCCodeGen", + "LLVMPowerPCAsmParser", + "LLVMPowerPCDisassembler", + "LLVMPowerPCDesc", + "LLVMPowerPCInfo", + "LLVMRISCVCodeGen", + "LLVMRISCVAsmParser", + "LLVMRISCVDisassembler", + "LLVMRISCVDesc", + "LLVMRISCVTargetMCA", + "LLVMRISCVInfo", + "LLVMSparcCodeGen", + "LLVMSparcAsmParser", + "LLVMSparcDisassembler", + "LLVMSparcDesc", + "LLVMSparcInfo", + "LLVMSystemZCodeGen", + "LLVMSystemZAsmParser", + "LLVMSystemZDisassembler", + "LLVMSystemZDesc", + "LLVMSystemZInfo", + "LLVMVECodeGen", + "LLVMVEAsmParser", + "LLVMVEDisassembler", + "LLVMVEInfo", + "LLVMVEDesc", + "LLVMWebAssemblyCodeGen", + "LLVMWebAssemblyAsmParser", + "LLVMWebAssemblyDisassembler", + "LLVMWebAssemblyDesc", + "LLVMWebAssemblyInfo", + "LLVMWebAssemblyUtils", + "LLVMX86CodeGen", + "LLVMX86AsmParser", + "LLVMX86Disassembler", + "LLVMX86TargetMCA", + "LLVMX86Desc", + "LLVMX86Info", + "LLVMXCoreCodeGen", + "LLVMXCoreDisassembler", + "LLVMXCoreDesc", + "LLVMXCoreInfo", + "LLVMAsmParser", + "LLVMLineEditor", + "LLVMProfileData", + "LLVMCoverage", + "LLVMPasses", + "LLVMTargetParser", + "LLVMTextAPI", + "LLVMTextAPIBinaryReader", + "LLVMDlltoolDriver", + "LLVMLibDriver", + "LLVMXRay", + "LLVMWindowsDriver", + "LLVMWindowsManifest", + "LLVMCFIVerify", + "LLVMDiff", + "LLVMExegesisX86", + "LLVMExegesisAArch64", + "LLVMExegesisPowerPC", + "LLVMExegesisMips", + "LLVMExegesis", + ] + + diff --git a/conan/llvm-18/patches/no_verify_fix_endpoints.patch b/conan/llvm-18/patches/no_verify_fix_endpoints.patch new file mode 100644 index 00000000000..1db6f46e308 --- /dev/null +++ b/conan/llvm-18/patches/no_verify_fix_endpoints.patch @@ -0,0 +1,13 @@ +diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp +index 99e78d3b6..e61f9b534 100644 +--- a/llvm/lib/Passes/PassBuilder.cpp ++++ b/llvm/lib/Passes/PassBuilder.cpp +@@ -848,7 +848,7 @@ Expected parseInstCombineOptions(StringRef Params) { + InstCombineOptions Result; + // When specifying "instcombine" in -passes enable fix-point verification by + // default, as this is what most tests should use. +- Result.setVerifyFixpoint(true); ++ // Result.setVerifyFixpoint(true); + while (!Params.empty()) { + StringRef ParamName; + std::tie(ParamName, Params) = Params.split(';'); diff --git a/conan/llvm/conandata.yml b/conan/llvm/conandata.yml new file mode 100644 index 00000000000..82cb4ee9af3 --- /dev/null +++ b/conan/llvm/conandata.yml @@ -0,0 +1,9 @@ +patches: + 20.1.1: + - patch_description: disable default verification of fixed endpoints + patch_file: patches/no_verify_fix_endpoints.patch + patch_type: conan +sources: + 20.1.1: + sha256: edde69aa3e48a3892a8f01332ff79cfb6179151b42503c4ba77d2cd408b013bf + url: https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-20.1.1.tar.gz diff --git a/conan/llvm/conanfile.py b/conan/llvm/conanfile.py new file mode 100644 index 00000000000..7ed1f34989c --- /dev/null +++ b/conan/llvm/conanfile.py @@ -0,0 +1,282 @@ +from conans import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout +from conan.tools.files import apply_conandata_patches, export_conandata_patches, get, copy +import os + +required_conan_version = ">=1.53.0" + +class LlvmConan(ConanFile): + name = "llvm" + version = "20.1.1" + license = "Apache License v2.0 with LLVM Exceptions" + url = "https://github.com/llvm/llvm-project.git" + description = "LLVM with fixes" + package_type = "library" + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + generators = "CMakeToolchain", "CMakeDeps" + #exports_sources = "patches/no_verify_fix_endpoints.patch" + + + def export_sources(self): + export_conandata_patches(self) + + + 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): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + + #tc.settings.build_type = "Release" + tc.variables["LLVM_ENABLE_PROJECTS"] = "llvm;lld" + #tc.variables["LLVM_BUILD_LLVM_DYLIB"] = 1 + 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, "llvm")) + 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 = [ + # "liblldWasm", + # "liblldMinGW", + # "liblldELF", + # "liblldMachO", + # "liblldCOFF", + # "liblldCommon", + "LLVMDemangle", + "LLVMSupport", + "LLVMTableGen", + "LLVMTableGenBasic", + "LLVMTableGenCommon", + "LLVMCore", + "LLVMFuzzerCLI", + "LLVMFuzzMutate", + "LLVMFileCheck", + "LLVMInterfaceStub", + "LLVMIRPrinter", + "LLVMIRReader", + "LLVMCGData", + "LLVMCodeGen", + "LLVMSelectionDAG", + "LLVMAsmPrinter", + "LLVMMIRParser", + "LLVMGlobalISel", + "LLVMCodeGenTypes", + "LLVMBinaryFormat", + "LLVMBitReader", + "LLVMBitWriter", + "LLVMBitstreamReader", + "LLVMDWARFLinker", + "LLVMDWARFLinkerClassic", + "LLVMDWARFLinkerParallel", + "LLVMExtensions", + "LLVMFrontendAtomic", + "LLVMFrontendDriver", + "LLVMFrontendHLSL", + "LLVMFrontendOpenACC", + "LLVMFrontendOpenMP", + "LLVMFrontendOffloading", + "LLVMTransformUtils", + "LLVMInstrumentation", + "LLVMAggressiveInstCombine", + "LLVMInstCombine", + "LLVMScalarOpts", + "LLVMipo", + "LLVMVectorize", + "LLVMObjCARCOpts", + "LLVMCoroutines", + "LLVMCFGuard", + "LLVMHipStdPar", + "LLVMLinker", + "LLVMAnalysis", + "LLVMLTO", + "LLVMMC", + "LLVMMCParser", + "LLVMMCDisassembler", + "LLVMMCA", + "LLVMObjCopy", + "LLVMObject", + "LLVMObjectYAML", + "LLVMOption", + "LLVMRemarks", + "LLVMDebuginfod", + "LLVMDebugInfoDWARF", + "LLVMDebugInfoGSYM", + "LLVMDebugInfoLogicalView", + "LLVMDebugInfoMSF", + "LLVMDebugInfoCodeView", + "LLVMDebugInfoPDB", + "LLVMSymbolize", + "LLVMDebugInfoBTF", + "LLVMDWP", + "LLVMExecutionEngine", + "LLVMInterpreter", + "LLVMJITLink", + "LLVMMCJIT", + "LLVMOrcJIT", + "LLVMOrcDebugging", + "LLVMOrcShared", + "LLVMOrcTargetProcess", + "LLVMRuntimeDyld", + "LLVMTarget", + "LLVMAArch64CodeGen", + "LLVMAArch64AsmParser", + "LLVMAArch64Disassembler", + "LLVMAArch64Desc", + "LLVMAArch64Info", + "LLVMAArch64Utils", + "LLVMAMDGPUCodeGen", + "LLVMAMDGPUAsmParser", + "LLVMAMDGPUDisassembler", + "LLVMAMDGPUTargetMCA", + "LLVMAMDGPUDesc", + "LLVMAMDGPUInfo", + "LLVMAMDGPUUtils", + "LLVMARMCodeGen", + "LLVMARMAsmParser", + "LLVMARMDisassembler", + "LLVMARMDesc", + "LLVMARMInfo", + "LLVMARMUtils", + "LLVMAVRCodeGen", + "LLVMAVRAsmParser", + "LLVMAVRDisassembler", + "LLVMAVRDesc", + "LLVMAVRInfo", + "LLVMBPFCodeGen", + "LLVMBPFAsmParser", + "LLVMBPFDisassembler", + "LLVMBPFDesc", + "LLVMBPFInfo", + "LLVMHexagonCodeGen", + "LLVMHexagonAsmParser", + "LLVMHexagonDisassembler", + "LLVMHexagonDesc", + "LLVMHexagonInfo", + "LLVMLanaiCodeGen", + "LLVMLanaiAsmParser", + "LLVMLanaiDisassembler", + "LLVMLanaiDesc", + "LLVMLanaiInfo", + "LLVMLoongArchCodeGen", + "LLVMLoongArchAsmParser", + "LLVMLoongArchDisassembler", + "LLVMLoongArchDesc", + "LLVMLoongArchInfo", + "LLVMMipsCodeGen", + "LLVMMipsAsmParser", + "LLVMMipsDisassembler", + "LLVMMipsDesc", + "LLVMMipsInfo", + "LLVMMSP430CodeGen", + "LLVMMSP430Desc", + "LLVMMSP430Info", + "LLVMMSP430AsmParser", + "LLVMMSP430Disassembler", + "LLVMNVPTXCodeGen", + "LLVMNVPTXDesc", + "LLVMNVPTXInfo", + "LLVMPowerPCCodeGen", + "LLVMPowerPCAsmParser", + "LLVMPowerPCDisassembler", + "LLVMPowerPCDesc", + "LLVMPowerPCInfo", + "LLVMRISCVCodeGen", + "LLVMRISCVAsmParser", + "LLVMRISCVDisassembler", + "LLVMRISCVDesc", + "LLVMRISCVTargetMCA", + "LLVMRISCVInfo", + "LLVMSparcCodeGen", + "LLVMSparcAsmParser", + "LLVMSparcDisassembler", + "LLVMSparcDesc", + "LLVMSparcInfo", + "LLVMSPIRVCodeGen", + "LLVMSPIRVDesc", + "LLVMSPIRVInfo", + "LLVMSPIRVAnalysis", + "LLVMSystemZCodeGen", + "LLVMSystemZAsmParser", + "LLVMSystemZDisassembler", + "LLVMSystemZDesc", + "LLVMSystemZInfo", + "LLVMVECodeGen", + "LLVMVEAsmParser", + "LLVMVEDisassembler", + "LLVMVEInfo", + "LLVMVEDesc", + "LLVMWebAssemblyCodeGen", + "LLVMWebAssemblyAsmParser", + "LLVMWebAssemblyDisassembler", + "LLVMWebAssemblyDesc", + "LLVMWebAssemblyInfo", + "LLVMWebAssemblyUtils", + "LLVMX86CodeGen", + "LLVMX86AsmParser", + "LLVMX86Disassembler", + "LLVMX86TargetMCA", + "LLVMX86Desc", + "LLVMX86Info", + "LLVMXCoreCodeGen", + "LLVMXCoreDisassembler", + "LLVMXCoreDesc", + "LLVMXCoreInfo", + "LLVMSandboxIR", + "LLVMAsmParser", + "LLVMLineEditor", + "LLVMProfileData", + "LLVMCoverage", + "LLVMPasses", + "LLVMTargetParser", + "LLVMTextAPI", + "LLVMTextAPIBinaryReader", + "LLVMTelemetry", + "LLVMDlltoolDriver", + "LLVMLibDriver", + "LLVMXRay", + "LLVMWindowsDriver", + "LLVMWindowsManifest", + "LLVMCFIVerify", + "LLVMDiff", + "LLVMExegesisX86", + "LLVMExegesisAArch64", + "LLVMExegesisPowerPC", + "LLVMExegesisMips", + "LLVMExegesisRISCV", + "LLVMExegesis", + "LLVMOptDriver", + ] + diff --git a/conan/llvm/patches/no_verify_fix_endpoints.patch b/conan/llvm/patches/no_verify_fix_endpoints.patch new file mode 100644 index 00000000000..8023ee1d27f --- /dev/null +++ b/conan/llvm/patches/no_verify_fix_endpoints.patch @@ -0,0 +1,13 @@ +diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp +index 99e78d3b6..e61f9b534 100644 +--- a/llvm/lib/Passes/PassBuilder.cpp ++++ b/llvm/lib/Passes/PassBuilder.cpp +@@ -970,7 +970,7 @@ Expected parseInstCombineOptions(StringRef Params) { + InstCombineOptions Result; + // When specifying "instcombine" in -passes enable fix-point verification by + // default, as this is what most tests should use. +- Result.setVerifyFixpoint(true); ++ // Result.setVerifyFixpoint(true); + while (!Params.empty()) { + StringRef ParamName; + std::tie(ParamName, Params) = Params.split(';'); diff --git a/conan/wamr/conanfile.py b/conan/wamr/conanfile.py new file mode 100644 index 00000000000..ad2841a4548 --- /dev/null +++ b/conan/wamr/conanfile.py @@ -0,0 +1,86 @@ +from conans 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, copy +import os +import json + +required_conan_version = ">=1.55.0" + +class WamrConan(ConanFile): + name = "wamr" + version = "2.2.0" + 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} + 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 + + + def layout(self): + cmake_layout(self, src_folder="src") + + + def source(self): + + git = tools.Git() + git.clone("https://github.com/bytecodealliance/wasm-micro-runtime.git", "913c2227bad6cbcf06835b0648aca24ac235ff76",shallow=True) + #get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + + tc.variables["WAMR_BUILD_INTERP"] = 0 + tc.variables["WAMR_BUILD_AOT"] = 0 + tc.variables["WAMR_BUILD_JIT"] = 1 + tc.variables["WAMR_BUILD_FAST_JIT"] = 0 if self.settings.os == "Windows" else 1 + ll_dep = self.dependencies["llvm"] + #self.output.info(f"-----------package_folder: {type(ll_dep.__dict__)}") + tc.variables["LLVM_DIR"] = os.path.join(ll_dep.package_folder, "lib", "cmake", "llvm") + 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/conan/wasmedge/conandata.yml b/conan/wasmedge/conandata.yml new file mode 100644 index 00000000000..8bd27108345 --- /dev/null +++ b/conan/wasmedge/conandata.yml @@ -0,0 +1,10 @@ +patches: + 0.14.1: + - patch_description: fix use latest llvm + patch_file: patches/use_llvm.patch + patch_type: conan +sources: + 0.14.1: + sha256: ff95d3b9d4736f36e31c0477208cc70f12a0a3f946bbf756f1e7b181877d5af3 + url: https://github.com/WasmEdge/WasmEdge/archive/refs/tags/0.14.1.tar.gz + diff --git a/conan/wasmedge/conanfile.py b/conan/wasmedge/conanfile.py new file mode 100644 index 00000000000..552a629c881 --- /dev/null +++ b/conan/wasmedge/conanfile.py @@ -0,0 +1,93 @@ +from conans 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, copy +import os +import json + +required_conan_version = ">=1.55.0" + +class WasmedgeConan(ConanFile): + name = "wasmedge" + version = "0.14.1" + license = "Apache License v2.0" + url = "https://github.com/WasmEdge/WasmEdge.git" + description = "Lightweight, high-performance, and extensible WebAssembly runtime" + package_type = "library" + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + 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 + + + def layout(self): + cmake_layout(self, src_folder="src") + + + def source(self): + + git = tools.Git() + #git.clone("https://github.com/bytecodealliance/wasm-micro-runtime.git", "913c2227bad6cbcf06835b0648aca24ac235ff76",shallow=True) + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + + tc.variables["WASMEDGE_USE_LLVM"] = 0 + tc.variables["WASMEDGE_BUILD_SHARED_LIB"] = 0 + tc.variables["WASMEDGE_BUILD_AOT_RUNTIME"] = 0 + tc.variables["WASMEDGE_BUILD_STATIC_LIB"] = 1 + tc.variables["WASMEDGE_BUILD_TOOLS"] = 0 + tc.variables["WASMEDGE_LINK_LLVM_STATIC"] = 1 + tc.variables["FMT_INSTALL"] = 1 + tc.variables["WASMEDGE_CFLAGS"] = "-Wno-deprecated-declarations" + + #ll_dep = self.dependencies["llvm"] + #tc.variables["WASMEDGE_USE_LLVM"] = 1 + #self.output.info(f"-----------package_folder: {type(ll_dep.__dict__)}") + #tc.variables["LLVM_DIR"] = os.path.join(ll_dep.package_folder, "lib", "cmake", "llvm") + + 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 = ["wasmedge", "fmt"] + self.cpp_info.names["cmake_find_package"] = "wasmedge" + self.cpp_info.names["cmake_find_package_multi"] = "wasmedge" + diff --git a/conan/wasmedge/patches/use_llvm.patch b/conan/wasmedge/patches/use_llvm.patch new file mode 100644 index 00000000000..8b913732798 --- /dev/null +++ b/conan/wasmedge/patches/use_llvm.patch @@ -0,0 +1,32 @@ +diff --git a/cmake/Helper.cmake b/cmake/Helper.cmake +index c7b58ea..e46d099 100644 +--- a/cmake/Helper.cmake ++++ b/cmake/Helper.cmake +@@ -279,6 +279,9 @@ if((WASMEDGE_LINK_LLVM_STATIC OR WASMEDGE_BUILD_STATIC_LIB) AND WASMEDGE_USE_LLV + if(NOT WASMEDGE_DISABLE_LIBTINFO) + list(APPEND WASMEDGE_LLVM_LINK_STATIC_COMPONENTS ${ZLIB_PATH}/libtinfo.a) + endif() ++ ++ set(WASMEDGE_LLVM_LINK_STATIC_COMPONENTS ) ++ set(WASMEDGE_LLVM_LINK_SHARED_COMPONENTS ) + else() + # If not build static lib, dynamic link libz and libtinfo. + list(APPEND WASMEDGE_LLVM_LINK_SHARED_COMPONENTS +@@ -289,6 +292,7 @@ if((WASMEDGE_LINK_LLVM_STATIC OR WASMEDGE_BUILD_STATIC_LIB) AND WASMEDGE_USE_LLV + endif() + endif() + endif() ++ message("LLVM_LIBRARY_DIR: ${LLVM_LIBRARY_DIR} LLVM_VERSION: ${LLVM_VERSION}") + endif() + + function(wasmedge_setup_simdjson) +@@ -352,7 +356,8 @@ function(wasmedge_setup_spdlog) + PATCH_COMMAND "${GIT_CMD}" checkout 11.0.2 . + COMMAND "${GIT_CMD}" "apply" "--whitespace=fix" "${CMAKE_SOURCE_DIR}/cmake/0001-support-arithmetic-operations-in-uint128_fallback.patch" + ) +- set(FMT_INSTALL OFF CACHE BOOL "Generate the install target." FORCE) ++ #set(FMT_INSTALL OFF CACHE BOOL "Generate the install target." FORCE) ++ set(FMT_DEBUG_POSTFIX "") + FetchContent_MakeAvailable(fmt) + wasmedge_setup_target(fmt) + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") diff --git a/conan/wasmer/conandata.yml b/conan/wasmer/conandata.yml new file mode 100644 index 00000000000..1d6d579b492 --- /dev/null +++ b/conan/wasmer/conandata.yml @@ -0,0 +1,10 @@ +patches: + 5.0.4: + - patch_description: enable conan cmake build + patch_file: patches/wamser_conan.patch + patch_type: conan +sources: + 5.0.4: + sha256: e6f0df11dd4647fa3d9177ed298a6e3afd2b5be6ea4494c00c2074c90681ad27 + url: https://github.com/wasmerio/wasmer/archive/refs/tags/v5.0.4.tar.gz + diff --git a/conan/wasmer/conanfile.py b/conan/wasmer/conanfile.py new file mode 100644 index 00000000000..c419d1c7b5a --- /dev/null +++ b/conan/wasmer/conanfile.py @@ -0,0 +1,80 @@ +from conans 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, copy +import os +import json + +required_conan_version = ">=1.55.0" + +class WasmerConan(ConanFile): + name = "wasmer" + version = "5.0.4" + license = "Apache License v2.0" + url = "https://github.com/wasmerio/wasmer.git" + description = "Fast, secure, lightweight containers based on WebAssembly" + package_type = "library" + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False]} + default_options = {"shared": False} + generators = "CMakeToolchain", "CMakeDeps" + requires = [("llvm-18/18.1.8@")] + + 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") + pass + + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + llvm_pkg = self.dependencies["llvm-18"].package_folder + tc = CMakeToolchain(self) + tc.variables["LLVM_ROOT"] = llvm_pkg + 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 = ["wasmer"] + self.cpp_info.names["cmake_find_package"] = "wasmer" + self.cpp_info.names["cmake_find_package_multi"] = "wasmer" + diff --git a/conan/wasmer/patches/wamser_conan.patch b/conan/wasmer/patches/wamser_conan.patch new file mode 100644 index 00000000000..85dd9b455b3 --- /dev/null +++ b/conan/wasmer/patches/wamser_conan.patch @@ -0,0 +1,191 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +new file mode 100644 +index 0000000..57e99ab +--- /dev/null ++++ b/CMakeLists.txt +@@ -0,0 +1,27 @@ ++cmake_minimum_required(VERSION 3.16) ++ ++project(wasmer) ++ ++include(ExternalProject) ++ ++ExternalProject_Add(wasmer-crate ++ DOWNLOAD_COMMAND "" ++ CONFIGURE_COMMAND "" ++ INSTALL_COMMAND ++ ${CMAKE_COMMAND} -E env DESTDIR=${CMAKE_BINARY_DIR} ++ make install-capi-conan$<$:-debug> -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile ++ BUILD_COMMAND ++ ${CMAKE_COMMAND} -E env ENABLE_LLVM=1 LLVM_ROOT=${LLVM_ROOT} ++ make build-capi-llvm$<$:-debug> -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile ++ USES_TERMINAL_BUILD TRUE ++) ++ ++add_library(wasmer INTERFACE) ++add_dependencies(wasmer wasmer-crate) ++ ++include(GNUInstallDirs) ++install(FILES ${CMAKE_BINARY_DIR}/include/wasmer.h ${CMAKE_BINARY_DIR}/include/wasm.h ++ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) ++install(FILES ${CMAKE_BINARY_DIR}/lib/libwasmer.a ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) ++ +diff --git a/Makefile b/Makefile +index 09ac693..55fc5a2 100644 +--- a/Makefile ++++ b/Makefile +@@ -50,6 +50,14 @@ IS_AARCH64 := 0 + IS_RISCV64 := 0 + IS_LOONGARCH64 := 0 + ++SRC_DIR ?= $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) ++#ifneq ($(CURDIR),$(SRC_DIR)) ++# TARGET_DIR := $(CURDIR) ++# CARGO_TARGET_DIR := $(CURDIR) ++# export CARGO_TARGET_DIR ++#endif ++#$(info SRC_DIR=$(SRC_DIR)= MAKEFILE_LIST= $(MAKEFILE_LIST)) ++ + # Test Windows apart because it doesn't support `uname -s`. + ifeq ($(OS), Windows_NT) + # We can assume it will likely be in amd64. +@@ -146,7 +154,19 @@ ifeq ($(ENABLE_LLVM), 0) + LLVM_VERSION := + # … then maybe the user forced to enable the LLVM compiler. + else ifeq ($(ENABLE_LLVM), 1) +- LLVM_VERSION := $(shell llvm-config --version) ++ ifneq (, $(LLVM_ROOT)) ++ llvm_config := "$(LLVM_ROOT)/bin/llvm-config" ++ else ++ llvm_config := "llvm-config" ++ endif ++ ++ LLVM_VERSION := $(shell $(llvm_config) --version) ++ VER := $(subst ., ,$(LLVM_VERSION)) ++ VER := $(word 1,$(VER)) ++ VER := $(VER)0 ++ STR_LLVM_PREF := LLVM_SYS_$(VER)_PREFIX ++ export $(STR_LLVM_PREF) = $(shell $(llvm_config) --prefix) ++ export LLVM_SYS_180_PREFIX = $(shell $(llvm_config) --prefix) + compilers += llvm + # … or try to autodetect LLVM from `llvm-config-`. + else ifneq (, $(shell which llvm-config-18 2>/dev/null)) +@@ -165,6 +185,8 @@ else ifneq (, $(shell which llvm-config 2>/dev/null)) + endif + endif + ++#$(info LLVM $(STR_LLVM_PREF)= $($(STR_LLVM_PREF))) ++ + # If findstring is not empty, then it have found the value + + exclude_tests := --exclude wasmer-c-api --exclude wasmer-cli --exclude wasmer-compiler-cli +@@ -286,8 +308,8 @@ capi_compilers_engines_exclude := + # Define the compiler Cargo features for the C API. It always excludes + # LLVM for the moment because it causes the linker to fail since LLVM is not statically linked. + # TODO: Reenable LLVM in C-API +-capi_compiler_features := --features $(subst $(space),$(comma),$(filter-out llvm, $(compilers))),wasmer-artifact-create,static-artifact-create,wasmer-artifact-load,static-artifact-load +-capi_compilers_engines_exclude += llvm-universal ++capi_compiler_features := --features $(subst $(space),$(comma), $(compilers)),wasmer-artifact-create,static-artifact-create,wasmer-artifact-load,static-artifact-load ++#capi_compilers_engines_exclude += llvm-universal + + # We exclude singlepass-universal because it doesn't support multivalue (required in wasm-c-api tests) + capi_compilers_engines_exclude += singlepass-universal +@@ -391,7 +413,7 @@ check-capi: + + build-wasmer: + $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --release --manifest-path lib/cli/Cargo.toml $(compiler_features) --bin wasmer --locked +- ++ + build-wasmer-v8: + $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --release --manifest-path lib/cli/Cargo.toml --no-default-features --features="v8" --bin wasmer --locked + +@@ -498,36 +520,40 @@ build-docs-capi: + sed "$(SEDI)" -e 's/name = "wasmer_c_api" # ##lib.name##/name = "wasmer" # ##lib.name##/' lib/c-api/Cargo.toml + + build-capi: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ +- --no-default-features --features wat,compiler,wasi,middlewares,webc_runner $(capi_compiler_features) --locked ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ ++ --no-default-features --features wat,sys-default,compiler,wasi,middlewares,webc_runner $(capi_compiler_features) --locked + + build-capi-singlepass: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ + --no-default-features --features wat,compiler,singlepass,wasi,middlewares,webc_runner --locked + + build-capi-singlepass-universal: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ + --no-default-features --features wat,compiler,singlepass,wasi,middlewares,webc_runner --locked + + build-capi-cranelift: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ + --no-default-features --features wat,compiler,cranelift,wasi,middlewares,webc_runner --locked + + build-capi-cranelift-universal: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ + --no-default-features --features wat,compiler,cranelift,wasi,middlewares,webc_runner --locked + + build-capi-llvm: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ ++ --no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner --locked ++ ++build-capi-llvm-debug: ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml \ + --no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner --locked + + build-capi-llvm-universal: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ + --no-default-features --features wat,compiler,llvm,wasi,middlewares,webc_runner --locked + + build-capi-jsc: +- RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path lib/c-api/Cargo.toml --release \ +- --no-default-features --features wat,jsc,wasi --locked ++ RUSTFLAGS="${RUSTFLAGS}" $(CARGO_BINARY) build $(CARGO_TARGET_FLAG) --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml --release \ ++ --no-default-features --features wat,jsc-default,wasi --locked + + # Headless (we include the minimal to be able to run) + +@@ -921,23 +947,33 @@ install: install-wasmer install-capi-headers install-capi-lib install-pkgconfig + + install-capi: install-capi-headers install-capi-lib install-capi-pkgconfig install-misc + ++install-capi-conan: install-capi-headers install-capi-static ++ ++install-capi-conan-debug: install-capi-headers install-capi-static-debug ++ + install-wasmer: + install -Dm755 target/release/wasmer $(DESTDIR)/bin/wasmer + + install-capi-headers: +- for header in lib/c-api/*.h; do install -Dm644 "$$header" $(DESTDIR)/include/$$(basename $$header); done +- install -Dm644 lib/c-api/README.md $(DESTDIR)/include/wasmer-README.md ++ for header in $(SRC_DIR)/lib/c-api/*.h; do install -Dm644 "$$header" $(DESTDIR)/include/$$(basename $$header); done ++ install -Dm644 $(SRC_DIR)/lib/c-api/README.md $(DESTDIR)/include/wasmer-README.md + + # Currently implemented for linux only. TODO + install-capi-lib: +- pkgver=$$($(CARGO_BINARY) pkgid --manifest-path lib/c-api/Cargo.toml | sed 's/^.*wasmer-c-api@//') && \ ++ pkgver=$$($(CARGO_BINARY) pkgid --manifest-path $(SRC_DIR)/lib/c-api/Cargo.toml | sed 's/^.*wasmer-c-api@//') && \ + shortver="$${pkgver%.*}" && \ + majorver="$${shortver%.*}" && \ +- install -Dm755 target/release/libwasmer.so "$(DESTDIR)/lib/libwasmer.so.$$pkgver" && \ ++ install -Dm755 $(SRC_DIR)/target/release/libwasmer.so "$(DESTDIR)/lib/libwasmer.so.$$pkgver" && \ + ln -sf "libwasmer.so.$$pkgver" "$(DESTDIR)/lib/libwasmer.so.$$shortver" && \ + ln -sf "libwasmer.so.$$pkgver" "$(DESTDIR)/lib/libwasmer.so.$$majorver" && \ + ln -sf "libwasmer.so.$$pkgver" "$(DESTDIR)/lib/libwasmer.so" + ++install-capi-static: ++ install -Dm644 $(SRC_DIR)/target/release/libwasmer.a $(DESTDIR)/lib/libwasmer.a ++ ++install-capi-static-debug: ++ install -Dm644 $(SRC_DIR)/target/debug/libwasmer.a $(DESTDIR)/lib/libwasmer.a ++ + install-misc: + install -Dm644 LICENSE "$(DESTDIR)"/share/licenses/wasmer/LICENSE + diff --git a/conan/wasmi/conandata.yml b/conan/wasmi/conandata.yml new file mode 100644 index 00000000000..11092bd2b99 --- /dev/null +++ b/conan/wasmi/conandata.yml @@ -0,0 +1,10 @@ +patches: + 0.42.1: + - patch_description: install only static lib (to prevent conflict with shared) + patch_file: patches/static_only.patch + patch_type: conan +sources: + 0.42.1: + sha256: 2a5697be33c7afce8f671af4a5a3621d9e93ce55d253d31bd8201458e465fbb8 + url: https://github.com/wasmi-labs/wasmi/archive/refs/tags/v0.42.1.tar.gz + diff --git a/conan/wasmi/conanfile.py b/conan/wasmi/conanfile.py new file mode 100644 index 00000000000..1e811a2cdac --- /dev/null +++ b/conan/wasmi/conanfile.py @@ -0,0 +1,77 @@ +from conans 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, copy +import os +import json + +required_conan_version = ">=1.55.0" + +class WasmiConan(ConanFile): + name = "wasmi" + version = "0.42.1" + 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): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + 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/conan/wasmi/patches/static_only.patch b/conan/wasmi/patches/static_only.patch new file mode 100644 index 00000000000..aff4b408ea9 --- /dev/null +++ b/conan/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/conan/wasmtime/conandata.yml b/conan/wasmtime/conandata.yml new file mode 100644 index 00000000000..23d4e31fdee --- /dev/null +++ b/conan/wasmtime/conandata.yml @@ -0,0 +1,10 @@ +patches: + 31.0.0: + - patch_description: install only static lib (to prevent conflict with shared) + patch_file: patches/static_only.patch + patch_type: conan +sources: + 31.0.0: + sha256: a0ddc68e4429a779fdc1baaec07d5270cd3cd2c29e309f430f73a13dbc1e5a4c + url: https://github.com/bytecodealliance/wasmtime/archive/refs/tags/v31.0.0.tar.gz + diff --git a/conan/wasmtime/conanfile.py b/conan/wasmtime/conanfile.py new file mode 100644 index 00000000000..a9f69b529eb --- /dev/null +++ b/conan/wasmtime/conanfile.py @@ -0,0 +1,77 @@ +from conans 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, copy +import os +import json + +required_conan_version = ">=1.55.0" + +class WasmtimeConan(ConanFile): + name = "wasmtime" + version = "31.0.0" + license = "Apache License v2.0" + url = "https://github.com/bytecodealliance/wasmtime.git" + description = "Lightweight WebAssembly runtime" + 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): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + + def generate(self): + tc = CMakeToolchain(self) + 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 = ["wasmtime"] + self.cpp_info.names["cmake_find_package"] = "wasmtime" + self.cpp_info.names["cmake_find_package_multi"] = "wasmtime" + diff --git a/conan/wasmtime/patches/static_only.patch b/conan/wasmtime/patches/static_only.patch new file mode 100644 index 00000000000..b1ffb4938a8 --- /dev/null +++ b/conan/wasmtime/patches/static_only.patch @@ -0,0 +1,16 @@ +diff --git a/crates/c-api/CMakeLists.txt b/crates/c-api/CMakeLists.txt +index 09e8104..c97c7c5 100644 +--- a/crates/c-api/CMakeLists.txt ++++ b/crates/c-api/CMakeLists.txt +@@ -50,6 +50,11 @@ endif() + list(TRANSFORM WASMTIME_SHARED_FILES PREPEND ${WASMTIME_TARGET_DIR}/) + list(TRANSFORM WASMTIME_STATIC_FILES PREPEND ${WASMTIME_TARGET_DIR}/) + ++if(NOT BUILD_SHARED_LIBS) ++ set(WASMTIME_SHARED_FILES ) ++ message("ONLY STATIC LIBS") ++endif() ++ + include(ExternalProject) + find_program(WASMTIME_CARGO_BINARY cargo) + if(NOT WASMTIME_CARGO_BINARY) diff --git a/conanfile.py b/conanfile.py index d4513068fb5..055f570f465 100644 --- a/conanfile.py +++ b/conanfile.py @@ -32,6 +32,13 @@ class Xrpl(ConanFile): 'soci/4.0.3', 'xxhash/0.8.2', 'zlib/1.3.1', + 'llvm/20.1.1', + 'llvm-18/18.1.8', + 'wasmedge/0.14.1', + 'wasmtime/31.0.0', + 'wasmer/5.0.4', + 'wamr/2.2.0', + 'wasmi/0.42.1', ] tool_requires = [ diff --git a/external/wamr/CMakeLists.txt b/external/wamr/CMakeLists.txt new file mode 100644 index 00000000000..70b62378fb5 --- /dev/null +++ b/external/wamr/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 3.21) + +project(wamr_so + LANGUAGES C +) + +if(NOT TARGET llvm::llvm) + find_package(llvm REQUIRED) +endif() + +#if (NOT DEFINED LLVM_DIR) +# set (LLVM_DIR ${llvm_INCLUDE_DIR}/../lib/cmake/llvm) +#endif() +#find_package(LLVM REQUIRED CONFIG) +#message("LLVM_AVAILABLE_LIBS: ${LLVM_AVAILABLE_LIBS}") + + +if(NOT TARGET wamr::wamr) + find_package(wamr REQUIRED) +endif() + +add_library(wamr_so SHARED + wamr_so.h + wamr_so.c +) + +add_library(wamr_so::wamr_so ALIAS wamr_so) + + +target_link_libraries(wamr_so PRIVATE + -Wl,--exclude-libs,ALL + -Wl,-Bsymbolic-functions + -Wl,--no-undefined + wamr::wamr + #${llvm_INCLUDE_DIR}/../lib/libLLVM.so + llvm::llvm + stdc++ + m + zstd + z + pthread + dl + ) + +target_include_directories(wamr_so PUBLIC + $ + $ + ${wamr_INCLUDE_DIR} +) + +install( + TARGETS wamr_so + EXPORT ${PROJECT_NAME}-exports + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) +install( + EXPORT ${PROJECT_NAME}-exports + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: +) +install( + FILES wamr_so.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + diff --git a/external/wamr/wamr_so.c b/external/wamr/wamr_so.c new file mode 100644 index 00000000000..f34818261a9 --- /dev/null +++ b/external/wamr/wamr_so.c @@ -0,0 +1,306 @@ +#include "wamr_so.h" + +wasm_engine_t* +wamr_engine_new(void) +{ + return wasm_engine_new(); +} + +void +wamr_engine_delete(wasm_engine_t* o) +{ + return wasm_engine_delete(o); +} + +wasm_store_t* +wamr_store_new(wasm_engine_t* e) +{ + return wasm_store_new(e); +} + +void +wamr_store_delete(wasm_store_t* o) +{ + return wasm_store_delete(o); +} + +wasm_module_t* +wamr_module_new(wasm_store_t* s, wasm_byte_vec_t const* c) +{ + return wasm_module_new(s, c); +} + +void +wamr_module_delete(wasm_module_t* o) +{ + return wasm_module_delete(o); +} + +void +wamr_module_imports(const wasm_module_t* m, wasm_importtype_vec_t* out) +{ + return wasm_module_imports(m, out); +} +void +wamr_module_exports(const wasm_module_t* m, wasm_exporttype_vec_t* out) +{ + return wasm_module_exports(m, out); +} + +wasm_instance_t* +wamr_instance_new( + wasm_store_t* s, + wasm_module_t const* m, + wasm_extern_vec_t const* imports, + wasm_trap_t** t) +{ + return wasm_instance_new(s, m, imports, t); +} +void +wamr_instance_delete(wasm_instance_t* o) +{ + return wasm_instance_delete(o); +} + +void +wamr_instance_exports(const wasm_instance_t* i, wasm_extern_vec_t* out) +{ + return wasm_instance_exports(i, out); +} + +byte_t* +wamr_memory_data(wasm_memory_t* m) +{ + return wasm_memory_data(m); +} + +size_t +wamr_memory_data_size(const wasm_memory_t* m) +{ + return wasm_memory_data_size(m); +} + +void +wamr_exporttype_vec_delete(wasm_exporttype_vec_t* o) +{ + return wasm_exporttype_vec_delete(o); +} +void +wamr_extern_vec_delete(wasm_extern_vec_t* o) +{ + return wasm_extern_vec_delete(o); +} + +const wasm_name_t* +wamr_importtype_name(const wasm_importtype_t* o) +{ + return wasm_importtype_name(o); +} +const wasm_externtype_t* +wamr_importtype_type(const wasm_importtype_t* o) +{ + return wasm_importtype_type(o); +} + +const wasm_name_t* +wamr_exporttype_name(const wasm_exporttype_t* o) +{ + return wasm_exporttype_name(o); +} +const wasm_externtype_t* +wamr_exporttype_type(const wasm_exporttype_t* o) +{ + return wasm_exporttype_type(o); +} + +wasm_externkind_t +wamr_externtype_kind(const wasm_externtype_t* t) +{ + return wasm_externtype_kind(t); +} + +wasm_externkind_t +wamr_extern_kind(const wasm_extern_t* t) +{ + return wasm_extern_kind(t); +} + +wasm_externtype_t* +wamr_extern_type(const wasm_extern_t* t) +{ + return wasm_extern_type(t); +} + +wasm_func_t* +wamr_extern_as_func(wasm_extern_t* t) +{ + return wasm_extern_as_func(t); +} +wasm_global_t* +wamr_extern_as_global(wasm_extern_t* t) +{ + return wasm_extern_as_global(t); +} +wasm_table_t* +wamr_extern_as_table(wasm_extern_t* t) +{ + return wasm_extern_as_table(t); +} +wasm_memory_t* +wamr_extern_as_memory(wasm_extern_t* t) +{ + return wasm_extern_as_memory(t); +} + +wasm_extern_t* +wamr_func_as_extern(wasm_func_t* t) +{ + return wasm_func_as_extern(t); +} +wasm_extern_t* +wamr_global_as_extern(wasm_global_t* t) +{ + return wasm_global_as_extern(t); +} +wasm_extern_t* +wamr_table_as_extern(wasm_table_t* t) +{ + return wasm_table_as_extern(t); +} +wasm_extern_t* +wamr_memory_as_extern(wasm_memory_t* t) +{ + return wasm_memory_as_extern(t); +} + +void +wamr_val_vec_new_empty(wasm_val_vec_t* out) +{ + return wasm_val_vec_new_empty(out); +} +void +wamr_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t n) +{ + return wasm_val_vec_new_uninitialized(out, n); +} +void +wamr_val_vec_new(wasm_val_vec_t* out, size_t n, wasm_val_t const* ptr_or_none) +{ + return wasm_val_vec_new(out, n, ptr_or_none); +} +void +wamr_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t* v) +{ + return wasm_val_vec_copy(out, v); +} +void +wamr_val_vec_delete(wasm_val_vec_t* v) +{ + return wasm_val_vec_delete(v); +} + +void +wamr_byte_vec_delete(wasm_byte_vec_t* o) +{ + return wasm_byte_vec_delete(o); +} + +wasm_valtype_t* +wamr_valtype_new(wasm_valkind_t vk) +{ + return wasm_valtype_new(vk); +} +void +wamr_valtype_delete(wasm_valtype_t* t) +{ + return wasm_valtype_delete(t); +} + +wasm_functype_t* +wamr_functype_new_0_1(wasm_valtype_t* r) +{ + return wasm_functype_new_0_1(r); +} +void +wamr_functype_delete(wasm_functype_t* r) +{ + return wasm_functype_delete(r); +} + +wasm_trap_t* +wamr_func_call( + const wasm_func_t* f, + const wasm_val_vec_t* args, + wasm_val_vec_t* results) +{ + return wasm_func_call(f, args, results); +} + +wasm_func_t* +wamr_func_new( + wasm_store_t* s, + const wasm_functype_t* ft, + wasm_func_callback_t cb) +{ + return wasm_func_new(s, ft, cb); +} +void +wamr_func_delete(wasm_func_t* f) +{ + return wasm_func_delete(f); +} + +wasm_func_t* +wamr_func_new_with_env( + wasm_store_t* s, + const wasm_functype_t* type, + wasm_func_callback_with_env_t cb, + void* env, + void (*finalizer)(void*)) +{ + return wasm_func_new_with_env(s, type, cb, env, finalizer); +} + +wasm_functype_t* +wamr_func_type(const wasm_func_t* f) +{ + return wasm_func_type(f); +} + +void +wamr_trap_message(const wasm_trap_t* t, wasm_message_t* out) +{ + return wasm_trap_message(t, out); +} + +void +wamr_trap_delete(wasm_trap_t* t) +{ + return wasm_trap_delete(t); +} + +bool +wamr_runtime_set_default_running_mode(RunningMode running_mode) +{ + return wasm_runtime_set_default_running_mode(running_mode); +} + +bool +wamr_runtime_set_running_mode( + wasm_module_inst_t module_inst, + RunningMode running_mode) +{ + return wasm_runtime_set_running_mode(module_inst, running_mode); +} + +RunningMode +wamr_runtime_get_running_mode(wasm_module_inst_t module_inst) +{ + return wasm_runtime_get_running_mode(module_inst); +} + +void +wamr_runtime_set_log_level(log_level_t level) +{ + return wasm_runtime_set_log_level(level); +} diff --git a/external/wamr/wamr_so.h b/external/wamr/wamr_so.h new file mode 100644 index 00000000000..806ee3d7732 --- /dev/null +++ b/external/wamr/wamr_so.h @@ -0,0 +1,183 @@ +#pragma once + +#include +#include + +// #pragma GCC visibility push(default) + +#if !defined(wamr_so_EXPORTS) && defined(__cplusplus) +extern "C" { +#endif + +wasm_engine_t* +wamr_engine_new(void); + +void +wamr_engine_delete(wasm_engine_t* o); + +wasm_store_t* +wamr_store_new(wasm_engine_t*); +void +wamr_store_delete(wasm_store_t* o); + +wasm_module_t* +wamr_module_new(wasm_store_t*, wasm_byte_vec_t const*); +void +wamr_module_delete(wasm_module_t* o); +void +wamr_module_imports(const wasm_module_t*, wasm_importtype_vec_t* out); +void +wamr_module_exports(const wasm_module_t*, wasm_exporttype_vec_t* out); + +wasm_instance_t* +wamr_instance_new( + wasm_store_t*, + wasm_module_t const*, + wasm_extern_vec_t const*, + wasm_trap_t**); +void +wamr_instance_delete(wasm_instance_t* o); +void +wamr_instance_exports(const wasm_instance_t*, wasm_extern_vec_t* out); + +byte_t* +wamr_memory_data(wasm_memory_t*); +size_t +wamr_memory_data_size(const wasm_memory_t*); + +void +wamr_exporttype_vec_delete(wasm_exporttype_vec_t*); +void +wamr_extern_vec_delete(wasm_extern_vec_t*); + +const wasm_name_t* +wamr_importtype_name(const wasm_importtype_t*); +const wasm_externtype_t* +wamr_importtype_type(const wasm_importtype_t*); + +const wasm_name_t* +wamr_exporttype_name(const wasm_exporttype_t*); +const wasm_externtype_t* +wamr_exporttype_type(const wasm_exporttype_t*); + +wasm_externkind_t +wamr_externtype_kind(const wasm_externtype_t*); +wasm_externkind_t +wamr_extern_kind(const wasm_extern_t*); +wasm_externtype_t* +wamr_extern_type(const wasm_extern_t*); + +wasm_func_t* +wamr_extern_as_func(wasm_extern_t*); +wasm_global_t* +wamr_extern_as_global(wasm_extern_t*); +wasm_table_t* +wamr_extern_as_table(wasm_extern_t*); +wasm_memory_t* +wamr_extern_as_memory(wasm_extern_t*); + +wasm_extern_t* +wamr_func_as_extern(wasm_func_t*); +wasm_extern_t* +wamr_global_as_extern(wasm_global_t*); +wasm_extern_t* +wamr_table_as_extern(wasm_table_t*); +wasm_extern_t* +wamr_memory_as_extern(wasm_memory_t*); + +void +wamr_val_vec_new_empty(wasm_val_vec_t* out); +void +wamr_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t); +void +wamr_val_vec_new(wasm_val_vec_t* out, size_t, wasm_val_t const* ptr_or_none); +void +wamr_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t*); +void +wamr_val_vec_delete(wasm_val_vec_t*); + +void +wamr_byte_vec_delete(wasm_byte_vec_t*); + +wasm_valtype_t* wamr_valtype_new(wasm_valkind_t); +void +wamr_valtype_delete(wasm_valtype_t*); + +inline wasm_valtype_t* +wamr_valtype_new_i32() +{ + return wamr_valtype_new(WASM_I32); +} +inline wasm_valtype_t* +wamr_valtype_new_i64() +{ + return wamr_valtype_new(WASM_I64); +} +inline wasm_valtype_t* +wamr_valtype_new_f32() +{ + return wamr_valtype_new(WASM_F32); +} +inline wasm_valtype_t* +wamr_valtype_new_f64() +{ + return wamr_valtype_new(WASM_F64); +} +inline wasm_valtype_t* +wamr_valtype_new_externref() +{ + return wamr_valtype_new(WASM_EXTERNREF); +} +inline wasm_valtype_t* +wamr_valtype_new_funcref() +{ + return wamr_valtype_new(WASM_FUNCREF); +} + +wasm_functype_t* +wamr_functype_new_0_1(wasm_valtype_t* r); +void +wamr_functype_delete(wasm_functype_t*); + +wasm_trap_t* +wamr_func_call( + const wasm_func_t*, + const wasm_val_vec_t* args, + wasm_val_vec_t* results); +wasm_func_t* +wamr_func_new(wasm_store_t*, const wasm_functype_t*, wasm_func_callback_t); +wasm_func_t* +wamr_func_new_with_env( + wasm_store_t*, + const wasm_functype_t* type, + wasm_func_callback_with_env_t, + void* env, + void (*finalizer)(void*)); +void +wamr_func_delete(wasm_func_t* f); + +wasm_functype_t* +wamr_func_type(const wasm_func_t*); + +void +wamr_trap_message(const wasm_trap_t*, wasm_message_t* out); +void +wamr_trap_delete(wasm_trap_t*); + +bool +wamr_runtime_set_default_running_mode(RunningMode running_mode); +bool +wamr_runtime_set_running_mode( + wasm_module_inst_t module_inst, + RunningMode running_mode); +RunningMode +wamr_runtime_get_running_mode(wasm_module_inst_t module_inst); + +void +wamr_runtime_set_log_level(log_level_t level); + +#if !defined(wamr_so_EXPORTS) && defined(__cplusplus) +} +#endif + +// #pragma GCC visibility pop diff --git a/external/wasmedge/CMakeLists.txt b/external/wasmedge/CMakeLists.txt new file mode 100644 index 00000000000..fd25918e1c7 --- /dev/null +++ b/external/wasmedge/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 3.21) + +project(wasmedge_so + LANGUAGES C +) + +if(NOT TARGET llvm::llvm) + find_package(llvm REQUIRED) +endif() + +#message("LLVM_AVAILABLE_LIBS: ${LLVM_AVAILABLE_LIBS} LLD_EXPORTED_TARGETS: ${LLD_EXPORTED_TARGETS} LLD_CMAKE_DIR: ${LLD_CMAKE_DIR}") + +if(NOT TARGET wasmedge::wasmedge) + find_package(wasmedge REQUIRED) +endif() + +add_library(wasmedge_so SHARED + wasmedge_so.h + wasmedge_so.c +) + +add_library(wasmedge_so::wasmedge_so ALIAS wasmedge_so) + +target_link_libraries(wasmedge_so PRIVATE + -Wl,--no-undefined + -Wl,-Bsymbolic-functions + -Wl,--exclude-libs,ALL + -L${llvm_INCLUDE_DIR}/../lib + wasmedge::wasmedge + lldWasm + lldELF + lldCOFF + lldCommon + llvm::llvm + stdc++ + m + zstd + z + pthread + dl +) + +target_include_directories(wasmedge_so PUBLIC + $ + $ + ${wasmedge_INCLUDE_DIR} +) + +install( + TARGETS wasmedge_so + EXPORT ${PROJECT_NAME}-exports + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) +install( + EXPORT ${PROJECT_NAME}-exports + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: +) +install( + FILES wasmedge_so.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + diff --git a/external/wasmedge/wasmedge_so.c b/external/wasmedge/wasmedge_so.c new file mode 100644 index 00000000000..6926971d7ba --- /dev/null +++ b/external/wasmedge/wasmedge_so.c @@ -0,0 +1,467 @@ +#include "wasmedge_so.h" + +// VALUES +WasmEdge_Value +WasmEdge2_ValueGenI32(const int32_t Val) +{ + return WasmEdge_ValueGenI32(Val); +} + +WasmEdge_ValType +WasmEdge2_ValTypeGenI32(void) +{ + return WasmEdge_ValTypeGenI32(); +} + +int32_t +WasmEdge2_ValueGetI32(const WasmEdge_Value Val) +{ + return WasmEdge_ValueGetI32(Val); +} + +int64_t +WasmEdge2_ValueGetI64(const WasmEdge_Value Val) +{ + return WasmEdge_ValueGetI64(Val); +} + +bool +WasmEdge2_ValTypeIsI64(const WasmEdge_ValType ValType) +{ + return WasmEdge_ValTypeIsI64(ValType); +} + +WasmEdge_Value +WasmEdge2_ValueGenI64(const int64_t Val) +{ + return WasmEdge_ValueGenI64(Val); +} + +WasmEdge_ValType +WasmEdge2_ValTypeGenI64(void) +{ + return WasmEdge_ValTypeGenI64(); +} + +WasmEdge_String +WasmEdge2_StringCreateByCString(const char* Val) +{ + return WasmEdge_StringCreateByCString(Val); +} +void +WasmEdge2_StringDelete(WasmEdge_String Val) +{ + return WasmEdge_StringDelete(Val); +} + +// CONFIG +WasmEdge_ConfigureContext* +WasmEdge2_ConfigureCreate(void) +{ + return WasmEdge_ConfigureCreate(); +} +void +WasmEdge2_ConfigureDelete(WasmEdge_ConfigureContext* Ctx) +{ + return WasmEdge_ConfigureDelete(Ctx); +} + +void +WasmEdge2_ConfigureAddHostRegistration( + WasmEdge_ConfigureContext* Cxt, + const enum WasmEdge_HostRegistration Host) +{ + return WasmEdge_ConfigureAddHostRegistration(Cxt, Host); +} + +void +WasmEdge2_ConfigureStatisticsSetInstructionCounting( + WasmEdge_ConfigureContext* Cxt, + const bool IsCount) +{ + return WasmEdge_ConfigureStatisticsSetInstructionCounting(Cxt, IsCount); +} + +void +WasmEdge2_ConfigureStatisticsSetCostMeasuring( + WasmEdge_ConfigureContext* Cxt, + const bool IsMeasure) +{ + return WasmEdge_ConfigureStatisticsSetCostMeasuring(Cxt, IsMeasure); +} + +// STORE +WasmEdge_StoreContext* +WasmEdge2_StoreCreate() +{ + return WasmEdge_StoreCreate(); +} +void +WasmEdge2_StoreDelete(WasmEdge_StoreContext* Ctx) +{ + return WasmEdge_StoreDelete(Ctx); +} + +// LOADER +WasmEdge_LoaderContext* +WasmEdge2_LoaderCreate(const WasmEdge_ConfigureContext* ConfCxt) +{ + return WasmEdge_LoaderCreate(ConfCxt); +} +void +WasmEdge2_LoaderDelete(WasmEdge_LoaderContext* Ctx) +{ + return WasmEdge_LoaderDelete(Ctx); +} + +// VM +WasmEdge_VMContext* +WasmEdge2_VMCreate( + const WasmEdge_ConfigureContext* ConfCtx, + WasmEdge_StoreContext* StoreCtx) +{ + return WasmEdge_VMCreate(ConfCtx, StoreCtx); +} +void +WasmEdge2_VMDelete(WasmEdge_VMContext* Ctx) +{ + return WasmEdge_VMDelete(Ctx); +} + +WasmEdge_Result +WasmEdge2_VMLoadWasmFromBuffer( + WasmEdge_VMContext* Ctx, + const uint8_t* Buf, + const uint32_t BufLen) +{ + return WasmEdge_VMLoadWasmFromBuffer(Ctx, Buf, BufLen); +} + +WasmEdge_Result +WasmEdge2_VMRunWasmFromBuffer( + WasmEdge_VMContext* Ctx, + const uint8_t* Buf, + const uint32_t BufLen, + const WasmEdge_String FuncName, + const WasmEdge_Value* Params, + const uint32_t ParamLen, + WasmEdge_Value* Returns, + const uint32_t ReturnLen) +{ + return WasmEdge_VMRunWasmFromBuffer( + Ctx, Buf, BufLen, FuncName, Params, ParamLen, Returns, ReturnLen); +} + +WasmEdge_Result +WasmEdge2_VMExecute( + WasmEdge_VMContext* Ctx, + const WasmEdge_String FuncName, + const WasmEdge_Value* Params, + const uint32_t ParamLen, + WasmEdge_Value* Returns, + const uint32_t ReturnLen) +{ + return WasmEdge_VMExecute( + Ctx, FuncName, Params, ParamLen, Returns, ReturnLen); +} + +WasmEdge_Result +WasmEdge2_VMValidate(WasmEdge_VMContext* Ctx) +{ + return WasmEdge_VMValidate(Ctx); +} + +WasmEdge_Result +WasmEdge2_VMInstantiate(WasmEdge_VMContext* Ctx) +{ + return WasmEdge_VMInstantiate(Ctx); +} + +WasmEdge_Result +WasmEdge2_VMRegisterModuleFromImport( + WasmEdge_VMContext* Cxt, + const WasmEdge_ModuleInstanceContext* ImportCxt) +{ + return WasmEdge_VMRegisterModuleFromImport(Cxt, ImportCxt); +} + +const WasmEdge_ModuleInstanceContext* +WasmEdge2_VMGetActiveModule(const WasmEdge_VMContext* Ctx) +{ + return WasmEdge_VMGetActiveModule(Ctx); +} + +// MODULE +WasmEdge_Result +WasmEdge2_LoaderParseFromBuffer( + WasmEdge_LoaderContext* Cxt, + WasmEdge_ASTModuleContext** Module, + const uint8_t* Buf, + const uint32_t BufLen) +{ + return WasmEdge_LoaderParseFromBuffer(Cxt, Module, Buf, BufLen); +} + +void +WasmEdge2_ASTModuleDelete(WasmEdge_ASTModuleContext* Cxt) +{ + return WasmEdge_ASTModuleDelete(Cxt); +} + +uint32_t +WasmEdge2_ASTModuleListImportsLength(const WasmEdge_ASTModuleContext* Cxt) +{ + return WasmEdge_ASTModuleListImportsLength(Cxt); +} + +uint32_t +WasmEdge2_ASTModuleListImports( + const WasmEdge_ASTModuleContext* Cxt, + const WasmEdge_ImportTypeContext** Imports, + const uint32_t Len) +{ + return WasmEdge_ASTModuleListImports(Cxt, Imports, Len); +} + +uint32_t +WasmEdge2_ASTModuleListExportsLength(const WasmEdge_ASTModuleContext* Cxt) +{ + return WasmEdge_ASTModuleListExportsLength(Cxt); +} + +uint32_t +WasmEdge2_ASTModuleListExports( + const WasmEdge_ASTModuleContext* Cxt, + const WasmEdge_ExportTypeContext** Exports, + const uint32_t Len) +{ + return WasmEdge_ASTModuleListExports(Cxt, Exports, Len); +} + +// VALIDATOR +WasmEdge_ValidatorContext* +WasmEdge2_ValidatorCreate(const WasmEdge_ConfigureContext* Cxt) +{ + return WasmEdge_ValidatorCreate(Cxt); +} + +WasmEdge_Result +WasmEdge2_ValidatorValidate( + WasmEdge_ValidatorContext* Cxt, + const WasmEdge_ASTModuleContext* ModuleCxt) +{ + return WasmEdge_ValidatorValidate(Cxt, ModuleCxt); +} + +void +WasmEdge2_ValidatorDelete(WasmEdge_ValidatorContext* Cxt) +{ + return WasmEdge_ValidatorDelete(Cxt); +} + +// MOD INST +WasmEdge_ModuleInstanceContext* +WasmEdge2_ModuleInstanceCreate(const WasmEdge_String ModuleName) +{ + return WasmEdge_ModuleInstanceCreate(ModuleName); +} + +void +WasmEdge2_ModuleInstanceDelete(WasmEdge_ModuleInstanceContext* Cxt) +{ + return WasmEdge_ModuleInstanceDelete(Cxt); +} + +uint32_t +WasmEdge2_ModuleInstanceListFunctionLength( + const WasmEdge_ModuleInstanceContext* Cxt) +{ + return WasmEdge_ModuleInstanceListFunctionLength(Cxt); +} + +uint32_t +WasmEdge2_ModuleInstanceListFunction( + const WasmEdge_ModuleInstanceContext* Cxt, + WasmEdge_String* Names, + const uint32_t Len) +{ + return WasmEdge_ModuleInstanceListFunction(Cxt, Names, Len); +} + +void +WasmEdge2_ModuleInstanceAddFunction( + WasmEdge_ModuleInstanceContext* Cxt, + const WasmEdge_String Name, + WasmEdge_FunctionInstanceContext* FuncCxt) +{ + return WasmEdge_ModuleInstanceAddFunction(Cxt, Name, FuncCxt); +} + +// EXTERN +WasmEdge_MemoryInstanceContext* +WasmEdge2_ModuleInstanceFindMemory( + const WasmEdge_ModuleInstanceContext* Ctx, + const WasmEdge_String Name) +{ + return WasmEdge_ModuleInstanceFindMemory(Ctx, Name); +} + +WasmEdge_FunctionInstanceContext* +WasmEdge2_ModuleInstanceFindFunction( + const WasmEdge_ModuleInstanceContext* Cxt, + const WasmEdge_String Name) +{ + return WasmEdge_ModuleInstanceFindFunction(Cxt, Name); +} + +WasmEdge_Result +WasmEdge2_MemoryInstanceSetData( + WasmEdge_MemoryInstanceContext* Ctx, + const uint8_t* Data, + const uint32_t Offset, + const uint32_t Length) +{ + return WasmEdge_MemoryInstanceSetData(Ctx, Data, Offset, Length); +} + +WasmEdge_Result +WasmEdge2_MemoryInstanceGetData( + const WasmEdge_MemoryInstanceContext* Ctx, + uint8_t* Data, + const uint32_t Offset, + const uint32_t Length) +{ + return WasmEdge_MemoryInstanceGetData(Ctx, Data, Offset, Length); +} + +// EXECUTOR +WasmEdge_ExecutorContext* +WasmEdge2_ExecutorCreate( + const WasmEdge_ConfigureContext* ConfCxt, + WasmEdge_StatisticsContext* StatCxt) +{ + return WasmEdge_ExecutorCreate(ConfCxt, StatCxt); +} +void +WasmEdge2_ExecutorDelete(WasmEdge_ExecutorContext* Cxt) +{ + return WasmEdge_ExecutorDelete(Cxt); +} + +WasmEdge_Result +WasmEdge2_ExecutorInstantiate( + WasmEdge_ExecutorContext* Cxt, + WasmEdge_ModuleInstanceContext** ModuleCxt, + WasmEdge_StoreContext* StoreCxt, + const WasmEdge_ASTModuleContext* ASTCxt) +{ + return WasmEdge_ExecutorInstantiate(Cxt, ModuleCxt, StoreCxt, ASTCxt); +} + +WasmEdge_Result +WasmEdge2_ExecutorInvoke( + WasmEdge_ExecutorContext* Cxt, + const WasmEdge_FunctionInstanceContext* FuncCxt, + const WasmEdge_Value* Params, + const uint32_t ParamLen, + WasmEdge_Value* Returns, + const uint32_t ReturnLen) +{ + return WasmEdge_ExecutorInvoke( + Cxt, FuncCxt, Params, ParamLen, Returns, ReturnLen); +} + +WasmEdge_Result +WasmEdge2_ExecutorRegisterImport( + WasmEdge_ExecutorContext* Cxt, + WasmEdge_StoreContext* StoreCxt, + const WasmEdge_ModuleInstanceContext* ImportCxt) +{ + return WasmEdge_ExecutorRegisterImport(Cxt, StoreCxt, ImportCxt); +} + +// ERRORS +bool +WasmEdge2_ResultOK(const WasmEdge_Result Res) +{ + return WasmEdge_ResultOK(Res); +} +const char* +WasmEdge2_ResultGetMessage(const WasmEdge_Result Res) +{ + return WasmEdge_ResultGetMessage(Res); +} + +// IMPORT FUNCTIONS +WasmEdge_FunctionTypeContext* +WasmEdge2_FunctionTypeCreate( + const WasmEdge_ValType* ParamList, + const uint32_t ParamLen, + const WasmEdge_ValType* ReturnList, + const uint32_t ReturnLen) +{ + return WasmEdge_FunctionTypeCreate( + ParamList, ParamLen, ReturnList, ReturnLen); +} +WasmEdge_FunctionInstanceContext* +WasmEdge2_FunctionInstanceCreate( + const WasmEdge_FunctionTypeContext* Type, + WasmEdge_HostFunc_t HostFunc, + void* Data, + const uint64_t Cost) +{ + return WasmEdge_FunctionInstanceCreate(Type, HostFunc, Data, Cost); +} +void +WasmEdge2_FunctionTypeDelete(WasmEdge_FunctionTypeContext* Cxt) +{ + return WasmEdge_FunctionTypeDelete(Cxt); +} + +WasmEdge_StatisticsContext* +WasmEdge2_StatisticsCreate(void) +{ + return WasmEdge_StatisticsCreate(); +} + +uint64_t +WasmEdge2_StatisticsGetInstrCount(const WasmEdge_StatisticsContext* Cxt) +{ + return WasmEdge_StatisticsGetInstrCount(Cxt); +} +uint64_t +WasmEdge2_StatisticsGetTotalCost(const WasmEdge_StatisticsContext* Cxt) +{ + return WasmEdge_StatisticsGetTotalCost(Cxt); +} +void +WasmEdge2_StatisticsSetCostTable( + WasmEdge_StatisticsContext* Cxt, + uint64_t* CostArr, + const uint32_t Len) +{ + return WasmEdge_StatisticsSetCostTable(Cxt, CostArr, Len); +} +void +WasmEdge2_StatisticsSetCostLimit( + WasmEdge_StatisticsContext* Cxt, + const uint64_t Limit) +{ + return WasmEdge_StatisticsSetCostLimit(Cxt, Limit); +} +void +WasmEdge2_StatisticsClear(WasmEdge_StatisticsContext* Cxt) +{ + return WasmEdge_StatisticsClear(Cxt); +} +void +WasmEdge2_StatisticsDelete(WasmEdge_StatisticsContext* Cxt) +{ + return WasmEdge_StatisticsDelete(Cxt); +} + +void +WasmEdge3_PluginLoadWithDefaultPaths(void) +{ + return WasmEdge_PluginLoadWithDefaultPaths(); +} diff --git a/external/wasmedge/wasmedge_so.h b/external/wasmedge/wasmedge_so.h new file mode 100644 index 00000000000..2b53cabebb0 --- /dev/null +++ b/external/wasmedge/wasmedge_so.h @@ -0,0 +1,251 @@ +#pragma once + +#include + +#if !defined(wasmedge_so_EXPORTS) && defined(__cplusplus) +extern "C" { +#endif + +// VALUES +WasmEdge_Value +WasmEdge2_ValueGenI32(const int32_t Val); +WasmEdge_ValType +WasmEdge2_ValTypeGenI32(void); +int32_t +WasmEdge2_ValueGetI32(const WasmEdge_Value Val); + +WasmEdge_Value +WasmEdge2_ValueGenI64(const int64_t Val); +WasmEdge_ValType +WasmEdge2_ValTypeGenI64(void); +int64_t +WasmEdge2_ValueGetI64(const WasmEdge_Value Val); +bool +WasmEdge2_ValTypeIsI64(const WasmEdge_ValType ValType); + +WasmEdge_String +WasmEdge2_StringCreateByCString(const char* Str); +void +WasmEdge2_StringDelete(WasmEdge_String Str); + +// CONFIG +WasmEdge_ConfigureContext* +WasmEdge2_ConfigureCreate(void); +void +WasmEdge2_ConfigureDelete(WasmEdge_ConfigureContext* Ctx); +void +WasmEdge2_ConfigureAddHostRegistration( + WasmEdge_ConfigureContext* Cxt, + const enum WasmEdge_HostRegistration Host); +void +WasmEdge2_ConfigureStatisticsSetInstructionCounting( + WasmEdge_ConfigureContext* Cxt, + const bool IsCount); +void +WasmEdge2_ConfigureStatisticsSetCostMeasuring( + WasmEdge_ConfigureContext* Cxt, + const bool IsMeasure); + +// STORE +WasmEdge_StoreContext* +WasmEdge2_StoreCreate(); +void +WasmEdge2_StoreDelete(WasmEdge_StoreContext* Ctx); + +// LOADER +WasmEdge_LoaderContext* +WasmEdge2_LoaderCreate(const WasmEdge_ConfigureContext* ConfCxt); +void +WasmEdge2_LoaderDelete(WasmEdge_LoaderContext* Ctx); + +// VM +WasmEdge_VMContext* +WasmEdge2_VMCreate( + const WasmEdge_ConfigureContext* ConfCtx, + WasmEdge_StoreContext* StoreCtx); +void +WasmEdge2_VMDelete(WasmEdge_VMContext* Ctx); +WasmEdge_Result +WasmEdge2_VMLoadWasmFromBuffer( + WasmEdge_VMContext* Ctx, + const uint8_t* Buf, + const uint32_t BufLen); +WasmEdge_Result +WasmEdge2_VMRunWasmFromBuffer( + WasmEdge_VMContext* Ctx, + const uint8_t* Buf, + const uint32_t BufLen, + const WasmEdge_String FuncName, + const WasmEdge_Value* Params, + const uint32_t ParamLen, + WasmEdge_Value* Returns, + const uint32_t ReturnLen); +WasmEdge_Result +WasmEdge2_VMExecute( + WasmEdge_VMContext* Ctx, + const WasmEdge_String FuncName, + const WasmEdge_Value* Params, + const uint32_t ParamLen, + WasmEdge_Value* Returns, + const uint32_t ReturnLen); +WasmEdge_Result +WasmEdge2_VMValidate(WasmEdge_VMContext* Ctx); +WasmEdge_Result +WasmEdge2_VMInstantiate(WasmEdge_VMContext* Ctx); +WasmEdge_Result +WasmEdge2_VMRegisterModuleFromImport( + WasmEdge_VMContext* Cxt, + const WasmEdge_ModuleInstanceContext* ImportCxt); +const WasmEdge_ModuleInstanceContext* +WasmEdge2_VMGetActiveModule(const WasmEdge_VMContext* Ctx); + +// MODULE +WasmEdge_Result +WasmEdge2_LoaderParseFromBuffer( + WasmEdge_LoaderContext* Cxt, + WasmEdge_ASTModuleContext** Module, + const uint8_t* Buf, + const uint32_t BufLen); +void +WasmEdge2_ASTModuleDelete(WasmEdge_ASTModuleContext* Cxt); +uint32_t +WasmEdge2_ASTModuleListImportsLength(const WasmEdge_ASTModuleContext* Cxt); +uint32_t +WasmEdge2_ASTModuleListImports( + const WasmEdge_ASTModuleContext* Cxt, + const WasmEdge_ImportTypeContext** Imports, + const uint32_t Len); +uint32_t +WasmEdge2_ASTModuleListExportsLength(const WasmEdge_ASTModuleContext* Cxt); +uint32_t +WasmEdge2_ASTModuleListExports( + const WasmEdge_ASTModuleContext* Cxt, + const WasmEdge_ExportTypeContext** Exports, + const uint32_t Len); + +// VALIDATOR +WasmEdge_ValidatorContext* +WasmEdge2_ValidatorCreate(const WasmEdge_ConfigureContext* ConfCxt); +WasmEdge_Result +WasmEdge2_ValidatorValidate( + WasmEdge_ValidatorContext* Cxt, + const WasmEdge_ASTModuleContext* ModuleCxt); +void +WasmEdge2_ValidatorDelete(WasmEdge_ValidatorContext* Cxt); + +// MOD INST +WasmEdge_ModuleInstanceContext* +WasmEdge2_ModuleInstanceCreate(const WasmEdge_String ModuleName); +void +WasmEdge2_ModuleInstanceDelete(WasmEdge_ModuleInstanceContext* Cxt); +uint32_t +WasmEdge2_ModuleInstanceListFunctionLength( + const WasmEdge_ModuleInstanceContext* Cxt); +uint32_t +WasmEdge2_ModuleInstanceListFunction( + const WasmEdge_ModuleInstanceContext* Cxt, + WasmEdge_String* Names, + const uint32_t Len); +void +WasmEdge2_ModuleInstanceAddFunction( + WasmEdge_ModuleInstanceContext* Cxt, + const WasmEdge_String Name, + WasmEdge_FunctionInstanceContext* FuncCxt); + +// EXTERN +WasmEdge_MemoryInstanceContext* +WasmEdge2_ModuleInstanceFindMemory( + const WasmEdge_ModuleInstanceContext* Ctx, + const WasmEdge_String Name); +WasmEdge_FunctionInstanceContext* +WasmEdge2_ModuleInstanceFindFunction( + const WasmEdge_ModuleInstanceContext* Cxt, + const WasmEdge_String Name); +WasmEdge_Result +WasmEdge2_MemoryInstanceSetData( + WasmEdge_MemoryInstanceContext* Ctx, + const uint8_t* Data, + const uint32_t Offset, + const uint32_t Length); +WasmEdge_Result +WasmEdge2_MemoryInstanceGetData( + const WasmEdge_MemoryInstanceContext* Ctx, + uint8_t* Data, + const uint32_t Offset, + const uint32_t Length); + +// EXECUTOR +WasmEdge_ExecutorContext* +WasmEdge2_ExecutorCreate( + const WasmEdge_ConfigureContext* ConfCxt, + WasmEdge_StatisticsContext* StatCxt); +void +WasmEdge2_ExecutorDelete(WasmEdge_ExecutorContext* Cxt); +WasmEdge_Result +WasmEdge2_ExecutorInstantiate( + WasmEdge_ExecutorContext* Cxt, + WasmEdge_ModuleInstanceContext** ModuleCxt, + WasmEdge_StoreContext* StoreCxt, + const WasmEdge_ASTModuleContext* ASTCxt); +WasmEdge_Result +WasmEdge2_ExecutorInvoke( + WasmEdge_ExecutorContext* Cxt, + const WasmEdge_FunctionInstanceContext* FuncCxt, + const WasmEdge_Value* Params, + const uint32_t ParamLen, + WasmEdge_Value* Returns, + const uint32_t ReturnLen); +WasmEdge_Result +WasmEdge2_ExecutorRegisterImport( + WasmEdge_ExecutorContext* Cxt, + WasmEdge_StoreContext* StoreCxt, + const WasmEdge_ModuleInstanceContext* ImportCxt); + +// ERRORS +bool +WasmEdge2_ResultOK(const WasmEdge_Result Res); +const char* +WasmEdge2_ResultGetMessage(const WasmEdge_Result Res); + +// IMPORT FUNCTIONS +WasmEdge_FunctionTypeContext* +WasmEdge2_FunctionTypeCreate( + const WasmEdge_ValType* ParamList, + const uint32_t ParamLen, + const WasmEdge_ValType* ReturnList, + const uint32_t ReturnLen); +WasmEdge_FunctionInstanceContext* +WasmEdge2_FunctionInstanceCreate( + const WasmEdge_FunctionTypeContext* Type, + WasmEdge_HostFunc_t HostFunc, + void* Data, + const uint64_t Cost); +void +WasmEdge2_FunctionTypeDelete(WasmEdge_FunctionTypeContext* Cxt); + +WasmEdge_StatisticsContext* +WasmEdge2_StatisticsCreate(void); +uint64_t +WasmEdge2_StatisticsGetInstrCount(const WasmEdge_StatisticsContext* Cxt); +uint64_t +WasmEdge2_StatisticsGetTotalCost(const WasmEdge_StatisticsContext* Cxt); +void +WasmEdge2_StatisticsSetCostTable( + WasmEdge_StatisticsContext* Cxt, + uint64_t* CostArr, + const uint32_t Len); +void +WasmEdge2_StatisticsSetCostLimit( + WasmEdge_StatisticsContext* Cxt, + const uint64_t Limit); +void +WasmEdge2_StatisticsClear(WasmEdge_StatisticsContext* Cxt); +void +WasmEdge2_StatisticsDelete(WasmEdge_StatisticsContext* Cxt); + +void +WasmEdge3_PluginLoadWithDefaultPaths(void); + +#if !defined(wasmedge_so_EXPORTS) && defined(__cplusplus) +} +#endif diff --git a/external/wasmer/CMakeLists.txt b/external/wasmer/CMakeLists.txt new file mode 100644 index 00000000000..513862cdf7f --- /dev/null +++ b/external/wasmer/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.21) + +project(wasmer_so + LANGUAGES C +) + +if(NOT TARGET llvm-18::llvm-18) + find_package(llvm-18 REQUIRED) +endif() + +if(NOT TARGET wasmer::wasmer) + find_package(wasmer REQUIRED) +endif() + +add_library(wasmer_so SHARED + wasmer_so.h + wasmer_so.c +) + +add_library(wasmer_so::wasmer_so ALIAS wasmer_so) + +target_link_libraries(wasmer_so PRIVATE + -Wl,--no-undefined + -Wl,-Bsymbolic-functions + -Wl,--exclude-libs,ALL + wasmer::wasmer + llvm-18::llvm-18 + stdc++ + curses + m + zstd + z + pthread + dl +) + +target_include_directories(wasmer_so PUBLIC + $ + $ + ${wasmer_INCLUDE_DIR} +) + +install( + TARGETS wasmer_so + EXPORT ${PROJECT_NAME}-exports + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) +install( + EXPORT ${PROJECT_NAME}-exports + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: +) +install( + FILES wasmer_so.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + diff --git a/external/wasmer/wasmer_so.c b/external/wasmer/wasmer_so.c new file mode 100644 index 00000000000..e4012c61787 --- /dev/null +++ b/external/wasmer/wasmer_so.c @@ -0,0 +1,372 @@ +#include "wasmer_so.h" + +wasm_config_t* +wasmer2_config_new() +{ + return wasm_config_new(); +} + +void +wasmer2_config_delete(wasm_config_t* c) +{ + return wasm_config_delete(c); +} + +static uint64_t +m_test(wasmer_parser_operator_t wasm_operator) +{ + switch (wasm_operator) + { + // `local.get` and `i32.const` cost 1 unit. + case LocalGet: + case I32Const: + return 1; + + // `i32.add` costs 2 units. + case I32Add: + return 2; + + // The other operations are free. + default: + return 0; + } +} + +void +wasmer2_config_push_middleware(wasm_config_t* c, wasmer_middleware_t* m) +{ + return wasm_config_push_middleware(c, m); +} + +wasm_engine_t* +wasmer2_engine_new_with_config(wasm_config_t* c) +{ + return wasm_engine_new_with_config(c); +} + +wasm_engine_t* +wasmer2_engine_new(void) +{ + return wasm_engine_new(); +} + +void +wasmer2_engine_delete(wasm_engine_t* o) +{ + return wasm_engine_delete(o); +} + +wasm_store_t* +wasmer2_store_new(wasm_engine_t* e) +{ + return wasm_store_new(e); +} + +void +wasmer2_store_delete(wasm_store_t* o) +{ + return wasm_store_delete(o); +} + +wasm_module_t* +wasmer2_module_new(wasm_store_t* s, wasm_byte_vec_t const* c) +{ + return wasm_module_new(s, c); +} + +void +wasmer2_module_delete(wasm_module_t* o) +{ + return wasm_module_delete(o); +} + +void +wasmer2_module_imports(const wasm_module_t* m, wasm_importtype_vec_t* out) +{ + return wasm_module_imports(m, out); +} +void +wasmer2_module_exports(const wasm_module_t* m, wasm_exporttype_vec_t* out) +{ + return wasm_module_exports(m, out); +} + +wasm_instance_t* +wasmer2_instance_new( + wasm_store_t* s, + wasm_module_t const* m, + wasm_extern_vec_t const* imports, + wasm_trap_t** t) +{ + return wasm_instance_new(s, m, imports, t); +} +void +wasmer2_instance_delete(wasm_instance_t* o) +{ + return wasm_instance_delete(o); +} + +void +wasmer2_instance_exports(const wasm_instance_t* i, wasm_extern_vec_t* out) +{ + return wasm_instance_exports(i, out); +} + +byte_t* +wasmer2_memory_data(wasm_memory_t* m) +{ + return wasm_memory_data(m); +} + +size_t +wasmer2_memory_data_size(const wasm_memory_t* m) +{ + return wasm_memory_data_size(m); +} + +void +wasmer2_exporttype_vec_delete(wasm_exporttype_vec_t* o) +{ + return wasm_exporttype_vec_delete(o); +} +void +wasmer2_extern_vec_delete(wasm_extern_vec_t* o) +{ + return wasm_extern_vec_delete(o); +} + +const wasm_name_t* +wasmer2_importtype_name(const wasm_importtype_t* o) +{ + return wasm_importtype_name(o); +} +const wasm_externtype_t* +wasmer2_importtype_type(const wasm_importtype_t* o) +{ + return wasm_importtype_type(o); +} + +const wasm_name_t* +wasmer2_exporttype_name(const wasm_exporttype_t* o) +{ + return wasm_exporttype_name(o); +} +const wasm_externtype_t* +wasmer2_exporttype_type(const wasm_exporttype_t* o) +{ + return wasm_exporttype_type(o); +} + +wasm_externkind_t +wasmer2_externtype_kind(const wasm_externtype_t* t) +{ + return wasm_externtype_kind(t); +} + +wasm_externkind_t +wasmer2_extern_kind(const wasm_extern_t* t) +{ + return wasm_extern_kind(t); +} + +wasm_externtype_t* +wasmer2_extern_type(const wasm_extern_t* t) +{ + return wasm_extern_type(t); +} + +wasm_func_t* +wasmer2_extern_as_func(wasm_extern_t* t) +{ + return wasm_extern_as_func(t); +} +wasm_global_t* +wasmer2_extern_as_global(wasm_extern_t* t) +{ + return wasm_extern_as_global(t); +} +wasm_table_t* +wasmer2_extern_as_table(wasm_extern_t* t) +{ + return wasm_extern_as_table(t); +} +wasm_memory_t* +wasmer2_extern_as_memory(wasm_extern_t* t) +{ + return wasm_extern_as_memory(t); +} + +wasm_extern_t* +wasmer2_func_as_extern(wasm_func_t* t) +{ + return wasm_func_as_extern(t); +} +wasm_extern_t* +wasmer2_global_as_extern(wasm_global_t* t) +{ + return wasm_global_as_extern(t); +} +wasm_extern_t* +wasmer2_table_as_extern(wasm_table_t* t) +{ + return wasm_table_as_extern(t); +} +wasm_extern_t* +wasmer2_memory_as_extern(wasm_memory_t* t) +{ + return wasm_memory_as_extern(t); +} + +void +wasmer2_val_vec_new_empty(wasm_val_vec_t* out) +{ + return wasm_val_vec_new_empty(out); +} +void +wasmer2_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t n) +{ + return wasm_val_vec_new_uninitialized(out, n); +} +void +wasmer2_val_vec_new( + wasm_val_vec_t* out, + size_t n, + wasm_val_t const* ptr_or_none) +{ + return wasm_val_vec_new(out, n, ptr_or_none); +} +void +wasmer2_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t* v) +{ + return wasm_val_vec_copy(out, v); +} +void +wasmer2_val_vec_delete(wasm_val_vec_t* v) +{ + return wasm_val_vec_delete(v); +} + +void +wasmer2_byte_vec_delete(wasm_byte_vec_t* o) +{ + return wasm_byte_vec_delete(o); +} + +wasm_valtype_t* +wasmer2_valtype_new(wasm_valkind_t vk) +{ + return wasm_valtype_new(vk); +} +void +wasmer2_valtype_delete(wasm_valtype_t* t) +{ + return wasm_valtype_delete(t); +} + +wasm_functype_t* +wasmer2_functype_new_0_1(wasm_valtype_t* r) +{ + return wasm_functype_new_0_1(r); +} +wasm_functype_t* +wasmer2_functype_new_1_0(wasm_valtype_t* r) +{ + return wasm_functype_new_1_0(r); +} +void +wasmer2_functype_delete(wasm_functype_t* r) +{ + return wasm_functype_delete(r); +} + +wasm_trap_t* +wasmer2_func_call( + const wasm_func_t* f, + const wasm_val_vec_t* args, + wasm_val_vec_t* results) +{ + return wasm_func_call(f, args, results); +} + +wasm_func_t* +wasmer2_func_new( + wasm_store_t* s, + const wasm_functype_t* ft, + wasm_func_callback_t cb) +{ + return wasm_func_new(s, ft, cb); +} +void +wasmer2_func_delete(wasm_func_t* f) +{ + return wasm_func_delete(f); +} + +wasm_func_t* +wasmer2_func_new_with_env( + wasm_store_t* s, + const wasm_functype_t* type, + wasm_func_callback_with_env_t cb, + void* env, + void (*finalizer)(void*)) +{ + return wasm_func_new_with_env(s, type, cb, env, finalizer); +} + +wasm_functype_t* +wasmer2_func_type(const wasm_func_t* f) +{ + return wasm_func_type(f); +} + +void +wasmer2_trap_message(const wasm_trap_t* t, wasm_message_t* out) +{ + return wasm_trap_message(t, out); +} + +void +wasmer2_trap_delete(wasm_trap_t* t) +{ + return wasm_trap_delete(t); +} + +wasmer_middleware_t* +wasmer2_metering_as_middleware(wasmer_metering_t* metering) +{ + return wasmer_metering_as_middleware(metering); +} + +void +wasmer2_metering_delete(wasmer_metering_t* metering) +{ + return wasmer_metering_delete(metering); +} + +uint64_t +wasmer2_metering_get_remaining_points(wasm_instance_t* instance) +{ + return wasmer_metering_get_remaining_points(instance); +} + +wasmer_metering_t* +wasmer2_metering_new( + uint64_t initial_limit, + wasmer_metering_cost_function_t cost_function) +{ + return wasmer_metering_new(initial_limit, cost_function); +} + +bool +wasmer2_metering_points_are_exhausted(wasm_instance_t* instance) +{ + return wasmer_metering_points_are_exhausted(instance); +} + +void +wasmer2_metering_set_remaining_points( + wasm_instance_t* instance, + uint64_t new_limit) +{ + return wasmer_metering_set_remaining_points(instance, new_limit); +} diff --git a/external/wasmer/wasmer_so.h b/external/wasmer/wasmer_so.h new file mode 100644 index 00000000000..ec5b2310a62 --- /dev/null +++ b/external/wasmer/wasmer_so.h @@ -0,0 +1,195 @@ +#pragma once + +#include + +#if !defined(wasmer_so_EXPORTS) && defined(__cplusplus) +extern "C" { +#endif + +wasm_config_t* +wasmer2_config_new(); +void +wasmer2_config_delete(wasm_config_t*); +void +wasmer2_config_push_middleware(wasm_config_t* c, wasmer_middleware_t* m); + +wasm_engine_t* +wasmer2_engine_new_with_config(wasm_config_t* c); +wasm_engine_t* +wasmer2_engine_new(void); +void +wasmer2_engine_delete(wasm_engine_t* o); + +wasm_store_t* +wasmer2_store_new(wasm_engine_t*); +void +wasmer2_store_delete(wasm_store_t* o); + +wasm_module_t* +wasmer2_module_new(wasm_store_t*, wasm_byte_vec_t const*); +void +wasmer2_module_delete(wasm_module_t* o); +void +wasmer2_module_imports(const wasm_module_t*, wasm_importtype_vec_t* out); +void +wasmer2_module_exports(const wasm_module_t*, wasm_exporttype_vec_t* out); + +wasm_instance_t* +wasmer2_instance_new( + wasm_store_t*, + wasm_module_t const*, + wasm_extern_vec_t const*, + wasm_trap_t**); +void +wasmer2_instance_delete(wasm_instance_t* o); +void +wasmer2_instance_exports(const wasm_instance_t*, wasm_extern_vec_t* out); + +byte_t* +wasmer2_memory_data(wasm_memory_t*); +size_t +wasmer2_memory_data_size(const wasm_memory_t*); + +void +wasmer2_exporttype_vec_delete(wasm_exporttype_vec_t*); +void +wasmer2_extern_vec_delete(wasm_extern_vec_t*); + +const wasm_name_t* +wasmer2_importtype_name(const wasm_importtype_t*); +const wasm_externtype_t* +wasmer2_importtype_type(const wasm_importtype_t*); + +const wasm_name_t* +wasmer2_exporttype_name(const wasm_exporttype_t*); +const wasm_externtype_t* +wasmer2_exporttype_type(const wasm_exporttype_t*); + +wasm_externkind_t +wasmer2_externtype_kind(const wasm_externtype_t*); +wasm_externkind_t +wasmer2_extern_kind(const wasm_extern_t*); +wasm_externtype_t* +wasmer2_extern_type(const wasm_extern_t*); + +wasm_func_t* +wasmer2_extern_as_func(wasm_extern_t*); +wasm_global_t* +wasmer2_extern_as_global(wasm_extern_t*); +wasm_table_t* +wasmer2_extern_as_table(wasm_extern_t*); +wasm_memory_t* +wasmer2_extern_as_memory(wasm_extern_t*); + +wasm_extern_t* +wasmer2_func_as_extern(wasm_func_t*); +wasm_extern_t* +wasmer2_global_as_extern(wasm_global_t*); +wasm_extern_t* +wasmer2_table_as_extern(wasm_table_t*); +wasm_extern_t* +wasmer2_memory_as_extern(wasm_memory_t*); + +void +wasmer2_val_vec_new_empty(wasm_val_vec_t* out); +void +wasmer2_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t); +void +wasmer2_val_vec_new(wasm_val_vec_t* out, size_t, wasm_val_t const* ptr_or_none); +void +wasmer2_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t*); +void +wasmer2_val_vec_delete(wasm_val_vec_t*); + +void +wasmer2_byte_vec_delete(wasm_byte_vec_t*); + +wasm_valtype_t* wasmer2_valtype_new(wasm_valkind_t); +void +wasmer2_valtype_delete(wasm_valtype_t*); + +inline wasm_valtype_t* +wasmer2_valtype_new_i32() +{ + return wasmer2_valtype_new(WASM_I32); +} +inline wasm_valtype_t* +wasmer2_valtype_new_i64() +{ + return wasmer2_valtype_new(WASM_I64); +} +inline wasm_valtype_t* +wasmer2_valtype_new_f32() +{ + return wasmer2_valtype_new(WASM_F32); +} +inline wasm_valtype_t* +wasmer2_valtype_new_f64() +{ + return wasmer2_valtype_new(WASM_F64); +} +inline wasm_valtype_t* +wasmer2_valtype_new_externref() +{ + return wasmer2_valtype_new(WASM_EXTERNREF); +} +inline wasm_valtype_t* +wasmer2_valtype_new_funcref() +{ + return wasmer2_valtype_new(WASM_FUNCREF); +} + +wasm_functype_t* +wasmer2_functype_new_0_1(wasm_valtype_t* r); +wasm_functype_t* +wasmer2_functype_new_1_0(wasm_valtype_t* r); +void +wasmer2_functype_delete(wasm_functype_t*); + +wasm_trap_t* +wasmer2_func_call( + const wasm_func_t*, + const wasm_val_vec_t* args, + wasm_val_vec_t* results); +wasm_func_t* +wasmer2_func_new(wasm_store_t*, const wasm_functype_t*, wasm_func_callback_t); +wasm_func_t* +wasmer2_func_new_with_env( + wasm_store_t*, + const wasm_functype_t* type, + wasm_func_callback_with_env_t, + void* env, + void (*finalizer)(void*)); +void +wasmer2_func_delete(wasm_func_t* f); + +wasm_functype_t* +wasmer2_func_type(const wasm_func_t*); + +void +wasmer2_trap_message(const wasm_trap_t*, wasm_message_t* out); +void +wasmer2_trap_delete(wasm_trap_t*); + +// METERING + +wasmer_middleware_t* +wasmer2_metering_as_middleware(struct wasmer_metering_t* metering); +void +wasmer2_metering_delete(struct wasmer_metering_t* _metering); +uint64_t +wasmer2_metering_get_remaining_points(wasm_instance_t* instance); +wasmer_metering_t* +wasmer2_metering_new( + uint64_t initial_limit, + wasmer_metering_cost_function_t cost_function); +bool +wasmer2_metering_points_are_exhausted(wasm_instance_t* instance); +void +wasmer2_metering_set_remaining_points( + wasm_instance_t* instance, + uint64_t new_limit); + +#if !defined(wasmer_so_EXPORTS) && defined(__cplusplus) +} +#endif diff --git a/external/wasmi/CMakeLists.txt b/external/wasmi/CMakeLists.txt new file mode 100644 index 00000000000..0deb3be7004 --- /dev/null +++ b/external/wasmi/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 3.21) + +project(wasmi_so + LANGUAGES C +) + +if(NOT TARGET wasmi::wasmi) + find_package(wasmi REQUIRED) +endif() + +add_library(wasmi_so SHARED + wasmi_so.h + wasmi_so.c +) + +add_library(wasmi_so::wasmi_so ALIAS wasmi_so) + +target_link_libraries(wasmi_so PRIVATE + -Wl,--no-undefined + -Wl,-Bsymbolic-functions + -Wl,--exclude-libs,ALL + wasmi::wasmi + m + z + dl +) + +target_include_directories(wasmi_so PUBLIC + $ + $ + ${wasmi_INCLUDE_DIR} +) + +install( + TARGETS wasmi_so + EXPORT ${PROJECT_NAME}-exports + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) +install( + EXPORT ${PROJECT_NAME}-exports + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: +) +install( + FILES wasmi_so.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + diff --git a/external/wasmi/wasmi_so.c b/external/wasmi/wasmi_so.c new file mode 100644 index 00000000000..1326b66d5d9 --- /dev/null +++ b/external/wasmi/wasmi_so.c @@ -0,0 +1,285 @@ +#include "wasmi_so.h" + +wasm_engine_t* +wasmi2_engine_new(void) +{ + return wasm_engine_new(); +} + +void +wasmi2_engine_delete(wasm_engine_t* o) +{ + return wasm_engine_delete(o); +} + +wasm_store_t* +wasmi2_store_new(wasm_engine_t* e) +{ + return wasm_store_new(e); +} + +void +wasmi2_store_delete(wasm_store_t* o) +{ + return wasm_store_delete(o); +} + +wasm_module_t* +wasmi2_module_new(wasm_store_t* s, wasm_byte_vec_t const* c) +{ + return wasm_module_new(s, c); +} + +void +wasmi2_module_delete(wasm_module_t* o) +{ + return wasm_module_delete(o); +} + +void +wasmi2_module_imports(const wasm_module_t* m, wasm_importtype_vec_t* out) +{ + return wasm_module_imports(m, out); +} +void +wasmi2_module_exports(const wasm_module_t* m, wasm_exporttype_vec_t* out) +{ + return wasm_module_exports(m, out); +} + +wasm_instance_t* +wasmi2_instance_new( + wasm_store_t* s, + wasm_module_t const* m, + wasm_extern_vec_t const* imports, + wasm_trap_t** t) +{ + return wasm_instance_new(s, m, imports, t); +} +void +wasmi2_instance_delete(wasm_instance_t* o) +{ + return wasm_instance_delete(o); +} + +void +wasmi2_instance_exports(const wasm_instance_t* i, wasm_extern_vec_t* out) +{ + return wasm_instance_exports(i, out); +} + +byte_t* +wasmi2_memory_data(wasm_memory_t* m) +{ + return wasm_memory_data(m); +} + +size_t +wasmi2_memory_data_size(const wasm_memory_t* m) +{ + return wasm_memory_data_size(m); +} + +void +wasmi2_exporttype_vec_delete(wasm_exporttype_vec_t* o) +{ + return wasm_exporttype_vec_delete(o); +} +void +wasmi2_extern_vec_delete(wasm_extern_vec_t* o) +{ + return wasm_extern_vec_delete(o); +} + +const wasm_name_t* +wasmi2_importtype_name(const wasm_importtype_t* o) +{ + return wasm_importtype_name(o); +} +const wasm_externtype_t* +wasmi2_importtype_type(const wasm_importtype_t* o) +{ + return wasm_importtype_type(o); +} + +const wasm_name_t* +wasmi2_exporttype_name(const wasm_exporttype_t* o) +{ + return wasm_exporttype_name(o); +} +const wasm_externtype_t* +wasmi2_exporttype_type(const wasm_exporttype_t* o) +{ + return wasm_exporttype_type(o); +} + +wasm_externkind_t +wasmi2_externtype_kind(const wasm_externtype_t* t) +{ + return wasm_externtype_kind(t); +} + +wasm_externkind_t +wasmi2_extern_kind(const wasm_extern_t* t) +{ + return wasm_extern_kind(t); +} + +wasm_externtype_t* +wasmi2_extern_type(const wasm_extern_t* t) +{ + return wasm_extern_type(t); +} + +wasm_func_t* +wasmi2_extern_as_func(wasm_extern_t* t) +{ + return wasm_extern_as_func(t); +} +wasm_global_t* +wasmi2_extern_as_global(wasm_extern_t* t) +{ + return wasm_extern_as_global(t); +} +wasm_table_t* +wasmi2_extern_as_table(wasm_extern_t* t) +{ + return wasm_extern_as_table(t); +} +wasm_memory_t* +wasmi2_extern_as_memory(wasm_extern_t* t) +{ + return wasm_extern_as_memory(t); +} + +wasm_extern_t* +wasmi2_func_as_extern(wasm_func_t* t) +{ + return wasm_func_as_extern(t); +} +wasm_extern_t* +wasmi2_global_as_extern(wasm_global_t* t) +{ + return wasm_global_as_extern(t); +} +wasm_extern_t* +wasmi2_table_as_extern(wasm_table_t* t) +{ + return wasm_table_as_extern(t); +} +wasm_extern_t* +wasmi2_memory_as_extern(wasm_memory_t* t) +{ + return wasm_memory_as_extern(t); +} + +void +wasmi2_val_vec_new_empty(wasm_val_vec_t* out) +{ + return wasm_val_vec_new_empty(out); +} +void +wasmi2_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t n) +{ + return wasm_val_vec_new_uninitialized(out, n); +} +void +wasmi2_val_vec_new(wasm_val_vec_t* out, size_t n, wasm_val_t const* ptr_or_none) +{ + return wasm_val_vec_new(out, n, ptr_or_none); +} +void +wasmi2_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t* v) +{ + return wasm_val_vec_copy(out, v); +} +void +wasmi2_val_vec_delete(wasm_val_vec_t* v) +{ + return wasm_val_vec_delete(v); +} + +void +wasmi2_byte_vec_delete(wasm_byte_vec_t* o) +{ + return wasm_byte_vec_delete(o); +} + +wasm_valtype_t* +wasmi2_valtype_new(wasm_valkind_t vk) +{ + return wasm_valtype_new(vk); +} +void +wasmi2_valtype_delete(wasm_valtype_t* t) +{ + return wasm_valtype_delete(t); +} + +wasm_functype_t* +wasmi2_functype_new_0_1(wasm_valtype_t* r) +{ + return wasm_functype_new_0_1(r); +} +wasm_functype_t* +wasmi2_functype_new_1_0(wasm_valtype_t* r) +{ + return wasm_functype_new_1_0(r); +} +void +wasmi2_functype_delete(wasm_functype_t* r) +{ + return wasm_functype_delete(r); +} + +wasm_trap_t* +wasmi2_func_call( + const wasm_func_t* f, + const wasm_val_vec_t* args, + wasm_val_vec_t* results) +{ + return wasm_func_call(f, args, results); +} + +wasm_func_t* +wasmi2_func_new( + wasm_store_t* s, + const wasm_functype_t* ft, + wasm_func_callback_t cb) +{ + return wasm_func_new(s, ft, cb); +} +void +wasmi2_func_delete(wasm_func_t* f) +{ + return wasm_func_delete(f); +} + +wasm_func_t* +wasmi2_func_new_with_env( + wasm_store_t* s, + const wasm_functype_t* type, + wasm_func_callback_with_env_t cb, + void* env, + void (*finalizer)(void*)) +{ + return wasm_func_new_with_env(s, type, cb, env, finalizer); +} + +wasm_functype_t* +wasmi2_func_type(const wasm_func_t* f) +{ + return wasm_func_type(f); +} + +void +wasmi2_trap_message(const wasm_trap_t* t, wasm_message_t* out) +{ + return wasm_trap_message(t, out); +} + +void +wasmi2_trap_delete(wasm_trap_t* t) +{ + return wasm_trap_delete(t); +} diff --git a/external/wasmi/wasmi_so.h b/external/wasmi/wasmi_so.h new file mode 100644 index 00000000000..20a9dbf6d6a --- /dev/null +++ b/external/wasmi/wasmi_so.h @@ -0,0 +1,178 @@ +#pragma once + +#include + +#if !defined(wasmi_so_EXPORTS) && defined(__cplusplus) +extern "C" { +#endif + +wasm_engine_t* +wasmi2_engine_new(void); + +void +wasmi2_engine_delete(wasm_engine_t* o); + +wasm_store_t* +wasmi2_store_new(wasm_engine_t*); +void +wasmi2_store_delete(wasm_store_t* o); + +wasm_module_t* +wasmi2_module_new(wasm_store_t*, wasm_byte_vec_t const*); +void +wasmi2_module_delete(wasm_module_t* o); +void +wasmi2_module_imports(const wasm_module_t*, wasm_importtype_vec_t* out); +void +wasmi2_module_exports(const wasm_module_t*, wasm_exporttype_vec_t* out); + +wasm_instance_t* +wasmi2_instance_new( + wasm_store_t*, + wasm_module_t const*, + wasm_extern_vec_t const*, + wasm_trap_t**); +void +wasmi2_instance_delete(wasm_instance_t* o); +void +wasmi2_instance_exports(const wasm_instance_t*, wasm_extern_vec_t* out); + +byte_t* +wasmi2_memory_data(wasm_memory_t*); +size_t +wasmi2_memory_data_size(const wasm_memory_t*); + +void +wasmi2_exporttype_vec_delete(wasm_exporttype_vec_t*); +void +wasmi2_extern_vec_delete(wasm_extern_vec_t*); + +const wasm_name_t* +wasmi2_importtype_name(const wasm_importtype_t*); +const wasm_externtype_t* +wasmi2_importtype_type(const wasm_importtype_t*); + +const wasm_name_t* +wasmi2_exporttype_name(const wasm_exporttype_t*); +const wasm_externtype_t* +wasmi2_exporttype_type(const wasm_exporttype_t*); + +wasm_externkind_t +wasmi2_externtype_kind(const wasm_externtype_t*); +wasm_externkind_t +wasmi2_extern_kind(const wasm_extern_t*); +wasm_externtype_t* +wasmi2_extern_type(const wasm_extern_t*); + +wasm_func_t* +wasmi2_extern_as_func(wasm_extern_t*); +wasm_global_t* +wasmi2_extern_as_global(wasm_extern_t*); +wasm_table_t* +wasmi2_extern_as_table(wasm_extern_t*); +wasm_memory_t* +wasmi2_extern_as_memory(wasm_extern_t*); + +wasm_extern_t* +wasmi2_func_as_extern(wasm_func_t*); +wasm_extern_t* +wasmi2_global_as_extern(wasm_global_t*); +wasm_extern_t* +wasmi2_table_as_extern(wasm_table_t*); +wasm_extern_t* +wasmi2_memory_as_extern(wasm_memory_t*); + +void +wasmi2_val_vec_new_empty(wasm_val_vec_t* out); +void +wasmi2_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t); +void +wasmi2_val_vec_new(wasm_val_vec_t* out, size_t, wasm_val_t const* ptr_or_none); +void +wasmi2_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t*); +void +wasmi2_val_vec_delete(wasm_val_vec_t*); + +void +wasmi2_byte_vec_delete(wasm_byte_vec_t*); + +wasm_valtype_t* wasmi2_valtype_new(wasm_valkind_t); +void +wasmi2_valtype_delete(wasm_valtype_t*); + +inline wasm_valtype_t* +wasmi2_valtype_new_i32() +{ + return wasmi2_valtype_new(WASM_I32); +} +inline wasm_valtype_t* +wasmi2_valtype_new_i64() +{ + return wasmi2_valtype_new(WASM_I64); +} +inline wasm_valtype_t* +wasmi2_valtype_new_f32() +{ + return wasmi2_valtype_new(WASM_F32); +} +inline wasm_valtype_t* +wasmi2_valtype_new_f64() +{ + return wasmi2_valtype_new(WASM_F64); +} +inline wasm_valtype_t* +wasmi2_valtype_new_externref() +{ + return wasmi2_valtype_new(WASM_EXTERNREF); +} +inline wasm_valtype_t* +wasmi2_valtype_new_funcref() +{ + return wasmi2_valtype_new(WASM_FUNCREF); +} + +wasm_functype_t* +wasmi2_functype_new_0_1(wasm_valtype_t* r); +wasm_functype_t* +wasmi2_functype_new_1_0(wasm_valtype_t* r); +void +wasmi2_functype_delete(wasm_functype_t*); + +wasm_trap_t* +wasmi2_func_call( + const wasm_func_t*, + const wasm_val_vec_t* args, + wasm_val_vec_t* results); +wasm_func_t* +wasmi2_func_new(wasm_store_t*, const wasm_functype_t*, wasm_func_callback_t); +wasm_func_t* +wasmi2_func_new_with_env( + wasm_store_t*, + const wasm_functype_t* type, + wasm_func_callback_with_env_t, + void* env, + void (*finalizer)(void*)); +void +wasmi2_func_delete(wasm_func_t* f); + +wasm_functype_t* +wasmi2_func_type(const wasm_func_t*); + +void +wasmi2_trap_message(const wasm_trap_t*, wasm_message_t* out); +void +wasmi2_trap_delete(wasm_trap_t*); + +// FUEL +wasmi_context_t* +wasmi2_store_context(wasmi_store_t* store); + +wasmi_error_t* +wasmi2_context_set_fuel(wasmi_context_t* store, uint64_t fuel); + +wasmi_error_t* +wasmi2_context_get_fuel(const wasmi_context_t* context, uint64_t* fuel); + +#if !defined(wasmi_so_EXPORTS) && defined(__cplusplus) +} +#endif diff --git a/external/wasmtime/CMakeLists.txt b/external/wasmtime/CMakeLists.txt new file mode 100644 index 00000000000..c4fbea54bd9 --- /dev/null +++ b/external/wasmtime/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 3.21) + +project(wasmtime_so + LANGUAGES C +) + +if(NOT TARGET wasmtime::wasmtime) + find_package(wasmtime REQUIRED) +endif() + +add_library(wasmtime_so SHARED + wasmtime_so.h + wasmtime_so.c +) + +add_library(wasmtime_so::wasmtime_so ALIAS wasmtime_so) + +target_link_libraries(wasmtime_so PRIVATE + -Wl,--no-undefined + -Wl,-Bsymbolic-functions + -Wl,--exclude-libs,ALL + wasmtime::wasmtime + m + z + dl +) + +target_include_directories(wasmtime_so PUBLIC + $ + $ + ${wasmtime_INCLUDE_DIR} +) + +install( + TARGETS wasmtime_so + EXPORT ${PROJECT_NAME}-exports + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) +install( + EXPORT ${PROJECT_NAME}-exports + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: +) +install( + FILES wasmtime_so.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + diff --git a/external/wasmtime/wasmtime_so.c b/external/wasmtime/wasmtime_so.c new file mode 100644 index 00000000000..d1fc4dbb175 --- /dev/null +++ b/external/wasmtime/wasmtime_so.c @@ -0,0 +1,450 @@ +#include "wasmtime_so.h" + +wasm_config_t* +wasmtime2_config_new(void) +{ + return wasm_config_new(); +} + +void +wasmtime2_config_delete(wasm_config_t* c) +{ + return wasm_config_delete(c); +} + +void +wasmtime3_config_consume_fuel_set(wasm_config_t* c, bool v) +{ + return wasmtime_config_consume_fuel_set(c, v); +} + +wasm_engine_t* +wasmtime2_engine_new(void) +{ + return wasm_engine_new(); +} + +wasm_engine_t* +wasmtime2_engine_new_with_config(wasm_config_t* c) +{ + return wasm_engine_new_with_config(c); +} + +void +wasmtime2_engine_delete(wasm_engine_t* o) +{ + return wasm_engine_delete(o); +} + +wasm_store_t* +wasmtime2_store_new(wasm_engine_t* e) +{ + return wasm_store_new(e); +} + +void +wasmtime2_store_delete(wasm_store_t* o) +{ + return wasm_store_delete(o); +} + +wasmtime_store_t* +wasmtime3_store_new(wasm_engine_t* e, void* d, void (*fin)(void*)) +{ + return wasmtime_store_new(e, d, fin); +} + +void +wasmtime3_store_delete(wasmtime_store_t* s) +{ + return wasmtime_store_delete(s); +} + +wasmtime_context_t* +wasmtime3_store_context(wasmtime_store_t* s) +{ + return wasmtime_store_context(s); +} + +wasm_module_t* +wasmtime2_module_new(wasm_store_t* s, wasm_byte_vec_t const* c) +{ + return wasm_module_new(s, c); +} + +wasmtime_error_t* +wasmtime3_module_new( + wasm_engine_t* e, + const uint8_t* wasm, + size_t sz, + wasmtime_module_t** m) +{ + return wasmtime_module_new(e, wasm, sz, m); +} + +void +wasmtime2_module_delete(wasm_module_t* o) +{ + return wasm_module_delete(o); +} + +void +wasmtime3_module_delete(wasmtime_module_t* m) +{ + return wasmtime_module_delete(m); +} + +void +wasmtime2_module_imports(const wasm_module_t* m, wasm_importtype_vec_t* out) +{ + return wasm_module_imports(m, out); +} +void +wasmtime2_module_exports(const wasm_module_t* m, wasm_exporttype_vec_t* out) +{ + return wasm_module_exports(m, out); +} + +void +wasmtime3_module_imports( + const wasmtime_module_t* m, + wasm_importtype_vec_t* out) +{ + return wasmtime_module_imports(m, out); +} + +wasm_instance_t* +wasmtime2_instance_new( + wasm_store_t* s, + wasm_module_t const* m, + wasm_extern_vec_t const* imports, + wasm_trap_t** t) +{ + return wasm_instance_new(s, m, imports, t); +} + +wasmtime_error_t* +wasmtime3_instance_new( + wasmtime_context_t* ct, + const wasmtime_module_t* m, + const wasmtime_extern_t* imp, + size_t sz, + wasmtime_instance_t* i, + wasm_trap_t** trap) +{ + return wasmtime_instance_new(ct, m, imp, sz, i, trap); +} + +void +wasmtime2_instance_delete(wasm_instance_t* o) +{ + return wasm_instance_delete(o); +} + +void +wasmtime2_instance_exports(const wasm_instance_t* i, wasm_extern_vec_t* out) +{ + return wasm_instance_exports(i, out); +} + +bool +wasmtime3_instance_export_get( + wasmtime_context_t* ct, + const wasmtime_instance_t* i, + const char* n, + size_t sz, + wasmtime_extern_t* item) +{ + return wasmtime_instance_export_get(ct, i, n, sz, item); +} + +bool +wasmtime3_instance_export_nth( + wasmtime_context_t* ct, + const wasmtime_instance_t* i, + size_t idx, + char** name, + size_t* sz, + wasmtime_extern_t* item) +{ + return wasmtime_instance_export_nth(ct, i, idx, name, sz, item); +} + +byte_t* +wasmtime2_memory_data(wasm_memory_t* m) +{ + return wasm_memory_data(m); +} + +size_t +wasmtime2_memory_data_size(const wasm_memory_t* m) +{ + return wasm_memory_data_size(m); +} + +uint8_t* +wasmtime3_memory_data(const wasmtime_context_t* ct, const wasmtime_memory_t* m) +{ + return wasmtime_memory_data(ct, m); +} + +// the byte length +size_t +wasmtime3_memory_data_size( + const wasmtime_context_t* ct, + const wasmtime_memory_t* m) +{ + return wasmtime_memory_data_size(ct, m); +} + +// WebAssembly pages +uint64_t +wasmtime3_memory_size(const wasmtime_context_t* ct, const wasmtime_memory_t* m) +{ + return wasmtime_memory_size(ct, m); +} + +void +wasmtime2_exporttype_vec_delete(wasm_exporttype_vec_t* o) +{ + return wasm_exporttype_vec_delete(o); +} +void +wasmtime2_extern_vec_delete(wasm_extern_vec_t* o) +{ + return wasm_extern_vec_delete(o); +} + +const wasm_name_t* +wasmtime2_importtype_name(const wasm_importtype_t* o) +{ + return wasm_importtype_name(o); +} +const wasm_externtype_t* +wasmtime2_importtype_type(const wasm_importtype_t* o) +{ + return wasm_importtype_type(o); +} + +const wasm_name_t* +wasmtime2_exporttype_name(const wasm_exporttype_t* o) +{ + return wasm_exporttype_name(o); +} +const wasm_externtype_t* +wasmtime2_exporttype_type(const wasm_exporttype_t* o) +{ + return wasm_exporttype_type(o); +} + +wasm_externkind_t +wasmtime2_externtype_kind(const wasm_externtype_t* t) +{ + return wasm_externtype_kind(t); +} + +wasm_externkind_t +wasmtime2_extern_kind(const wasm_extern_t* t) +{ + return wasm_extern_kind(t); +} + +wasm_externtype_t* +wasmtime2_extern_type(const wasm_extern_t* t) +{ + return wasm_extern_type(t); +} + +wasm_func_t* +wasmtime2_extern_as_func(wasm_extern_t* t) +{ + return wasm_extern_as_func(t); +} +wasm_global_t* +wasmtime2_extern_as_global(wasm_extern_t* t) +{ + return wasm_extern_as_global(t); +} +wasm_table_t* +wasmtime2_extern_as_table(wasm_extern_t* t) +{ + return wasm_extern_as_table(t); +} +wasm_memory_t* +wasmtime2_extern_as_memory(wasm_extern_t* t) +{ + return wasm_extern_as_memory(t); +} + +wasm_extern_t* +wasmtime2_func_as_extern(wasm_func_t* t) +{ + return wasm_func_as_extern(t); +} +wasm_extern_t* +wasmtime2_global_as_extern(wasm_global_t* t) +{ + return wasm_global_as_extern(t); +} +wasm_extern_t* +wasmtime2_table_as_extern(wasm_table_t* t) +{ + return wasm_table_as_extern(t); +} +wasm_extern_t* +wasmtime2_memory_as_extern(wasm_memory_t* t) +{ + return wasm_memory_as_extern(t); +} + +void +wasmtime2_val_vec_new_empty(wasm_val_vec_t* out) +{ + return wasm_val_vec_new_empty(out); +} +void +wasmtime2_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t n) +{ + return wasm_val_vec_new_uninitialized(out, n); +} +void +wasmtime2_val_vec_new( + wasm_val_vec_t* out, + size_t n, + wasm_val_t const* ptr_or_none) +{ + return wasm_val_vec_new(out, n, ptr_or_none); +} +void +wasmtime2_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t* v) +{ + return wasm_val_vec_copy(out, v); +} +void +wasmtime2_val_vec_delete(wasm_val_vec_t* v) +{ + return wasm_val_vec_delete(v); +} + +void +wasmtime2_byte_vec_delete(wasm_byte_vec_t* o) +{ + return wasm_byte_vec_delete(o); +} + +wasm_valtype_t* +wasmtime2_valtype_new(wasm_valkind_t vk) +{ + return wasm_valtype_new(vk); +} +void +wasmtime2_valtype_delete(wasm_valtype_t* t) +{ + return wasm_valtype_delete(t); +} + +wasm_functype_t* +wasmtime2_functype_new_0_1(wasm_valtype_t* r) +{ + return wasm_functype_new_0_1(r); +} + +wasm_functype_t* +wasmtime2_functype_new_1_0(wasm_valtype_t* r) +{ + return wasm_functype_new_1_0(r); +} + +void +wasmtime2_functype_delete(wasm_functype_t* r) +{ + return wasm_functype_delete(r); +} + +wasm_trap_t* +wasmtime2_func_call( + const wasm_func_t* f, + const wasm_val_vec_t* args, + wasm_val_vec_t* results) +{ + return wasm_func_call(f, args, results); +} + +wasm_func_t* +wasmtime2_func_new( + wasm_store_t* s, + const wasm_functype_t* ft, + wasm_func_callback_t cb) +{ + return wasm_func_new(s, ft, cb); +} +void +wasmtime2_func_delete(wasm_func_t* f) +{ + return wasm_func_delete(f); +} + +wasm_func_t* +wasmtime2_func_new_with_env( + wasm_store_t* s, + const wasm_functype_t* type, + wasm_func_callback_with_env_t cb, + void* env, + void (*finalizer)(void*)) +{ + return wasm_func_new_with_env(s, type, cb, env, finalizer); +} + +void +wasmtime3_func_new( + wasmtime_context_t* ct, + const wasm_functype_t* tp, + wasmtime_func_callback_t cb, + void* env, + void (*fin)(void*), + wasmtime_func_t* ret) +{ + return wasmtime_func_new(ct, tp, cb, env, fin, ret); +} + +wasmtime_error_t* +wasmtime3_func_call( + wasmtime_context_t* ct, + const wasmtime_func_t* f, + const wasmtime_val_t* a, + size_t na, + wasmtime_val_t* r, + size_t nr, + wasm_trap_t** trap) +{ + return wasmtime_func_call(ct, f, a, na, r, nr, trap); +} + +wasm_functype_t* +wasmtime2_func_type(const wasm_func_t* f) +{ + return wasm_func_type(f); +} + +void +wasmtime2_trap_message(const wasm_trap_t* t, wasm_message_t* out) +{ + return wasm_trap_message(t, out); +} + +void +wasmtime2_trap_delete(wasm_trap_t* t) +{ + return wasm_trap_delete(t); +} + +wasmtime_error_t* +wasmtime3_context_set_fuel(wasmtime_context_t* ct, uint64_t f) +{ + return wasmtime_context_set_fuel(ct, f); +} +wasmtime_error_t* +wasmtime3_context_get_fuel(const wasmtime_context_t* ct, uint64_t* f) +{ + return wasmtime_context_get_fuel(ct, f); +} diff --git a/external/wasmtime/wasmtime_so.h b/external/wasmtime/wasmtime_so.h new file mode 100644 index 00000000000..3198f4f08e3 --- /dev/null +++ b/external/wasmtime/wasmtime_so.h @@ -0,0 +1,274 @@ +#pragma once + +#include + +#if !defined(wasmtime2_so_EXPORTS) && defined(__cplusplus) +extern "C" { +#endif + +wasm_config_t* +wasmtime2_config_new(void); +void +wasmtime2_config_delete(wasm_config_t* config); +void +wasmtime3_config_consume_fuel_set(wasm_config_t* c, bool v); + +wasm_engine_t* +wasmtime2_engine_new(void); +wasm_engine_t* +wasmtime2_engine_new_with_config(wasm_config_t*); + +void +wasmtime2_engine_delete(wasm_engine_t* o); + +wasm_store_t* +wasmtime2_store_new(wasm_engine_t*); +void +wasmtime2_store_delete(wasm_store_t* o); + +wasmtime_store_t* +wasmtime3_store_new(wasm_engine_t* e, void* d, void (*fin)(void*)); +void +wasmtime3_store_delete(wasmtime_store_t* store); +wasmtime_context_t* +wasmtime3_store_context(wasmtime_store_t* store); + +wasm_module_t* +wasmtime2_module_new(wasm_store_t*, wasm_byte_vec_t const*); +wasmtime_error_t* +wasmtime3_module_new( + wasm_engine_t* e, + const uint8_t* wasm, + size_t sz, + wasmtime_module_t** m); +void +wasmtime2_module_delete(wasm_module_t* o); +void +wasmtime3_module_delete(wasmtime_module_t* m); + +void +wasmtime2_module_imports(const wasm_module_t*, wasm_importtype_vec_t* out); +void +wasmtime2_module_exports(const wasm_module_t*, wasm_exporttype_vec_t* out); + +void +wasmtime3_module_imports( + const wasmtime_module_t* m, + wasm_importtype_vec_t* out); + +wasm_instance_t* +wasmtime2_instance_new( + wasm_store_t*, + wasm_module_t const*, + wasm_extern_vec_t const*, + wasm_trap_t**); + +wasmtime_error_t* +wasmtime3_instance_new( + wasmtime_context_t* ct, + const wasmtime_module_t* m, + const wasmtime_extern_t* imp, + size_t sz, + wasmtime_instance_t* i, + wasm_trap_t** trap); + +void +wasmtime2_instance_delete(wasm_instance_t* o); + +void +wasmtime2_instance_exports(const wasm_instance_t*, wasm_extern_vec_t* out); + +bool +wasmtime3_instance_export_get( + wasmtime_context_t* store, + const wasmtime_instance_t* instance, + const char* name, + size_t name_len, + wasmtime_extern_t* item); + +bool +wasmtime3_instance_export_nth( + wasmtime_context_t* store, + const wasmtime_instance_t* instance, + size_t index, + char** name, + size_t* name_len, + wasmtime_extern_t* item); + +byte_t* +wasmtime2_memory_data(wasm_memory_t*); +size_t +wasmtime2_memory_data_size(const wasm_memory_t*); + +uint8_t* +wasmtime3_memory_data(const wasmtime_context_t* ct, const wasmtime_memory_t* m); +size_t +wasmtime3_memory_data_size( + const wasmtime_context_t* store, + const wasmtime_memory_t* memory); +uint64_t +wasmtime3_memory_size( + const wasmtime_context_t* store, + const wasmtime_memory_t* memory); + +void +wasmtime2_exporttype_vec_delete(wasm_exporttype_vec_t*); +void +wasmtime2_extern_vec_delete(wasm_extern_vec_t*); + +const wasm_name_t* +wasmtime2_importtype_name(const wasm_importtype_t*); +const wasm_externtype_t* +wasmtime2_importtype_type(const wasm_importtype_t*); + +const wasm_name_t* +wasmtime2_exporttype_name(const wasm_exporttype_t*); +const wasm_externtype_t* +wasmtime2_exporttype_type(const wasm_exporttype_t*); + +wasm_externkind_t +wasmtime2_externtype_kind(const wasm_externtype_t*); +wasm_externkind_t +wasmtime2_extern_kind(const wasm_extern_t*); +wasm_externtype_t* +wasmtime2_extern_type(const wasm_extern_t*); + +wasm_func_t* +wasmtime2_extern_as_func(wasm_extern_t*); +wasm_global_t* +wasmtime2_extern_as_global(wasm_extern_t*); +wasm_table_t* +wasmtime2_extern_as_table(wasm_extern_t*); +wasm_memory_t* +wasmtime2_extern_as_memory(wasm_extern_t*); + +wasm_extern_t* +wasmtime2_func_as_extern(wasm_func_t*); +wasm_extern_t* +wasmtime2_global_as_extern(wasm_global_t*); +wasm_extern_t* +wasmtime2_table_as_extern(wasm_table_t*); +wasm_extern_t* +wasmtime2_memory_as_extern(wasm_memory_t*); + +void +wasmtime2_val_vec_new_empty(wasm_val_vec_t* out); +void +wasmtime2_val_vec_new_uninitialized(wasm_val_vec_t* out, size_t); +void +wasmtime2_val_vec_new( + wasm_val_vec_t* out, + size_t, + wasm_val_t const* ptr_or_none); +void +wasmtime2_val_vec_copy(wasm_val_vec_t* out, const wasm_val_vec_t*); +void +wasmtime2_val_vec_delete(wasm_val_vec_t*); + +void +wasmtime2_byte_vec_delete(wasm_byte_vec_t*); + +wasm_valtype_t* wasmtime2_valtype_new(wasm_valkind_t); +void +wasmtime2_valtype_delete(wasm_valtype_t*); + +inline wasm_valtype_t* +wasmtime2_valtype_new_i32() +{ + return wasmtime2_valtype_new(WASM_I32); +} +inline wasm_valtype_t* +wasmtime2_valtype_new_i64() +{ + return wasmtime2_valtype_new(WASM_I64); +} +inline wasm_valtype_t* +wasmtime2_valtype_new_f32() +{ + return wasmtime2_valtype_new(WASM_F32); +} +inline wasm_valtype_t* +wasmtime2_valtype_new_f64() +{ + return wasmtime2_valtype_new(WASM_F64); +} +inline wasm_valtype_t* +wasmtime2_valtype_new_externref() +{ + return wasmtime2_valtype_new(WASM_EXTERNREF); +} +inline wasm_valtype_t* +wasmtime2_valtype_new_funcref() +{ + return wasmtime2_valtype_new(WASM_FUNCREF); +} + +wasm_functype_t* +wasmtime2_functype_new_0_1(wasm_valtype_t* r); +wasm_functype_t* +wasmtime2_functype_new_1_0(wasm_valtype_t* r); + +void +wasmtime2_functype_delete(wasm_functype_t*); + +wasm_trap_t* +wasmtime2_func_call( + const wasm_func_t*, + const wasm_val_vec_t* args, + wasm_val_vec_t* results); +wasm_func_t* +wasmtime2_func_new(wasm_store_t*, const wasm_functype_t*, wasm_func_callback_t); +wasm_func_t* +wasmtime2_func_new_with_env( + wasm_store_t*, + const wasm_functype_t* type, + wasm_func_callback_with_env_t, + void* env, + void (*finalizer)(void*)); +void +wasmtime2_func_delete(wasm_func_t* f); + +void +wasmtime3_func_new( + wasmtime_context_t* store, + const wasm_functype_t* type, + wasmtime_func_callback_t callback, + void* env, + void (*finalizer)(void*), + wasmtime_func_t* ret); + +wasmtime_error_t* +wasmtime3_func_call( + wasmtime_context_t* store, + const wasmtime_func_t* func, + const wasmtime_val_t* args, + size_t nargs, + wasmtime_val_t* results, + size_t nresults, + wasm_trap_t** trap); + +wasm_functype_t* +wasmtime2_func_type(const wasm_func_t*); + +void +wasmtime2_trap_message(const wasm_trap_t*, wasm_message_t* out); +void +wasmtime2_trap_delete(wasm_trap_t*); + +wasmtime_store_t* +wasmtime3_store_new(wasm_engine_t* engine, void* data, void (*final)(void*)); +wasmtime_context_t* +wasmtime3_store_context(wasmtime_store_t* store); +wasmtime_linker_t* +wasmtime3_linker_new(wasm_engine_t* engine); +wasmtime_error_t* +wasmtime3_linker_define_wasi(wasmtime_linker_t* linker); + +wasmtime_error_t* +wasmtime3_context_set_fuel(wasmtime_context_t* store, uint64_t fuel); +wasmtime_error_t* +wasmtime3_context_get_fuel(const wasmtime_context_t* context, uint64_t* fuel); + +#if !defined(wasmtime2_so_EXPORTS) && defined(__cplusplus) +} +#endif diff --git a/include/xrpl/protocol/Feature.h b/include/xrpl/protocol/Feature.h index 1c476df617f..b6477baa02d 100644 --- a/include/xrpl/protocol/Feature.h +++ b/include/xrpl/protocol/Feature.h @@ -80,7 +80,7 @@ namespace detail { // Feature.cpp. Because it's only used to reserve storage, and determine how // large to make the FeatureBitset, it MAY be larger. It MUST NOT be less than // the actual number of amendments. A LogicError on startup will verify this. -static constexpr std::size_t numFeatures = 88; +static constexpr std::size_t numFeatures = 89; /** Amendments that this server supports and the default voting behavior. Whether they are enabled depends on the Rules defined in the validated diff --git a/include/xrpl/protocol/Indexes.h b/include/xrpl/protocol/Indexes.h index bbed5395927..a7c184e81c7 100644 --- a/include/xrpl/protocol/Indexes.h +++ b/include/xrpl/protocol/Indexes.h @@ -230,6 +230,12 @@ page(Keylet const& root, std::uint64_t index = 0) noexcept Keylet escrow(AccountID const& src, std::uint32_t seq) noexcept; +inline Keylet +escrow(uint256 const& key) noexcept +{ + return {ltESCROW, key}; +} + /** A PaymentChannel */ Keylet payChan(AccountID const& src, AccountID const& dst, std::uint32_t seq) noexcept; diff --git a/include/xrpl/protocol/TER.h b/include/xrpl/protocol/TER.h index 317e9c2c978..01bf4669aa7 100644 --- a/include/xrpl/protocol/TER.h +++ b/include/xrpl/protocol/TER.h @@ -344,6 +344,7 @@ enum TECcodes : TERUnderlyingType { tecARRAY_TOO_LARGE = 191, tecLOCKED = 192, tecBAD_CREDENTIALS = 193, + tecWASM_REJECTED = 194, }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/protocol/detail/features.macro b/include/xrpl/protocol/detail/features.macro index aa0782b1378..c71883931d8 100644 --- a/include/xrpl/protocol/detail/features.macro +++ b/include/xrpl/protocol/detail/features.macro @@ -29,6 +29,7 @@ // If you add an amendment here, then do not forget to increment `numFeatures` // in include/xrpl/protocol/Feature.h. +XRPL_FEATURE(EscrowExtensions, Supported::yes, VoteBehavior::DefaultNo) // Check flags in Credential transactions XRPL_FIX (InvalidTxFlags, Supported::yes, VoteBehavior::DefaultNo) XRPL_FIX (FrozenLPTokenTransfer, Supported::yes, VoteBehavior::DefaultNo) diff --git a/include/xrpl/protocol/detail/ledger_entries.macro b/include/xrpl/protocol/detail/ledger_entries.macro index 5a652baf4f7..1f290ec163a 100644 --- a/include/xrpl/protocol/detail/ledger_entries.macro +++ b/include/xrpl/protocol/detail/ledger_entries.macro @@ -344,6 +344,8 @@ LEDGER_ENTRY(ltESCROW, 0x0075, Escrow, escrow, ({ {sfCondition, soeOPTIONAL}, {sfCancelAfter, soeOPTIONAL}, {sfFinishAfter, soeOPTIONAL}, + {sfFinishFunction, soeOPTIONAL}, + {sfData, soeOPTIONAL}, {sfSourceTag, soeOPTIONAL}, {sfDestinationTag, soeOPTIONAL}, {sfOwnerNode, soeREQUIRED}, diff --git a/include/xrpl/protocol/detail/sfields.macro b/include/xrpl/protocol/detail/sfields.macro index 3217bab9134..b45a1665de2 100644 --- a/include/xrpl/protocol/detail/sfields.macro +++ b/include/xrpl/protocol/detail/sfields.macro @@ -265,6 +265,7 @@ TYPED_SFIELD(sfAssetClass, VL, 28) TYPED_SFIELD(sfProvider, VL, 29) TYPED_SFIELD(sfMPTokenMetadata, VL, 30) TYPED_SFIELD(sfCredentialType, VL, 31) +TYPED_SFIELD(sfFinishFunction, VL, 32) // account (common) TYPED_SFIELD(sfAccount, ACCOUNT, 1) diff --git a/include/xrpl/protocol/detail/transactions.macro b/include/xrpl/protocol/detail/transactions.macro index dd3ac42325d..cb0df929f2f 100644 --- a/include/xrpl/protocol/detail/transactions.macro +++ b/include/xrpl/protocol/detail/transactions.macro @@ -47,7 +47,9 @@ TRANSACTION(ttESCROW_CREATE, 1, EscrowCreate, ({ {sfCondition, soeOPTIONAL}, {sfCancelAfter, soeOPTIONAL}, {sfFinishAfter, soeOPTIONAL}, + {sfFinishFunction, soeOPTIONAL}, {sfDestinationTag, soeOPTIONAL}, + {sfData, soeOPTIONAL}, })) /** This transaction type completes an existing escrow. */ diff --git a/src/libxrpl/protocol/TER.cpp b/src/libxrpl/protocol/TER.cpp index 815b27c0018..dc0bdb4a591 100644 --- a/src/libxrpl/protocol/TER.cpp +++ b/src/libxrpl/protocol/TER.cpp @@ -117,6 +117,7 @@ transResults() MAKE_ERROR(tecARRAY_TOO_LARGE, "Array is too large."), MAKE_ERROR(tecLOCKED, "Fund is locked."), MAKE_ERROR(tecBAD_CREDENTIALS, "Bad credentials."), + MAKE_ERROR(tecWASM_REJECTED, "The custom WASM code that was run rejected your transaction."), 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/test/app/Escrow_test.cpp b/src/test/app/Escrow_test.cpp index 714fc7734d9..d7b89120cdf 100644 --- a/src/test/app/Escrow_test.cpp +++ b/src/test/app/Escrow_test.cpp @@ -25,6 +25,8 @@ #include #include +#include + #include #include @@ -1519,7 +1521,7 @@ struct Escrow_test : public beast::unit_test::suite Account const alice{"alice"}; Account const bob{"bob"}; Account const carol{"carol"}; - Account const dillon{"dillon "}; + Account const dillon{"dillon"}; Account const zelda{"zelda"}; const char credType[] = "abcde"; @@ -1656,21 +1658,87 @@ struct Escrow_test : public beast::unit_test::suite } } + void + testFinishFunction(wasmEngines engine) + { + testcase( + "PoC escrow function, engine: " + + std::to_string(static_cast(engine))); + + using namespace jtx; + using namespace std::chrono; + + Account const alice{"alice"}; + Account const carol{"carol"}; + + setWasmEngine(engine); + + // P4 + static auto wasmHex = + "0061736d010000000105016000017f021b0108686f73745f6c69620e6765745f6c" + "65646765725f73716e0000030201000405017001010105030100100619037f0141" + "8080c0000b7f00418080c0000b7f00418080c0000b072d04066d656d6f72790200" + "05726561647900010a5f5f646174615f656e6403010b5f5f686561705f62617365" + "03020a0d010b0010808080800041044a0b006e046e616d65000e0d7761736d5f6c" + "69622e7761736d01430200395f5a4e387761736d5f6c696238686f73745f6c6962" + "31346765745f6c65646765725f73716e3137686663383539386237646539633036" + "64624501057265616479071201000f5f5f737461636b5f706f696e746572005509" + "70726f64756365727302086c616e6775616765010452757374000c70726f636573" + "7365642d62790105727573746325312e38332e302d6e696768746c792028633266" + "37346333663920323032342d30392d30392900490f7461726765745f6665617475" + "726573042b0a6d756c746976616c75652b0f6d757461626c652d676c6f62616c73" + "2b0f7265666572656e63652d74797065732b087369676e2d657874"; + + { + // create escrow + Env env(*this); + env.fund(XRP(5000), alice, carol); + auto const seq = env.seq(alice); + BEAST_EXPECT((*env.le(alice))[sfOwnerCount] == 0); + auto escrowCreate = escrow(alice, carol, XRP(1000)); + std::uint32_t const finishTime = + (env.now() + 1s).time_since_epoch().count(); + escrowCreate[sfFinishAfter.jsonName] = finishTime; + escrowCreate[sfFinishFunction.jsonName] = wasmHex; + env(escrowCreate); + env.close(); + + BEAST_EXPECT((*env.le(alice))[sfOwnerCount] == 1); + env.require(balance(alice, XRP(4000) - drops(10))); + env.require(balance(carol, XRP(5000))); + + std::cout << "SEQ " << env.current()->seq() << std::endl; + env(finish(carol, alice, seq), ter(tecWASM_REJECTED)); + env(finish(alice, alice, seq), ter(tecWASM_REJECTED)); + env(finish(alice, alice, seq), ter(tecWASM_REJECTED)); + env(finish(carol, alice, seq), ter(tecWASM_REJECTED)); + env(finish(carol, alice, seq), ter(tecWASM_REJECTED)); + env.close(); + std::cout << "SEQ " << env.current()->seq() << std::endl; + env(finish(alice, alice, seq), ter(tesSUCCESS)); + env.close(); + } + } + void run() override { - testEnablement(); - testTiming(); - testTags(); - testDisallowXRP(); - test1571(); - testFails(); - testLockup(); - testEscrowConditions(); - testMetaAndOwnership(); - testConsequences(); - testEscrowWithTickets(); - testCredentials(); + // testEnablement(); + // testTiming(); + // testTags(); + // testDisallowXRP(); + // test1571(); + // testFails(); + // testLockup(); + // testEscrowConditions(); + // testMetaAndOwnership(); + // testConsequences(); + // testEscrowWithTickets(); + // testCredentials(); + for (int i = 0; i < static_cast(wasmEngines::END); ++i) + { + testFinishFunction(static_cast(i)); + } } }; diff --git a/src/test/app/WasmData.cpp b/src/test/app/WasmData.cpp new file mode 100644 index 00000000000..19cadb93b8d --- /dev/null +++ b/src/test/app/WasmData.cpp @@ -0,0 +1,14835 @@ +#include + +namespace ripple { +namespace test { + +// clang-format off + +extern std::string const tx_js = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Fee" : "10", + "Flags" : 2147483648, + "OfferSequence" : 2, + "Owner" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Sequence" : 3, + "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType" : "EscrowFinish", + "TxnSignature" : "30450221008AD5EE48F7F1047813E79C174FE401D023A4B4A7B99AF826E081DB1DFF7B9C510220133F05B7FD3D7D7F163E8C77EE0A49D02619AB6C77CC3487D0095C9B34033C1C", + "hash" : "74465121372813CBA4C77E31F12E137163F5B2509B16AC1703ECF0DA194B2DD4" + })"; +extern std::string const lo_js = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Amount" : "100000", + "CancelAfter" : 790297421, + "Destination" : "rBYn44yhs8cf8G2t79XMUHYQpp2ayhqwcw", + "DestinationNode" : "0", + "FinishAfter" : 790297403, + "FinishFunction" : "0061736D0100000001180460027F7F0060017F017F60027F7F017F60047F7F7F7F00030C0B01010200000000000003000405017001030305030100110619037F01418080C0000B7F0041DD85C0000B7F0041E085C0000B074205066D656D6F7279020008616C6C6F6361746500000F636865636B5F6163636F756E74494400020A5F5F646174615F656E6403010B5F5F686561705F6261736503020908010041010B02060A0AF5360B610002", + "Flags" : 0, + "LedgerEntryType" : "Escrow", + "OwnerNode" : "0", + "PreviousTxnID" : "CF25D1C6B8E637C7DAC61B586F820A16896A3090D9F6FBF9FA00D8B13A265647", + "PreviousTxnLgrSeq" : 4, + "index" : "9BC6631F3EC761CF9BD846D006560E2D57B0A5C91D4570AEB209645B189A702F", + "Data" : "02" + })"; + +extern std::string const fib32Hex = + "0061736d0100000001090260000060017f017f0303020001071b02115f5f" + "7761736d5f63616c6c5f63746f727300000366696200010a440202000b3f" + "01017f200045044041000f0b2000410348044041010f0b200041026a2100" + "0340200041036b100120016a2101200041026b220041044a0d000b200141" + "016a0b"; + +extern std::string const fib64Hex = + "0061736d0100000001090260000060017e017e0303020001071b02115f5f" + "7761736d5f63616c6c5f63746f727300000366696200010a440202000b3f" + "01017e200050044042000f0b2000420353044042010f0b200042027c2100" + "0340200042037d100120017c2101200042027d22004204550d000b200142" + "017c0b00490f7461726765745f6665617475726573042b0f6d757461626c" + "652d676c6f62616c732b087369676e2d6578742b0f7265666572656e6365" + "2d74797065732b0a6d756c746976616c7565"; + +extern std::string const p0Hex = + "0061736d0100000001090260017f017f6000000305040001010004050170010101" + "05030100100609017f01418080c0000b071802066d656d6f727902000b6d6f636b" + "5f657363726f7700030a25040800200041056f450b02000b0e0010818080800010" + "81808080000b08002000100010020b0072046e616d650011106d6f636b5f657363" + "726f772e7761736d014404000b6d6f636b5f657363726f77010564756d6d790211" + "5f5f7761736d5f63616c6c5f64746f7273031a6d6f636b5f657363726f772e636f" + "6d6d616e645f6578706f7274071201000f5f5f737461636b5f706f696e74657200" + "c0010970726f64756365727302086c616e67756167650204527573740003433131" + "000c70726f6365737365642d62790205727573746325312e38332e302d6e696768" + "746c79202863326637346333663920323032342d30392d30392905636c616e675f" + "31382e312e322d776173692d73646b202868747470733a2f2f6769746875622e63" + "6f6d2f6c6c766d2f6c6c766d2d70726f6a65637420323661316436363031643732" + "376139366634333031643064383634376235613432373630616530632900560f74" + "61726765745f6665617475726573052b0b62756c6b2d6d656d6f72792b0a6d756c" + "746976616c75652b0f6d757461626c652d676c6f62616c732b0f7265666572656e" + "63652d74797065732b087369676e2d657874"; + +extern std::string const b58Hex = + "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 sha512PureHex = + "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 p1Hex = + "0061736d0100000001180460027f7f0060017f017f60027f7f017f60047f7f7f7f" + "00030c0b01010200000000000003000405017001030305030100110619037f0141" + "8080c0000b7f0041dd85c0000b7f0041e085c0000b074205066d656d6f72790200" + "08616c6c6f6361746500000f636865636b5f6163636f756e74494400020a5f5f64" + "6174615f656e6403010b5f5f686561705f6261736503020908010041010b02060a" + "0af5360b61000240200041004e0440200045044041010f0b418882c0002d00001a" + "200010012200450d0120000f0b230041206b220024002000410036021820004101" + "36020c200041b480c00036020820004204370210200041086a41d080c000100500" + "0b000bee2202087f017e02400240024002400240024002400240200041f4014d04" + "4041ac85c000280200220241102000410b6a41f803712000410b491b2205410376" + "22007622014103710d01200541b485c0002802004d0d0720010d0241b085c00028" + "020022000d030c070b2000410b6a2201417871210541b085c0002802002208450d" + "06411f2107410020056b2103200041f4ffff074d04402005410620014108766722" + "006b7641017120004101746b413e6a21070b2007410274419482c0006a28020022" + "0245044041002100410021010c040b4100210020054100411920074101766b2007" + "411f461b7421044100210103400240200228020441787122062005490d00200620" + "056b220620034f0d0020022101200622030d0041002103200221000c060b200228" + "021422062000200620022004411d764104716a41106a2802002202471b20002006" + "1b21002004410174210420020d000b0c030b02402001417f7341017120006a2206" + "410374220041a483c0006a2203200041ac83c0006a280200220128020822044704" + "402004200336020c200320043602080c010b41ac85c0002002417e200677713602" + "000b20012000410372360204200020016a220020002802044101723602040c060b" + "024041022000742203410020036b72200120007471682206410374220041a483c0" + "006a2203200041ac83c0006a280200220128020822044704402004200336020c20" + "0320043602080c010b41ac85c0002002417e200677713602000b20012005410372" + "360204200120056a2206200020056b2204410172360204200020016a2004360200" + "41b485c00028020022020440200241787141a483c0006a210041bc85c000280200" + "2103027f41ac85c0002802002205410120024103767422027145044041ac85c000" + "200220057236020020000c010b20002802080b2102200020033602082002200336" + "020c2003200036020c200320023602080b41bc85c000200636020041b485c00020" + "043602000c050b200068410274419482c0006a280200220128020441787120056b" + "2103200121020240034002400240200128021022000d00200128021422000d0020" + "022802182107024002402002200228020c22004604402002411441102002280214" + "22001b6a28020022010d01410021000c020b20022802082201200036020c200020" + "013602080c010b200241146a200241106a20001b21040340200421062001220041" + "146a200041106a200028021422011b210420004114411020011b6a28020022010d" + "000b200641003602000b2007450d032002200228021c410274419482c0006a2201" + "28020047044020074110411420072802102002461b6a20003602002000450d040c" + "020b2001200036020020000d0141b085c00041b085c000280200417e200228021c" + "77713602000c030b200028020441787120056b22012003200120034922011b2103" + "2000200220011b2102200021010c010b0b20002007360218200228021022010440" + "20002001360210200120003602180b20022802142201450d002000200136021420" + "0120003602180b02400240200341104f044020022005410372360204200220056a" + "22062003410172360204200320066a200336020041b485c0002802002204450d01" + "200441787141a483c0006a210041bc85c0002802002101027f41ac85c000280200" + "2205410120044103767422047145044041ac85c000200420057236020020000c01" + "0b20002802080b2104200020013602082004200136020c2001200036020c200120" + "043602080c010b2002200320056a2200410372360204200020026a220020002802" + "044101723602040c010b41bc85c000200636020041b485c00020033602000b2002" + "41086a0f0b20002001724504404100210141022007742200410020006b72200871" + "2200450d03200068410274419482c0006a28020021000b2000450d010b03402000" + "20012000280204417871220420056b220620034922071b21082000280210220245" + "0440200028021421020b20012008200420054922001b210120032006200320071b" + "20001b2103200222000d000b0b2001450d00200541b485c00028020022004d2003" + "200020056b4f710d0020012802182107024002402001200128020c220046044020" + "0141144110200128021422001b6a28020022020d01410021000c020b2001280208" + "2202200036020c200020023602080c010b200141146a200141106a20001b210403" + "40200421062002220041146a200041106a200028021422021b2104200041144110" + "20021b6a28020022020d000b200641003602000b02402007450d00024020012001" + "28021c410274419482c0006a220228020047044020074110411420072802102001" + "461b6a20003602002000450d020c010b2002200036020020000d0041b085c00041" + "b085c000280200417e200128021c77713602000c010b2000200736021820012802" + "102202044020002002360210200220003602180b20012802142202450d00200020" + "02360214200220003602180b0240200341104f0440200120054103723602042001" + "20056a22022003410172360204200220036a200336020020034180024f04402002" + "200310070c020b200341f8017141a483c0006a2100027f41ac85c0002802002204" + "410120034103767422037145044041ac85c000200320047236020020000c010b20" + "002802080b2103200020023602082003200236020c2002200036020c2002200336" + "02080c010b2001200320056a2200410372360204200020016a2200200028020441" + "01723602040b0c010b024002400240024002400240200541b485c0002802002201" + "4b0440200541b885c00028020022004f044041002100200541af80046a22014110" + "7640002202417f4622030d0720024110742202450d0741c485c000410020014180" + "807c7120031b220441c485c0002802006a220036020041c885c00041c885c00028" + "02002201200020002001491b3602000240024041c085c000280200220304404194" + "83c0002100034020002802002201200028020422066a2002460d02200028020822" + "000d000b0c020b41d085c00028020022004100200020024d1b45044041d085c000" + "20023602000b41d485c00041ff1f360200419883c0002004360200419483c00020" + "0236020041b083c00041a483c00036020041b883c00041ac83c00036020041ac83" + "c00041a483c00036020041c083c00041b483c00036020041b483c00041ac83c000" + "36020041c883c00041bc83c00036020041bc83c00041b483c00036020041d083c0" + "0041c483c00036020041c483c00041bc83c00036020041d883c00041cc83c00036" + "020041cc83c00041c483c00036020041e083c00041d483c00036020041d483c000" + "41cc83c00036020041e883c00041dc83c00036020041dc83c00041d483c0003602" + "0041a083c000410036020041f083c00041e483c00036020041e483c00041dc83c0" + "0036020041ec83c00041e483c00036020041f883c00041ec83c00036020041f483" + "c00041ec83c000360200418084c00041f483c00036020041fc83c00041f483c000" + "360200418884c00041fc83c000360200418484c00041fc83c000360200419084c0" + "00418484c000360200418c84c000418484c000360200419884c000418c84c00036" + "0200419484c000418c84c00036020041a084c000419484c000360200419c84c000" + "419484c00036020041a884c000419c84c00036020041a484c000419c84c0003602" + "0041b084c00041a484c00036020041b884c00041ac84c00036020041ac84c00041" + "a484c00036020041c084c00041b484c00036020041b484c00041ac84c000360200" + "41c884c00041bc84c00036020041bc84c00041b484c00036020041d084c00041c4" + "84c00036020041c484c00041bc84c00036020041d884c00041cc84c00036020041" + "cc84c00041c484c00036020041e084c00041d484c00036020041d484c00041cc84" + "c00036020041e884c00041dc84c00036020041dc84c00041d484c00036020041f0" + "84c00041e484c00036020041e484c00041dc84c00036020041f884c00041ec84c0" + "0036020041ec84c00041e484c000360200418085c00041f484c00036020041f484" + "c00041ec84c000360200418885c00041fc84c00036020041fc84c00041f484c000" + "360200419085c000418485c000360200418485c00041fc84c000360200419885c0" + "00418c85c000360200418c85c000418485c00036020041a085c000419485c00036" + "0200419485c000418c85c00036020041a885c000419c85c000360200419c85c000" + "419485c00036020041c085c000200236020041a485c000419c85c00036020041b8" + "85c000200441286b220036020020022000410172360204200020026a4128360204" + "41cc85c00041808080013602000c080b200220034d200120034b720d0020002802" + "0c450d030b41d085c00041d085c0002802002200200220002002491b3602002002" + "20046a2101419483c0002100024002400340200120002802002206470440200028" + "020822000d010c020b0b200028020c450d010b419483c000210003400240200320" + "0028020022014f04402003200120002802046a2206490d010b200028020821000c" + "010b0b41c085c000200236020041b885c000200441286b22003602002002200041" + "0172360204200020026a412836020441cc85c00041808080013602002003200641" + "206b41787141086b22002000200341106a491b2201411b360204419483c0002902" + "002109200141106a419c83c00029020037020020012009370208419883c0002004" + "360200419483c0002002360200419c83c000200141086a36020041a083c0004100" + "3602002001411c6a2100034020004107360200200041046a22002006490d000b20" + "012003460d0720012001280204417e713602042003200120036b22004101723602" + "042001200036020020004180024f04402003200010070c080b200041f8017141a4" + "83c0006a2101027f41ac85c0002802002202410120004103767422007145044041" + "ac85c000200020027236020020010c010b20012802080b21002001200336020820" + "00200336020c2003200136020c200320003602080c070b20002002360200200020" + "0028020420046a360204200220054103723602042006410f6a41787141086b2201" + "200220056a22046b2103200141c085c000280200460d03200141bc85c000280200" + "460d04200128020422054103714101460440200120054178712200100820002001" + "6a22012802042105200020036a21030b20012005417e7136020420042003410172" + "360204200320046a200336020020034180024f04402004200310070c060b200341" + "f8017141a483c0006a2100027f41ac85c000280200220141012003410376742203" + "7145044041ac85c000200120037236020020000c010b20002802080b2103200020" + "043602082003200436020c2004200036020c200420033602080c050b41b885c000" + "200020056b220136020041c085c00041c085c000280200220020056a2202360200" + "2002200141017236020420002005410372360204200041086a21000c060b41bc85" + "c00028020021000240200120056b2202410f4d044041bc85c000410036020041b4" + "85c000410036020020002001410372360204200020016a22012001280204410172" + "3602040c010b41b485c000200236020041bc85c000200020056a22033602002003" + "2002410172360204200020016a2002360200200020054103723602040b20004108" + "6a0f0b2000200420066a36020441c085c00041c085c0002802002200410f6a4178" + "71220141086b220236020041b885c00041b885c00028020020046a220320002001" + "6b6a41086a220136020020022001410172360204200020036a412836020441cc85" + "c00041808080013602000c030b41c085c000200436020041b885c00041b885c000" + "28020020036a2200360200200420004101723602040c010b41bc85c00020043602" + "0041b485c00041b485c00028020020036a22003602002004200041017236020420" + "0020046a20003602000b200241086a0f0b4100210041b885c00028020022012005" + "4d0d0041b885c000200120056b220136020041c085c00041c085c0002802002200" + "20056a22023602002002200141017236020420002005410372360204200041086a" + "0f0b20000f0b200141086a0ba203010b7f418882c0002d00001a41221001220704" + "402007410020076b41037122026a21062002044020072103418080c00021050340" + "200320052d00003a0000200541016a2105200341016a22032006490d000b0b2006" + "412220026b220b417c71220a6a210302402002418080406b22024103710440200a" + "41004c0d0120024103742208411871210c2002417c71220541046a210441002008" + "6b411871210820052802002105034020062005200c762004280200220520087472" + "360200200441046a2104200641046a22062003490d000b0c010b200a41004c0d00" + "20022104034020062004280200360200200441046a2104200641046a2206200349" + "0d000b0b2002200a6a2104200b41037122020440200220036a2102034020032004" + "2d00003a0000200441016a2104200341016a22032002490d000b0b200104402001" + "4122460440200021032007210241002105412221080240034020032d0000220920" + "022d00002204460440200341016a2103200241016a2102200841016b22080d010c" + "020b0b200920046b21050b20054521090b2000200110030b20074122100320090f" + "0b000bd20601047f0240200041046b280200220241787122034104410820024103" + "7122021b20016a4f0440200241002003200141276a4b1b0d01200041086b220120" + "0041046b280200220341787122006a21020240024020034101710d002003410271" + "450d012001280200220320006a2100200120036b220141bc85c000280200460440" + "20022802044103714103470d0141b485c000200036020020022002280204417e71" + "36020420012000410172360204200220003602000c020b2001200310080b024002" + "4002400240024020022802042203410271450440200241c085c000280200460d02" + "200241bc85c000280200460d0320022003417871220210082001200020026a2200" + "410172360204200020016a2000360200200141bc85c000280200470d0141b485c0" + "0020003602000c060b20022003417e713602042001200041017236020420002001" + "6a20003602000b2000418002490d022001200010074100210141d485c00041d485" + "c00028020041016b220036020020000d04419c83c0002802002200044003402001" + "41016a2101200028020822000d000b0b41d485c000200141ff1f200141ff1f4b1b" + "3602000c040b41c085c000200136020041b885c00041b885c00028020020006a22" + "003602002001200041017236020441bc85c000280200200146044041b485c00041" + "0036020041bc85c00041003602000b200041cc85c00028020022034d0d0341c085" + "c0002802002202450d034100210041b885c00028020022044129490d02419483c0" + "00210103402002200128020022054f04402002200520012802046a490d040b2001" + "28020821010c000b000b41bc85c000200136020041b485c00041b485c000280200" + "20006a220036020020012000410172360204200020016a20003602000c020b2000" + "41f8017141a483c0006a2102027f41ac85c0002802002203410120004103767422" + "007145044041ac85c000200020037236020020020c010b20022802080b21002002" + "20013602082000200136020c2001200236020c200120003602080c010b419c83c0" + "00280200220104400340200041016a2100200128020822010d000b0b41d485c000" + "200041ff1f200041ff1f4b1b360200200320044f0d0041cc85c000417f3602000b" + "0f0b418981c00041b881c0001004000b41c881c00041f881c0001004000b410101" + "7f230041206b220224002002410036021020024101360204200242043702082002" + "412e36021c200220003602182002200241186a360200200220011005000ba40201" + "037f230041206b22022400200241106a2203200041106a29020037030020024108" + "6a2204200041086a290200370300200241013b011c200220013602182002200029" + "0200370300230041206b2200240020022802182101200041106a20032902003703" + "00200041086a20042902003703002000200236021c200020013602182000200229" + "020037030041002102230041106b22012400200028020c21030240024002400240" + "20002802040e020001020b20030d01410121030c020b20030d0020002802002203" + "2802042102200328020021030c010b20014180808080783602002001200036020c" + "20014101200028021c22002d001c20002d001d1009000b20012002360204200120" + "0336020020014102200028021c22002d001c20002d001d1009000b090020004100" + "3602000bba0201047f411f210220004200370210200141ffffff074d0440200141" + "0620014108766722036b7641017120034101746b413e6a21020b2000200236021c" + "2002410274419482c0006a21044101200274220341b085c0002802007145044020" + "042000360200200020043602182000200036020c2000200036020841b085c00041" + "b085c0002802002003723602000f0b024002402001200428020022032802044178" + "71460440200321020c010b20014100411920024101766b2002411f461b74210503" + "4020032005411d764104716a41106a22042802002202450d022005410174210520" + "02210320022802044178712001470d000b0b20022802082201200036020c200220" + "00360208200041003602182000200236020c200020013602080f0b200420003602" + "00200020033602182000200036020c200020003602080bf10201047f200028020c" + "21020240024020014180024f044020002802182103024002402000200246044020" + "0041144110200028021422021b6a28020022010d01410021020c020b2000280208" + "2201200236020c200220013602080c010b200041146a200041106a20021b210403" + "40200421052001220241146a200241106a200228021422011b2104200241144110" + "20011b6a28020022010d000b200541003602000b2003450d022000200028021c41" + "0274419482c0006a220128020047044020034110411420032802102000461b6a20" + "023602002002450d030c020b2001200236020020020d0141b085c00041b085c000" + "280200417e200028021c77713602000c020b200028020822002002470440200020" + "0236020c200220003602080f0b41ac85c00041ac85c000280200417e2001410376" + "77713602000f0b2002200336021820002802102201044020022001360210200120" + "023602180b20002802142200450d0020022000360214200020023602180b0b7b01" + "017f230041106b22032400419082c000419082c000280200220441016a36020002" + "4020044100480d00024041dc85c0002d000045044041d885c00041d885c0002802" + "0041016a360200418c82c00028020041004e0d010c020b200341086a2000200111" + "0000000b41dc85c00041003a00002002450d00000b000b0c002000200129020037" + "03000b0b8f020100418080c0000b850272486239434a4157794234726a39315652" + "576e3936446b756b4734627764747954686361706163697479206f766572666c6f" + "77002200100011000000616c6c6f632f7372632f7261775f7665632e72733c0010" + "001400000018000000050000002f727573742f646570732f646c6d616c6c6f632d" + "302e322e362f7372632f646c6d616c6c6f632e7273617373657274696f6e206661" + "696c65643a207073697a65203e3d2073697a65202b206d696e5f6f766572686561" + "64006000100029000000a804000009000000617373657274696f6e206661696c65" + "643a207073697a65203c3d2073697a65202b206d61785f6f766572686561640000" + "6000100029000000ae0400000d00550970726f64756365727302086c616e677561" + "6765010452757374000c70726f6365737365642d62790105727573746325312e38" + "332e302d6e696768746c79202863326637346333663920323032342d30392d3039" + "2900490f7461726765745f6665617475726573042b0f6d757461626c652d676c6f" + "62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b0a" + "6d756c746976616c7565"; + +extern std::string const sha512Hex = + "0061736d0100000001170560017f0060000060017f017f60027f7f017f60" + "00017f02240116776173695f736e617073686f745f707265766965773109" + "70726f635f65786974000003090801020003010200040405017001020205" + "060101820282020608017f0141d091040b07930108066d656d6f72790200" + "08616c6c6f6361746500020a6465616c6c6f6361746500030e7368613531" + "325f70726f636573730004195f5f696e6469726563745f66756e6374696f" + "6e5f7461626c650100065f73746172740005195f656d736372697074656e" + "5f737461636b5f726573746f726500071c656d736372697074656e5f7374" + "61636b5f6765745f63757272656e7400080907010041010b01010c01020a" + "983a080300010bde27010b7f230041106b220a2400024002400240024002" + "4002400240024002400240200041f4014d044041d40d2802002204411020" + "00410b6a41f803712000410b491b22064103762200762201410371044002" + "402001417f7341017120006a2202410374220141fc0d6a2200200141840e" + "6a2802002201280208220546044041d40d2004417e200277713602000c01" + "0b2005200036020c200020053602080b200141086a210020012002410374" + "2202410372360204200120026a220120012802044101723602040c0b0b20" + "0641dc0d28020022084d0d0120010440024041022000742202410020026b" + "72200120007471682201410374220041fc0d6a2202200041840e6a280200" + "2200280208220546044041d40d2004417e2001777122043602000c010b20" + "05200236020c200220053602080b20002006410372360204200020066a22" + "072001410374220120066b2205410172360204200020016a200536020020" + "080440200841787141fc0d6a210141e80d2802002102027f200441012008" + "4103767422037145044041d40d200320047236020020010c010b20012802" + "080b2103200120023602082003200236020c2002200136020c2002200336" + "02080b200041086a210041e80d200736020041dc0d20053602000c0b0b41" + "d80d280200220b450d01200b684102744184106a28020022022802044178" + "7120066b2103200221010340024020012802102200450440200128021422" + "00450d010b200028020441787120066b22012003200120034922011b2103" + "2000200220011b2102200021010c010b0b20022802182109200220022802" + "0c220047044020022802082201200036020c200020013602080c0a0b2002" + "2802142201047f200241146a0520022802102201450d03200241106a0b21" + "050340200521072001220041146a2105200028021422010d00200041106a" + "2105200028021022010d000b200741003602000c090b417f2106200041bf" + "7f4b0d002000410b6a2201417871210641d80d2802002207450d00411f21" + "08410020066b2103200041f4ffff074d0440200641262001410876672200" + "6b7641017120004101746b413e6a21080b02400240024020084102744184" + "106a2802002201450440410021000c010b41002100200641192008410176" + "6b41002008411f471b74210203400240200128020441787120066b220420" + "034f0d0020012105200422030d0041002103200121000c030b2000200128" + "02142204200420012002411d764104716a2802102201461b200020041b21" + "002002410174210220010d000b0b20002005724504404100210541022008" + "742200410020006b722007712200450d032000684102744184106a280200" + "21000b2000450d010b0340200028020441787120066b2202200349210120" + "02200320011b21032000200520011b210520002802102201047f20010520" + "002802140b22000d000b0b2005450d00200341dc0d28020020066b4f0d00" + "200528021821082005200528020c22004704402005280208220120003602" + "0c200020013602080c080b20052802142201047f200541146a0520052802" + "102201450d03200541106a0b21020340200221042001220041146a210220" + "0028021422010d00200041106a2102200028021022010d000b2004410036" + "02000c070b200641dc0d28020022054d044041e80d280200210002402005" + "20066b220141104f0440200020066a22022001410172360204200020056a" + "2001360200200020064103723602040c010b200020054103723602042000" + "20056a2201200128020441017236020441002102410021010b41dc0d2001" + "36020041e80d2002360200200041086a21000c090b200641e00d28020022" + "0249044041e00d200220066b220136020041ec0d41ec0d28020022002006" + "6a2202360200200220014101723602042000200641037236020420004108" + "6a21000c090b410021002006412f6a2203027f41ac11280200044041b411" + "2802000c010b41b811427f37020041b0114280a0808080800437020041ac" + "11200a410c6a41707141d8aad5aa057336020041c0114100360200419011" + "41003602004180200b22016a2204410020016b220771220120064d0d0841" + "8c1128020022050440418411280200220820016a220920084d0d09200520" + "09490d090b02404190112d0000410471450440024002400240024041ec0d" + "28020022050440419411210003402000280200220820054d044020052008" + "20002802046a490d030b200028020822000d000b0b410010062202417f46" + "0d032001210441b011280200220041016b22052002710440200120026b20" + "0220056a410020006b716a21040b200420064d0d03418c11280200220004" + "40418411280200220520046a220720054d0d0420002007490d040b200410" + "0622002002470d010c050b200420026b2007712204100622022000280200" + "20002802046a460d01200221000b2000417f460d01200641306a20044d04" + "40200021020c040b41b4112802002202200320046b6a410020026b712202" + "1006417f460d01200220046a2104200021020c030b2002417f470d020b41" + "90114190112802004104723602000b200110062102410010062100200241" + "7f460d052000417f460d05200020024d0d05200020026b2204200641286a" + "4d0d050b41841141841128020020046a2200360200418811280200200049" + "044041881120003602000b024041ec0d2802002203044041941121000340" + "200220002802002201200028020422056a460d02200028020822000d000b" + "0c040b41e40d28020022004100200020024d1b45044041e40d2002360200" + "0b410021004198112004360200419411200236020041f40d417f36020041" + "f80d41ac1128020036020041a01141003602000340200041037422014184" + "0e6a200141fc0d6a2205360200200141880e6a2005360200200041016a22" + "004120470d000b41e00d200441286b2200417820026b41077122016b2205" + "36020041ec0d200120026a22013602002001200541017236020420002002" + "6a412836020441f00d41bc112802003602000c040b200220034d0d022001" + "20034b0d02200028020c4108710d022000200420056a36020441ec0d2003" + "417820036b41077122006a220136020041e00d41e00d28020020046a2202" + "20006b220036020020012000410172360204200220036a412836020441f0" + "0d41bc112802003602000c030b410021000c060b410021000c040b41e40d" + "28020020024b044041e40d20023602000b200220046a2105419411210002" + "400340200520002802002201470440200028020822000d010c020b0b2000" + "2d000c410871450d030b4194112100034002402000280200220120034d04" + "402003200120002802046a2205490d010b200028020821000c010b0b41e0" + "0d200441286b2200417820026b41077122016b220736020041ec0d200120" + "026a220136020020012007410172360204200020026a412836020441f00d" + "41bc1128020036020020032005412720056b4107716a412f6b2200200020" + "0341106a491b2201411b3602042001419c11290200370210200141941129" + "0200370208419c11200141086a3602004198112004360200419411200236" + "020041a0114100360200200141186a210003402000410736020420004108" + "6a2102200041046a210020022005490d000b20012003460d002001200128" + "0204417e713602042003200120036b220241017236020420012002360200" + "027f200241ff014d0440200241787141fc0d6a2100027f41d40d28020022" + "01410120024103767422027145044041d40d200120027236020020000c01" + "0b20002802080b2101200020033602082001200336020c410c210241080c" + "010b411f2100200241ffffff074d04402002412620024108766722006b76" + "41017120004101746b413e6a21000b2003200036021c2003420037021020" + "004102744184106a21010240024041d80d28020022054101200074220471" + "45044041d80d2004200572360200200120033602000c010b200241192000" + "4101766b41002000411f471b742100200128020021050340200522012802" + "044178712002460d022000411d7621052000410174210020012005410471" + "6a220428021022050d000b200420033602100b2003200136021841082102" + "200322012100410c0c010b20012802082200200336020c20012003360208" + "200320003602084100210041182102410c0b20036a200136020020022003" + "6a20003602000b41e00d280200220020064d0d0041e00d200020066b2201" + "36020041ec0d41ec0d280200220020066a22023602002002200141017236" + "020420002006410372360204200041086a21000c040b41d00d4130360200" + "410021000c030b200020023602002000200028020420046a360204200241" + "7820026b4107716a220820064103723602042001417820016b4107716a22" + "04200620086a22036b2107024041ec0d280200200446044041ec0d200336" + "020041e00d41e00d28020020076a2200360200200320004101723602040c" + "010b41e80d280200200446044041e80d200336020041dc0d41dc0d280200" + "20076a220036020020032000410172360204200020036a20003602000c01" + "0b20042802042200410371410146044020004178712109200428020c2102" + "0240200041ff014d044020042802082201200246044041d40d41d40d2802" + "00417e200041037677713602000c020b2001200236020c20022001360208" + "0c010b200428021821060240200220044704402004280208220020023602" + "0c200220003602080c010b024020042802142200047f200441146a052004" + "2802102200450d01200441106a0b21010340200121052000220241146a21" + "01200028021422000d00200241106a2101200228021022000d000b200541" + "003602000c010b410021020b2006450d000240200428021c220041027441" + "84106a220128020020044604402001200236020020020d0141d80d41d80d" + "280200417e200077713602000c020b024020042006280210460440200620" + "023602100c010b200620023602140b2002450d010b200220063602182004" + "2802102200044020022000360210200020023602180b2004280214220045" + "0d0020022000360214200020023602180b200720096a2107200420096a22" + "0428020421000b20042000417e7136020420032007410172360204200320" + "076a2007360200200741ff014d0440200741787141fc0d6a2100027f41d4" + "0d2802002201410120074103767422027145044041d40d20012002723602" + "0020000c010b20002802080b2101200020033602082001200336020c2003" + "200036020c200320013602080c010b411f2102200741ffffff074d044020" + "07412620074108766722006b7641017120004101746b413e6a21020b2003" + "200236021c2003420037021020024102744184106a21000240024041d80d" + "2802002201410120027422057145044041d80d2001200572360200200020" + "033602000c010b2007411920024101766b41002002411f471b7421022000" + "28020021010340200122002802044178712007460d022002411d76210120" + "024101742102200020014104716a220528021022010d000b200520033602" + "100b200320003602182003200336020c200320033602080c010b20002802" + "082201200336020c20002003360208200341003602182003200036020c20" + "0320013602080b200841086a21000c020b02402008450d00024020052802" + "1c22014102744184106a220228020020054604402002200036020020000d" + "0141d80d2007417e2001777122073602000c020b02402005200828021046" + "0440200820003602100c010b200820003602140b2000450d010b20002008" + "36021820052802102201044020002001360210200120003602180b200528" + "02142201450d0020002001360214200120003602180b02402003410f4d04" + "402005200320066a2200410372360204200020056a220020002802044101" + "723602040c010b20052006410372360204200520066a2204200341017236" + "0204200320046a2003360200200341ff014d0440200341787141fc0d6a21" + "00027f41d40d2802002201410120034103767422027145044041d40d2001" + "20027236020020000c010b20002802080b21012000200436020820012004" + "36020c2004200036020c200420013602080c010b411f2100200341ffffff" + "074d04402003412620034108766722006b7641017120004101746b413e6a" + "21000b2004200036021c2004420037021020004102744184106a21010240" + "02402007410120007422027145044041d80d200220077236020020012004" + "360200200420013602180c010b2003411920004101766b41002000411f47" + "1b742100200128020021010340200122022802044178712003460d022000" + "411d76210120004101742100200220014104716a220728021022010d000b" + "20072004360210200420023602180b2004200436020c200420043602080c" + "010b20022802082200200436020c20022004360208200441003602182004" + "200236020c200420003602080b200541086a21000c010b02402009450d00" + "0240200228021c22014102744184106a2205280200200246044020052000" + "36020020000d0141d80d200b417e200177713602000c020b024020022009" + "280210460440200920003602100c010b200920003602140b2000450d010b" + "200020093602182002280210220104402000200136021020012000360218" + "0b20022802142201450d0020002001360214200120003602180b02402003" + "410f4d04402002200320066a2200410372360204200020026a2200200028" + "02044101723602040c010b20022006410372360204200220066a22052003" + "410172360204200320056a200336020020080440200841787141fc0d6a21" + "0041e80d2802002101027f4101200841037674220720047145044041d40d" + "200420077236020020000c010b20002802080b2104200020013602082004" + "200136020c2001200036020c200120043602080b41e80d200536020041dc" + "0d20033602000b200241086a21000b200a41106a240020000be30b01077f" + "02402000450d00200041086b2202200041046b280200220041787122046a" + "2105024020004101710d002000410271450d012002200228020022006b22" + "0241e40d280200490d01200020046a210402400240024041e80d28020020" + "02470440200228020c2101200041ff014d0440200120022802082203470d" + "0241d40d41d40d280200417e200041037677713602000c050b2002280218" + "21062001200247044020022802082200200136020c200120003602080c04" + "0b20022802142200047f200241146a0520022802102200450d0320024110" + "6a0b21030340200321072000220141146a2103200128021422000d002001" + "41106a2103200128021022000d000b200741003602000c030b2005280204" + "22004103714103470d0341dc0d200436020020052000417e713602042002" + "2004410172360204200520043602000c040b2003200136020c2001200336" + "02080c020b410021010b2006450d000240200228021c2200410274418410" + "6a220328020020024604402003200136020020010d0141d80d41d80d2802" + "00417e200077713602000c020b0240200220062802104604402006200136" + "02100c010b200620013602140b2001450d010b2001200636021820022802" + "102200044020012000360210200020013602180b20022802142200450d00" + "20012000360214200020013602180b200220054f0d002005280204220041" + "0171450d000240024002400240200041027145044041ec0d280200200546" + "044041ec0d200236020041e00d41e00d28020020046a2200360200200220" + "00410172360204200241e80d280200470d0641dc0d410036020041e80d41" + "003602000c060b41e80d280200200546044041e80d200236020041dc0d41" + "dc0d28020020046a220036020020022000410172360204200020026a2000" + "3602000c060b200041787120046a2104200528020c2101200041ff014d04" + "4020052802082203200146044041d40d41d40d280200417e200041037677" + "713602000c050b2003200136020c200120033602080c040b200528021821" + "062001200547044020052802082200200136020c200120003602080c030b" + "20052802142200047f200541146a0520052802102200450d02200541106a" + "0b21030340200321072000220141146a2103200128021422000d00200141" + "106a2103200128021022000d000b200741003602000c020b20052000417e" + "7136020420022004410172360204200220046a20043602000c030b410021" + "010b2006450d000240200528021c22004102744184106a22032802002005" + "4604402003200136020020010d0141d80d41d80d280200417e2000777136" + "02000c020b024020052006280210460440200620013602100c010b200620" + "013602140b2001450d010b20012006360218200528021022000440200120" + "00360210200020013602180b20052802142200450d002001200036021420" + "0020013602180b20022004410172360204200220046a2004360200200241" + "e80d280200470d0041dc0d20043602000c010b200441ff014d0440200441" + "787141fc0d6a2100027f41d40d2802002203410120044103767422017145" + "044041d40d200120037236020020000c010b20002802080b210320002002" + "3602082003200236020c2002200036020c200220033602080c010b411f21" + "01200441ffffff074d04402004412620044108766722006b764101712000" + "4101746b413e6a21010b2002200136021c20024200370210200141027441" + "84106a2103027f0240027f41d80d28020022004101200174220771450440" + "41d80d2000200772360200200320023602004118210141080c010b200441" + "1920014101766b41002001411f471b742101200328020021030340200322" + "002802044178712004460d022001411d7621032001410174210120002003" + "4104716a220728021022030d000b20072002360210411821012000210341" + "080b2104200222000c010b20002802082203200236020c20002002360208" + "411821044108210141000b2107200120026a20033602002002200036020c" + "200220046a200736020041f40d41f40d28020041016b2200417f20001b36" + "02000b0bee0502137e037f200141ff006a41ff014f044023004180016b21" + "1620014180016d211741900d290300210b41980d290300210c41a00d2903" + "00210d41a80d290300210e41b00d290300210f41b80d290300211041c00d" + "290300211141c80d2903002112034041002115200b21092012210a201121" + "0820102105200f2103200e2114200d2106200c2102034020022107201620" + "1541037422016a2000290000220242388620024280fe0383422886842002" + "428080fc0783421886200242808080f80f83420886848420024208884280" + "8080f80f832002421888428080fc07838420024228884280fe0383200242" + "3888848484220237030020014180086a290300200a200322044232892004" + "422e89852004421789857c2008220a2004427f858320052208200483847c" + "7c20027c2203200922024224892002421e89852002421989852002200720" + "06221385832006200783857c7c2109200320147c2103200041086a210041" + "102101200421052006211420072106201541016a22154110470d000b0340" + "2002210620162001410f714103746a221520152903002016200141096a41" + "0f714103746a2903002016200141016a2215410f714103746a2903002202" + "423f892002423889852002420788857c7c20162001410e6a410f71410374" + "6a2903002202422d892002420389852002420688857c2202370300200141" + "03744180086a290300200a200322054232892005422e8985200542178985" + "7c2005427f852008832004200583847c7c20027c22032009220242248920" + "02421e898520024219898520022006200785832006200783857c7c210920" + "0320137c21032008210a2004210820052104200721132006210720152201" + "41d000470d000b41c80d200a20127c221237030041c00d200820117c2211" + "37030041b80d200420107c221037030041b00d2003200f7c220f37030041" + "a80d200e20137c220e37030041a00d2007200d7c220d37030041980d2002" + "200c7c220c37030041900d2009200b7c220b370300201741016b22170d00" + "0b0b41900d0b070041001000000b4901027f41800d280200220120004107" + "6a41787122026a2100024020024100200020014d1b45044020003f004110" + "744d0d010b41d00d4130360200417f0f0b41800d200036020020010b0600" + "200024000b040023000b0b910502004180080b800522ae28d7982f8a42cd" + "65ef23914437712f3b4deccffbc0b5bcdb8981a5dbb5e938b548f35bc256" + "3919d005b6f111f1599b4f19afa4823f9218816ddad55e1cab420203a398" + "aa07d8be6f7045015b83128cb2e44ebe853124e2b4ffd5c37d0c556f897b" + "f2745dbe72b196163bfeb1de803512c725a706dc9b942669cf74f19bc1d2" + "4af19ec1699be4e3254f388647beefb5d58c8bc69dc10f659cac77cca10c" + "2475022b596f2ce92d83e4a66eaa84744ad4fb41bddca9b05cb5531183da" + "88f976abdf66ee52513e981032b42d6dc631a83f21fb98c82703b0e40eef" + "bec77f59bfc28fa83df30be0c625a70a934791a7d56f8203e05163ca0670" + "6e0e0a67292914fc2fd246850ab72726c9265c38211b2eed2ac45afc6d2c" + "4ddfb3959d130d3853de63af8b54730a65a8b2773cbb0a6a76e6aeed472e" + "c9c2813b358214852c72926403f14ca1e8bfa2013042bc4b661aa89197f8" + "d0708b4bc230be5406a3516cc71852efd619e892d110a96555240699d62a" + "20715785350ef4b8d1bb3270a06a10c8d0d2b816c1a41953ab4151086c37" + "1e99eb8edf4c774827a8489be1b5bcb034635ac9c5b30c1c39cb8a41e34a" + "aad84e73e363774fca9c5ba3b8b2d6f36f2e68fcb2ef5dee828f74602f17" + "436f63a57872abf0a11478c884ec39641a0802c78c281e6323faffbe90e9" + "bd82deeb6c50a41579c6b2f7a3f9be2b5372e3f27871c69c6126eace3e27" + "ca07c2c021c7b886d11eebe0cdd67ddaea78d16eee7f4f7df5ba6f1772aa" + "67f006a698c8a2c57d630aae0df9be04983f111b471c13350b711b847d04" + "23f577db289324c7407babca32bcbec9150abe9e3c4c0d109cc4671d43b6" + "423ecbbed4c54c2a7e65fc9c297f59ecfad63aab6fcb5f1758474a8c1944" + "6c0041800d0b03d00801"; + +extern std::string const p2Hex = + "0061736d0100000001791160017f0060037f7f7f017f60027f7f017f60027f7f00" + "60037f7f7f0060047f7f7f7f0060017f017f60047f7f7f7e0060057f7f7f7e7f00" + "60057f7f7f7f7f0060047f7f7f7f017f60000060037e7f7f017f60067f7f7f7f7f" + "7f017f60057f7f7f7f7f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f0003" + "616004030305060001070808080809040702000000040403030304030500020306" + "0a0609000b0300040103030402040c000d0e04010202010204040f090902020204" + "0903020201020200000405000203030402020205100b0303000005030101010104" + "05017001121205030100110619037f01418080c0000b7f004195d3c0000b7f0041" + "a0d3c0000b074405066d656d6f7279020008616c6c6f63617465001e11636f6d70" + "6172655f6163636f756e744944001f0a5f5f646174615f656e6403010b5f5f6865" + "61705f6261736503020917010041010b1134332b3c3d3e4345565b124247445251" + "460ad3cf0260ea0301057f23808080800041e0006b220324808080800020034100" + "360228200320023602242003200136022020034180013a002c2003410036021c20" + "03428080808010370214200341c8006a200341146a108180808000024002400240" + "024020032d00484106460d00200341306a41106a2204200341c8006a41106a2903" + "00370300200341306a41086a2205200341c8006a41086a29030037030020032003" + "2903483703300240024020032802282202200328022422064f0d00200328022021" + "070340200720026a2d000041776a220141174b0d02410120017441938080047145" + "0d022006200241016a2202470d000b200320063602280b20002003290330370300" + "200041106a2004290300370300200041086a200529030037030020032802142202" + "450d04200328021820021082808080000c040b20032002360228200341086a2007" + "20062006200241016a220220062002491b10838080800041002d00c0cfc080001a" + "200328020c21012003280208210641141084808080002202450d01200220063602" + "0c2002411636020020002002360204200041063a00002002200136021020034130" + "6a1085808080000c020b2000200328024c360204200041063a00000c010b000b20" + "032802142202450d00200328021820021082808080000b200341e0006a24808080" + "80000beb28020c7f037e2380808080004180036b2202248080808000200128020c" + "210302400240024002400240024002400240024002400240024002400240024002" + "400240024002400240024002400240024002400240024002400240200128021422" + "04200128021022054f0d002001410c6a21060340200320046a2d0000220741776a" + "220841174b0d024101200874419380800471450d022001200441016a2204360214" + "20052004470d000b200521040b200241f0006a200320052005200441016a220420" + "052004491b10838080800041002d00c0cfc080001a200228027421082002280270" + "2101411410848080800022040d010c1b0b200741e5004a0d0820074122460d0620" + "07412d460d07200741db00470d09200120012d0018417f6a22083a001820044101" + "6a2104200841ff0171450d0520012004360214200241003602e002200242808080" + "8080013702d80241082109200420054f0d02200241b0016a41086a210a200241b0" + "016a410172210b410821094100210c4101210d0340200628020021030240034020" + "0320046a2d0000220741776a220841174b0d014101200874419380800471450d01" + "2001200441016a220436021420052004470d000b200521040c040b024002400240" + "200741dd00460d00200d4101710d02200441016a210402402007412c470d002001" + "20043602140240200420054f0d000340200320046a2d0000220741776a22084117" + "4b0d044101200874419380800471450d042001200441016a220436021420052004" + "470d000b200521040b200241386a200320052005200441016a220420052004491b" + "10838080800041002d00c0cfc080001a200228023c210420022802382108411410" + "84808080002207450d1f2007200836020c20074105360200200720043602100c08" + "0b200241c8006a200320052005200420052004491b10838080800041002d00c0cf" + "c080001a200228024c21042002280248210841141084808080002207450d1e2007" + "200836020c20074107360200200720043602100c070b20022902dc02210e200228" + "02d802210741042106410021090c070b200741dd00470d00200241c0006a200320" + "052005200441016a220420052004491b10838080800041002d00c0cfc080001a20" + "0228024421042002280240210841141084808080002207450d1c2007200836020c" + "20074115360200200720043602100c050b200241b0016a20011081808080000240" + "20022d00b00122084106470d0020022802b40121070c050b200241d4026a41026a" + "2205200b41026a2d00003a0000200241c0026a41086a2203200a41086a29030037" + "03002002200b2f00003b01d4022002200a2903003703c00220022802b401210702" + "40200c20022802d802470d00200241d8026a1090808080000b20022802dc022209" + "200c41186c6a220420022903c002370308200420083a0000200420022f01d4023b" + "000120042007360204200441106a2003290300370300200441036a20052d00003a" + "00002002200c41016a220c3602e0024100210d2001280214220420012802102205" + "4f0d020c000b0b2004200136020c2004410536020020002004360204200041063a" + "0000200420083602100c180b200628020021030b200241306a2003200520052004" + "41016a220420052004491b10838080800041002d00c0cfc080001a200228023421" + "042002280230210841141084808080002207450d172007200836020c2007410236" + "0200200720043602100b200241d8026a109180808000024020022802d802220445" + "0d002009200441186c1082808080000b200128020c210320012802142104200128" + "0210210541062106410121090b200120012d001841016a3a001802400240200420" + "054f0d0003400240024002400240024002400240200320046a2d00002208410c4a" + "0d00200841776a4102490d060c010b02402008411f4a0d002008410d470d010c06" + "0b20084120460d052008412c460d01200841dd00460d020b200241106a20032005" + "2005200441016a220420052004491b10838080800041002d00c0cfc080001a2002" + "28021421082002280210210541141084808080002204450d1d200441163602000c" + "070b2001200441016a2204360214200420054f0d020340200320046a2d0000220c" + "41776a220841174b0d024101200874419380800471450d022001200441016a2204" + "36021420052004470d000b200521040c020b2001200441016a3602142002200e37" + "03b801200220073602b401200220063a00b00102402009450d00200241063a0078" + "2002200736027c0c180b200241f8006a41106a200241b0016a41106a2903003703" + "00200241f8006a41086a200241b0016a41086a290300370300200220022903b001" + "3703780c170b200c41dd00470d00200241286a200320052005200441016a220420" + "052004491b10838080800041002d00c0cfc080001a200228022c21082002280228" + "210541141084808080002204450d1a200441153602000c040b200241206a200320" + "052005200441016a220420052004491b10838080800041002d00c0cfc080001a20" + "0228022421082002280220210541141084808080002204450d1920044116360200" + "0c030b2001200441016a220436021420052004470d000b200521040b200241186a" + "200320052005200441016a220420052004491b10838080800041002d00c0cfc080" + "001a200228021c21082002280218210541141084808080002204450d1620044102" + "3602000b2004200536020c20042008360210200220043602c8012002200e3703b8" + "01200220073602b401200220063a00b001024020090d00200241063a0078200220" + "0436027c200241b0016a1085808080000c120b200241063a00782002200736027c" + "200241c8016a1092808080000c110b200241086a20032005200520042005200449" + "1b10838080800041002d00c0cfc080001a200228020c2108200228020821014114" + "1084808080002204450d142004200136020c200441183602002000200436020420" + "0041063a0000200420083602100c130b200141003602082001200441016a360214" + "200241b0016a2006200110938080800020022802b40121080240024020022802b0" + "0122054102460d0020022802b8012104024020050d00200241f8006a2008200410" + "948080800020022d00784106460d1320002002290378370300200041106a200241" + "f8006a41106a290300370300200041086a200241f8006a41086a2903003703000c" + "150b41002101024020044100480d00024020040d0041012101410021050c030b41" + "002d00c0cfc080001a20042105200410848080800022010d02410121010b200120" + "04109580808000000b200041063a0000200020083602040c130b200241f8006a41" + "086a220320012008200410df808080003602002002200536027c200241033a0078" + "2002200436028401200041106a200241f8006a41106a290300370300200041086a" + "2003290300370300200020022903783703000c120b2001200441016a3602142002" + "4190016a20014100108d8080800002402002290390014203510d00200241f8006a" + "20024190016a109680808000024020022d00784106460d00200020022903783703" + "00200041106a200241f8006a41106a290300370300200041086a200241f8006a41" + "086a2903003703000c130b200228027c2001108f808080002104200041063a0000" + "200020043602040c120b2000200228029801360204200041063a00000c110b0240" + "200741f3004a0d00200741e600460d04200741ee00470d012001200441016a3602" + "14200141bb80c0800041031086808080002204450d02200041063a000020002004" + "3602040c110b200741f400460d02200741fb00460d040b200741506a41ff017141" + "0a490d042002200320052005200441016a220420052004491b1083808080004100" + "2d00c0cfc080001a20022802042108200228020021054114108480808000220445" + "0d102004200536020c2004410a360200200420083602102002200436027c0c0d0b" + "200241003a007820002002290378370300200041086a200241f8006a41086a2903" + "00370300200041106a200241f8006a41106a2903003703000c0e0b200120044101" + "6a3602140240200141be80c0800041031086808080002204450d00200041063a00" + "00200020043602040c0e0b20024181023b01782000200229037837030020004108" + "6a200241f8006a41086a290300370300200041106a200241f8006a41106a290300" + "3703000c0d0b2001200441016a3602140240200141c180c0800041041086808080" + "002204450d00200041063a0000200020043602040c0d0b200241013b0178200020" + "02290378370300200041086a200241f8006a41086a290300370300200041106a20" + "0241f8006a41106a2903003703000c0c0b200120012d0018417f6a22083a001820" + "0441016a2104200841ff0171450d0720012004360214200241013a00d801200220" + "013602d401200241b0016a200241d4016a10978080800002400240024020022d00" + "b0010d004105210620022d00b1010d01410021074200210e0c020b20022802b401" + "21070c070b20022802d401220441003602082004200428021441016a3602142002" + "41b0016a2004410c6a200410938080800020022802b401210720022802b0014102" + "460d06200241d8026a200720022802b801109880808000024020022802d8022204" + "418080808078470d0020022802dc0221070c070b20022802dc0221080240200441" + "8180808078470d00200821070c070b20022802e0022105200241003602e4012002" + "41003602dc01200220053602e002200220083602dc02200220043602d802200241" + "e8016a200241d4016a10998080800020022d00e8014106460d04200241b0016a20" + "0241dc016a200241d8026a200241e8016a109a80808000024020022d00b0014106" + "460d00200241b0016a1085808080000b20024180026a41046a2108200241b0016a" + "41046a21050340200241b0016a200241d4016a10978080800020022d00b0010d03" + "024020022d00b101450d0020022802d40122044100360208200420042802144101" + "6a360214200241b0016a2004410c6a200410938080800020022802b40121072002" + "2802b0014102460d07200241f4026a200720022802b80110988080800002402002" + "2802f4022204418080808078470d0020022802f80221070c080b20022802f80221" + "072004418180808078460d0720022802fc022103200241b0016a200241d4016a10" + "9980808000024020022d00b0014106470d0020022802b401210802402004450d00" + "200720041082808080000b200821070c080b200241d8026a41106a200241b0016a" + "41106a2209290300220e370300200241d8026a41086a200241b0016a41086a220c" + "290300220f370300200220022903b00122103703d802200541106a200e37020020" + "0541086a200f3702002005201037020020024180026a41086a200c290200370300" + "20024180026a41106a200929020037030020024180026a41186a200241b0016a41" + "186a280200360200200220022902b00137038002200220033602a4022002200736" + "02a0022002200436029c02200241a8026a41106a200841106a2902003703002002" + "41a8026a41086a200841086a290200370300200220082902003703a802200241b0" + "016a200241dc016a2002419c026a200241a8026a109a8080800020022d00b00141" + "06460d01200241b0016a1085808080000c010b0b20022802dc01210720022902e0" + "01210e0b410021090c060b200241a0016a20014101108d8080800020022903a001" + "4203510d01200241f8006a200241a0016a109680808000024020022d0078410646" + "0d0020002002290378370300200041106a200241f8006a41106a29030037030020" + "0041086a200241f8006a41086a2903003703000c0b0b200228027c2001108f8080" + "80002104200041063a0000200020043602040c0a0b20022802b40121070c020b20" + "0020022802a801360204200041063a00000c080b20022802ec0121072004450d00" + "200820041082808080000b200241dc016a109b808080000b41062106410121090b" + "200120012d001841016a3a0018200128020c210302400240024020012802142204" + "200128021022054f0d00034002400240200320046a2d00002208410c4a0d002008" + "41776a4102490d010c040b02402008411f4a0d002008410d470d040c010b200841" + "20460d0002402008412c460d00200841fd00470d042001200441016a3602144100" + "21040c050b200241e8006a200320052005200441016a220420052004491b108380" + "80800041002d00c0cfc080001a200228026c210820022802682105411410848080" + "80002204450d0a2004200536020c20044115360200200420083602100c040b2001" + "200441016a220436021420052004470d000b200521040b200241e0006a20032005" + "2005200441016a220420052004491b10838080800041002d00c0cfc080001a2002" + "28026421082002280260210541141084808080002204450d072004200536020c20" + "044103360200200420083602100c010b200241d8006a200320052005200441016a" + "220420052004491b10838080800041002d00c0cfc080001a200228025c21082002" + "280258210541141084808080002204450d062004200536020c2004411636020020" + "0420083602100b200220063a00b001200220022f00d8023b00b101200220043602" + "c8012002200e3703b801200220073602b4012002200241da026a2d00003a00b301" + "024020090d00024020040d00200241f8006a41106a200241b0016a41106a290300" + "370300200241f8006a41086a200241b0016a41086a290300370300200220022903" + "b0013703780c030b200241063a00782002200436027c200241b0016a1085808080" + "000c020b200241063a00782002200736027c2004450d01200241c8016a10928080" + "80000c010b200241d0006a200320052005200420052004491b1083808080004100" + "2d00c0cfc080001a20022802542108200228025021014114108480808000220445" + "0d042004200136020c2004411836020020002004360204200041063a0000200420" + "083602100c030b20022d00784106470d010b200228027c2001108f808080002104" + "200041063a0000200020043602040c010b20002002290378370300200041106a20" + "0241f8006a41106a290300370300200041086a200241f8006a41086a2903003703" + "000b20024180036a2480808080000f0b000b7001027f024002402000417c6a2802" + "002202417871220341044108200241037122021b20016a490d0002402002450d00" + "2003200141276a4b0d020b200010a5808080000f0b41c9c5c08000412e41f8c5c0" + "800010a680808000000b4188c6c08000412e41b8c6c0800010a680808000000be6" + "0301057f02400240024002400240024020022003490d0041012104410021052003" + "4101480d04200120036a21060240200341034b0d000340200620014d0d06200641" + "7f6a22062d0000410a470d000c050b0b024041808284082006417c6a2800002207" + "418a94a8d000736b20077241808182847871418081828478460d00034020062001" + "4d0d062006417f6a22062d0000410a470d000c050b0b200320064103716b210720" + "034109490d0103400240024020074108480d004180828408200120076a22064178" + "6a2802002208418a94a8d000736b20087241808182847871418081828478460d01" + "0b200120076a21060c040b200741786a210741808284082006417c6a2802002208" + "418a94a8d000736b20087241808182847871418081828478460d000c030b0b2003" + "20024188bcc0800010b180808000000b200120076a21060340200620014d0d0320" + "06417f6a22062d0000410a470d000c020b0b0340200620014d0d022006417f6a22" + "062d0000410a470d000b0b200620016b41016a220520024b0d010b024020012005" + "6a20014d0d0041002106200521070340200620012d0000410a466a210620014101" + "6a21012007417f6a22070d000b200641016a21040b200020043602002000200320" + "056b3602040f0b200520024198bcc0800010b180808000000bc12502087f017e02" + "400240024002400240024002400240200041f4014b0d0041002802e4d2c0800022" + "0141102000410b6a41f803712000410b491b220241037622037622004103710d01" + "200241002802ecd2c080004d0d0720000d0241002802e8d2c0800022000d030c07" + "0b2000410b6a2203417871210241002802e8d2c080002204450d06411f21050240" + "200041f4ffff074b0d002002410620034108766722006b7641017120004101746b" + "413e6a21050b410020026b21030240200541027441cccfc080006a28020022010d" + "0041002100410021060c040b4100210020024100411920054101766b2005411f46" + "1b74210741002106034002402001220128020441787122082002490d0020082002" + "6b220820034f0d00200821032001210620080d004100210320012106200121000c" + "060b200128021422082000200820012007411d764104716a41106a280200220147" + "1b200020081b2100200741017421072001450d040c000b0b024002402000417f73" + "41017120036a2207410374220041dcd0c080006a2202200041e4d0c080006a2802" + "0022032802082206460d002006200236020c200220063602080c010b4100200141" + "7e200777713602e4d2c080000b20032000410372360204200320006a2200200028" + "0204410172360204200341086a0f0b024002402000200374410220037422004100" + "20006b7271682208410374220341dcd0c080006a2206200341e4d0c080006a2802" + "0022002802082207460d002007200636020c200620073602080c010b4100200141" + "7e200877713602e4d2c080000b20002002410372360204200020026a2207200320" + "026b2202410172360204200020036a2002360200024041002802ecd2c080002201" + "450d00200141787141dcd0c080006a210641002802f4d2c0800021030240024041" + "002802e4d2c08000220841012001410376742201710d00410020082001723602e4" + "d2c08000200621010c010b200628020821010b200620033602082001200336020c" + "2003200636020c200320013602080b410020073602f4d2c08000410020023602ec" + "d2c08000200041086a0f0b20006841027441cccfc080006a280200220628020441" + "787120026b2103200621010240024003400240200628021022000d002006280214" + "22000d0020012802182105024002400240200128020c22002001470d0020014114" + "4110200128021422001b6a28020022060d01410021000c020b2001280208220620" + "0036020c200020063602080c010b200141146a200141106a20001b210703402007" + "21082006220041146a200041106a200028021422061b210720004114411020061b" + "6a28020022060d000b200841003602000b2005450d030240200128021c41027441" + "cccfc080006a22062802002001460d0020054110411420052802102001461b6a20" + "003602002000450d040c030b2006200036020020000d02410041002802e8d2c080" + "00417e200128021c77713602e8d2c080000c030b200028020441787120026b2206" + "2003200620034922061b21032000200120061b2101200021060c000b0b20002005" + "360218024020012802102206450d0020002006360210200620003602180b200128" + "02142206450d0020002006360214200620003602180b0240024002402003411049" + "0d0020012002410372360204200120026a22022003410172360204200220036a20" + "0336020041002802ecd2c080002207450d01200741787141dcd0c080006a210641" + "002802f4d2c0800021000240024041002802e4d2c0800022084101200741037674" + "2207710d00410020082007723602e4d2c08000200621070c010b20062802082107" + "0b200620003602082007200036020c2000200636020c200020073602080c010b20" + "01200320026a2200410372360204200120006a220020002802044101723602040c" + "010b410020023602f4d2c08000410020033602ecd2c080000b200141086a0f0b02" + "4020002006720d004100210641022005742200410020006b722004712200450d03" + "20006841027441cccfc080006a28020021000b2000450d010b0340200020062000" + "280204417871220120026b220820034922051b2104200120024921072008200320" + "051b21080240200028021022010d00200028021421010b2006200420071b210620" + "03200820071b21032001210020010d000b0b2006450d00024041002802ecd2c080" + "0022002002490d002003200020026b4f0d010b2006280218210502400240024020" + "0628020c22002006470d00200641144110200628021422001b6a28020022010d01" + "410021000c020b20062802082201200036020c200020013602080c010b20064114" + "6a200641106a20001b21070340200721082001220041146a200041106a20002802" + "1422011b210720004114411020011b6a28020022010d000b200841003602000b02" + "402005450d0002400240200628021c41027441cccfc080006a2201280200200646" + "0d0020054110411420052802102006461b6a20003602002000450d020c010b2001" + "200036020020000d00410041002802e8d2c08000417e200628021c77713602e8d2" + "c080000c010b20002005360218024020062802102201450d002000200136021020" + "0120003602180b20062802142201450d0020002001360214200120003602180b02" + "40024020034110490d0020062002410372360204200620026a2200200341017236" + "0204200020036a200336020002402003418002490d002000200310d7808080000c" + "020b200341f8017141dcd0c080006a21020240024041002802e4d2c08000220141" + "012003410376742203710d00410020012003723602e4d2c08000200221030c010b" + "200228020821030b200220003602082003200036020c2000200236020c20002003" + "3602080c010b2006200320026a2200410372360204200620006a22002000280204" + "4101723602040b200641086a0f0b024002400240024002400240024041002802ec" + "d2c08000220020024f0d00024041002802f0d2c08000220020024b0d0041002100" + "200241af80046a220641107640002203417f4622070d0720034110742201450d07" + "410041002802fcd2c08000410020064180807c7120071b22086a22003602fcd2c0" + "800041004100280280d3c0800022032000200320004b1b360280d3c08000024002" + "40024041002802f8d2c080002203450d0041ccd0c0800021000340200028020022" + "06200028020422076a2001460d02200028020822000d000c030b0b024002404100" + "280288d3c080002200450d00200020014d0d010b41002001360288d3c080000b41" + "0041ff1f36028cd3c08000410020083602d0d0c08000410020013602ccd0c08000" + "410041dcd0c080003602e8d0c08000410041e4d0c080003602f0d0c08000410041" + "dcd0c080003602e4d0c08000410041ecd0c080003602f8d0c08000410041e4d0c0" + "80003602ecd0c08000410041f4d0c08000360280d1c08000410041ecd0c0800036" + "02f4d0c08000410041fcd0c08000360288d1c08000410041f4d0c080003602fcd0" + "c0800041004184d1c08000360290d1c08000410041fcd0c08000360284d1c08000" + "4100418cd1c08000360298d1c0800041004184d1c0800036028cd1c08000410041" + "94d1c080003602a0d1c080004100418cd1c08000360294d1c08000410041003602" + "d8d0c080004100419cd1c080003602a8d1c0800041004194d1c0800036029cd1c0" + "80004100419cd1c080003602a4d1c08000410041a4d1c080003602b0d1c0800041" + "0041a4d1c080003602acd1c08000410041acd1c080003602b8d1c08000410041ac" + "d1c080003602b4d1c08000410041b4d1c080003602c0d1c08000410041b4d1c080" + "003602bcd1c08000410041bcd1c080003602c8d1c08000410041bcd1c080003602" + "c4d1c08000410041c4d1c080003602d0d1c08000410041c4d1c080003602ccd1c0" + "8000410041ccd1c080003602d8d1c08000410041ccd1c080003602d4d1c0800041" + "0041d4d1c080003602e0d1c08000410041d4d1c080003602dcd1c08000410041dc" + "d1c080003602e8d1c08000410041e4d1c080003602f0d1c08000410041dcd1c080" + "003602e4d1c08000410041ecd1c080003602f8d1c08000410041e4d1c080003602" + "ecd1c08000410041f4d1c08000360280d2c08000410041ecd1c080003602f4d1c0" + "8000410041fcd1c08000360288d2c08000410041f4d1c080003602fcd1c0800041" + "004184d2c08000360290d2c08000410041fcd1c08000360284d2c080004100418c" + "d2c08000360298d2c0800041004184d2c0800036028cd2c0800041004194d2c080" + "003602a0d2c080004100418cd2c08000360294d2c080004100419cd2c080003602" + "a8d2c0800041004194d2c0800036029cd2c08000410041a4d2c080003602b0d2c0" + "80004100419cd2c080003602a4d2c08000410041acd2c080003602b8d2c0800041" + "0041a4d2c080003602acd2c08000410041b4d2c080003602c0d2c08000410041ac" + "d2c080003602b4d2c08000410041bcd2c080003602c8d2c08000410041b4d2c080" + "003602bcd2c08000410041c4d2c080003602d0d2c08000410041bcd2c080003602" + "c4d2c08000410041ccd2c080003602d8d2c08000410041c4d2c080003602ccd2c0" + "8000410041d4d2c080003602e0d2c08000410041ccd2c080003602d4d2c0800041" + "0020013602f8d2c08000410041d4d2c080003602dcd2c080004100200841586a22" + "003602f0d2c0800020012000410172360204200120006a41283602044100418080" + "8001360284d3c080000c080b200320014f0d00200620034b0d00200028020c450d" + "030b41004100280288d3c080002200200120002001491b360288d3c08000200120" + "086a210641ccd0c0800021000240024002400340200028020022072006460d0120" + "0028020822000d000c020b0b200028020c450d010b41ccd0c08000210002400340" + "02402000280200220620034b0d002003200620002802046a2206490d020b200028" + "020821000c000b0b410020013602f8d2c080004100200841586a22003602f0d2c0" + "800020012000410172360204200120006a412836020441004180808001360284d3" + "c080002003200641606a41787141786a22002000200341106a491b2207411b3602" + "0441002902ccd0c080002109200741106a41002902d4d0c0800037020020072009" + "370208410020083602d0d0c08000410020013602ccd0c080004100200741086a36" + "02d4d0c08000410041003602d8d0c080002007411c6a2100034020004107360200" + "200041046a22002006490d000b20072003460d0720072007280204417e71360204" + "2003200720036b22004101723602042007200036020002402000418002490d0020" + "03200010d7808080000c080b200041f8017141dcd0c080006a2106024002404100" + "2802e4d2c08000220141012000410376742200710d00410020012000723602e4d2" + "c08000200621000c010b200628020821000b200620033602082000200336020c20" + "03200636020c200320003602080c070b200020013602002000200028020420086a" + "360204200120024103723602042007410f6a41787141786a2206200120026a2200" + "6b2103200641002802f8d2c08000460d03200641002802f4d2c08000460d040240" + "200628020422024103714101470d0020062002417871220210a880808000200220" + "036a2103200620026a220628020421020b20062002417e71360204200020034101" + "72360204200020036a200336020002402003418002490d002000200310d7808080" + "000c060b200341f8017141dcd0c080006a21020240024041002802e4d2c0800022" + "0641012003410376742203710d00410020062003723602e4d2c08000200221030c" + "010b200228020821030b200220003602082003200036020c2000200236020c2000" + "20033602080c050b4100200020026b22033602f0d2c08000410041002802f8d2c0" + "8000220020026a22063602f8d2c080002006200341017236020420002002410372" + "360204200041086a21000c060b41002802f4d2c08000210302400240200020026b" + "2206410f4b0d00410041003602f4d2c08000410041003602ecd2c0800020032000" + "410372360204200320006a220020002802044101723602040c010b410020063602" + "ecd2c080004100200320026a22013602f4d2c08000200120064101723602042003" + "20006a2006360200200320024103723602040b200341086a0f0b2000200720086a" + "360204410041002802f8d2c080002200410f6a417871220341786a22063602f8d2" + "c080004100200020036b41002802f0d2c0800020086a22036a41086a22013602f0" + "d2c0800020062001410172360204200020036a4128360204410041808080013602" + "84d3c080000c030b410020003602f8d2c08000410041002802f0d2c0800020036a" + "22033602f0d2c08000200020034101723602040c010b410020003602f4d2c08000" + "410041002802ecd2c0800020036a22033602ecd2c0800020002003410172360204" + "200020036a20033602000b200141086a0f0b4100210041002802f0d2c080002203" + "20024d0d004100200320026b22033602f0d2c08000410041002802f8d2c0800022" + "0020026a22063602f8d2c080002006200341017236020420002002410372360204" + "200041086a0f0b20000b6801017f024002400240024020002d00000e0503030301" + "02000b200041046a109b808080000c020b20002802042201450d01200028020820" + "011082808080000f0b200041046a10918080800020002802042201450d00200028" + "0208200141186c1082808080000f0b0ba20201087f23808080800041106b220324" + "80808080002000280214220420002802102205200420054b1b2106200028020c21" + "0702400240024002400340024020020d00410021040c050b20062004460d012000" + "200441016a22083602142002417f6a2102200720046a210920012d0000210a2008" + "2104200141016a2101200a20092d0000460d000b200341086a2007200520081083" + "8080800041002d00c0cfc080001a200328020c2101200328020821024114108480" + "8080002204450d01200441093602000c020b200320072005200610838080800041" + "002d00c0cfc080001a200328020421012003280200210241141084808080002204" + "450d00200441053602000c010b000b2004200236020c200420013602100b200341" + "106a24808080800020040b970202027f027e23808080800041106b220424808080" + "8000024002400240024002400240024002402001280214220520012802104f0d00" + "200128020c20056a2d00002205412e460d01200541c500460d02200541e500460d" + "020b2002450d02420121060c050b20042001200220034100108880808000200428" + "02000d020c030b200420012002200341001089808080002004280200450d022000" + "2004280204360208200042033703000c040b420021060240420020037d22074200" + "590d0042022106200721030c030b2003babd428080808080808080807f8421030c" + "020b20002004280204360208200042033703000c020b2004290308210342002106" + "0b20002003370308200020063703000b200441106a2480808080000bfa0301097f" + "23808080800041106b220524808080800020012001280214220641016a22073602" + "140240024002402007200128021022084f0d00200720086b2109200128020c210a" + "410021060240024003400240200a20076a2d0000220b41506a220c41ff0171220d" + "410a490d00024020060d002005200a20082008200741016a220720082007491b10" + "838080800041002d00c0cfc080001a200528020421062005280200210c41141084" + "808080002207450d072007200c36020c2007410d36020020002007360204200041" + "01360200200720063602100c060b200620046a2107200b41207241e500470d0320" + "0020012002200320071089808080000c050b024020034298b3e6cc99b3e6cc1958" + "0d0020034299b3e6cc99b3e6cc19520d02200d41054b0d020b2001200741016a22" + "073602142006417f6a21062003420a7e200cad42ff01837c210320072008470d00" + "0b200920046a21070c010b2000200120022003200620046a108a808080000c020b" + "20002001200220032007108b808080000c010b200541086a200128020c20082008" + "200641026a220720082007491b10838080800041002d00c0cfc080001a20052802" + "0c21062005280208210c41141084808080002207450d012007200c36020c200741" + "053602002000200736020420004101360200200720063602100b200541106a2480" + "808080000f0b000bb80401077f23808080800041106b2205248080808000410121" + "0620012001280214220741016a220836021402402008200128021022094f0d0041" + "01210602400240200128020c20086a2d000041556a0e03010200020b410021060b" + "2001200741026a22083602140b200128020c210a02400240024002400240024002" + "40200820094f0d002001200841016a2207360214200a20086a2d000041506a41ff" + "01712208410a4f0d010240200720094f0d000340200a20076a2d000041506a41ff" + "0171220b410a4f0d012001200741016a22073602140240200841cb99b3e6004c0d" + "00200841cc99b3e600470d07200b41074b0d070b2008410a6c200b6a2108200920" + "07470d000b0b20060d02200420086b2207411f7541808080807873200720084100" + "4a2007200448731b21070c030b200541086a200a2009200810838080800041002d" + "00c0cfc080001a200528020c21012005280208210841141084808080002207450d" + "042007200836020c20074105360200200020073602042000410136020020072001" + "3602100c050b2005200a2009200710838080800041002d00c0cfc080001a200528" + "020421012005280200210841141084808080002207450d032007200836020c2007" + "410d3602002000200736020420004101360200200720013602100c040b20042008" + "6a2207411f7541808080807873200720084100482007200448731b21070b200020" + "01200220032007108b808080000c020b2000200120022003502006108c80808000" + "0c010b000b200541106a2480808080000b7f01047f024002402001280214220520" + "0128021022064f0d00200128020c210702400340200720056a2d0000220841506a" + "41ff017141094b0d012001200541016a220536021420062005470d000c020b0b20" + "0841207241e500460d010b20002001200220032004108b808080000f0b20002001" + "2002200320041089808080000b9f0304017f017c017f017c23808080800041106b" + "22052480808080002003ba2106024002400240024002400240024020042004411f" + "7522077320076b220741b502490d0003402006440000000000000000610d062004" + "417f4a0d02200644a0c8eb85f3cce17fa32106200441b4026a22042004411f7522" + "077320076b220741b4024b0d000b0b200741037441f0a6c080006a2b0300210820" + "04417f4a0d0120062008a321060c040b2005200128020c20012802102001280214" + "10838080800041002d00c0cfc080001a2005280204210720052802002101411410" + "84808080002204450d022004200136020c2004410e360200200020043602042004" + "20073602100c010b20062008a222069944000000000000f07f620d02200541086a" + "200128020c2001280210200128021410838080800041002d00c0cfc080001a2005" + "28020c21072005280208210141141084808080002204450d012004200136020c20" + "04410e36020020002004360204200420073602100b410121040c020b000b200020" + "0620069a20021b390308410021040b20002004360200200541106a248080808000" + "0b840201027f23808080800041106b220524808080800002400240024002402004" + "450d002003450d010b20012802142204200128021022034f0d01200128020c2106" + "0340200620046a2d000041506a41ff0171410a4f0d022001200441016a22043602" + "1420032004470d000c020b0b200541086a200128020c2001280210200128021410" + "838080800041002d00c0cfc080001a200528020c21012005280208210302404114" + "1084808080002204450d002004200336020c2004410e3602002000200436020420" + "042001360210410121040c020b000b200044000000000000000044000000000000" + "008020021b390308410021040b20002004360200200541106a2480808080000b95" + "0502067f017e23808080800041306b2203248080808000200128020c2104024002" + "40024002400240024020012802142205200128021022064f0d002001200541016a" + "2207360214200420056a2d000022084130470d020240200720064f0d0020042007" + "6a2d000041506a41ff0171410a490d020b20002001200242001087808080000c05" + "0b200341186a20042006200510838080800041002d00c0cfc080001a200328021c" + "21072003280218210441141084808080002201450d022001200436020c20014105" + "3602002000200136020820004203370300200120073602100c040b200341086a20" + "0420062006200541026a220120062001491b10838080800041002d00c0cfc08000" + "1a200328020c21072003280208210441141084808080002201450d012001200436" + "020c2001410d3602002000200136020820004203370300200120073602100c030b" + "02402008414f6a41ff01714109490d00200341106a200420062007108380808000" + "41002d00c0cfc080001a2003280214210720032802102104411410848080800022" + "01450d012001200436020c2001410d360200200020013602082000420337030020" + "0120073602100c030b200841506aad42ff01832109200720064f0d010340200420" + "076a2d000041506a220541ff01712208410a4f0d020240024020094299b3e6cc99" + "b3e6cc19540d0020094299b3e6cc99b3e6cc19520d01200841054b0d010b200120" + "0741016a22073602142009420a7e2005ad42ff01837c210920062007470d010c03" + "0b0b200341206a200120022009108e808080000240024020032802200d00200020" + "032b0328390308420021090c010b20002003280224360208420321090b20002009" + "3703000c020b000b20002001200220091087808080000b200341306a2480808080" + "000bbd0101057f410021040240024020012802102205200128021422064d0d0020" + "0641016a2107200520066b2108200128020c20066a210541002104034002402005" + "20046a2d0000220641506a41ff0171410a490d002006412e460d030240200641c5" + "00460d00200641e500470d030b200020012002200320041089808080000f0b2001" + "200720046a3602142008200441016a2204470d000b200821040b20002001200220" + "032004108b808080000f0b200020012002200320041088808080000bc80101047f" + "23808080800041206b2202248080808000024002400240200028020c450d002000" + "21010c010b200241106a41086a2203200041086a28020036020020022000290200" + "370310200241086a200128020c2001280210200128021410838080800041002d00" + "c0cfc080001a200228020c21042002280208210541141084808080002201450d01" + "200120022903103702002001200536020c20012004360210200141086a20032802" + "00360200200041141082808080000b200241206a24808080800020010f0b000b59" + "01017f23808080800041106b2201248080808000200141086a2000200028020041" + "014108411810d480808000024020012802082200418180808078460d0020002001" + "28020c109580808000000b200141106a2480808080000b950101027f0240200028" + "02082201450d00200028020441046a2100034002400240024002402000417c6a2d" + "00000e050303030102000b2000109b808080000c020b20002802002202450d0120" + "0041046a28020020021082808080000c010b200010918080800020002802002202" + "450d00200041046a280200200241186c1082808080000b200041186a2100200141" + "7f6a22010d000b0b0b970101047f024002400240200028020022002802000e0200" + "01020b20002802082201450d01200028020420011082808080000c010b20002d00" + "044103470d00200028020822012802002102024020012802042203280200220445" + "0d002002200411808080800080808080000b024020032802042203450d00200220" + "031082808080000b2001410c1082808080000b200041141082808080000b9b0d02" + "097f017e23808080800041306b2203248080808000024002400240024002400240" + "0240024002400340024002402001280208220420012802042205460d0002400240" + "0240200420054f0d002001280200220620046a2d000022074122460d01200741dc" + "00460d0120074120490d012006200441016a22086a21094100200520086b417871" + "220a6b210703402009210b024020070d002001200a20086a360208200110c88080" + "800020012802042105200128020821070c040b200741086a2107200b41086a2109" + "200b290000220c42a2c48891a2c48891228542fffdfbf7efdfbfff7e7c200c42e0" + "bffffefdfbf7ef5f7c84200c42dcb8f1e2c58b97aedc008542fffdfbf7efdfbfff" + "7e7c84200c427f858342808182848890a0c0807f83220c500d000b2001200b2006" + "6b200c7aa74103766a22073602080c020b2004200541a8bcc0800010ac80808000" + "0c080b200421070b20072005470d01200521040b200341086a2001280200200420" + "0410838080800041002d00c0cfc080001a200328020c210b200328020821094114" + "1084808080002207450d052007200936020c200741043602002000200736020420" + "0041023602002007200b3602100c0a0b024020072005490d002007200541b8bcc0" + "800010ac80808000000b02402001280200220b20076a2d0000220941dc00460d00" + "024020094122470d002002280208450d0520072004490d072002200b20046a2007" + "20046b10c9808080004101210b2001200741016a360208200341286a2001200228" + "0204200228020810ca8080800020032802282207450d032000200328022c360208" + "0c040b2001200741016a2207360208200341106a200b2005200710838080800041" + "002d00c0cfc080001a2003280214210b2003280210210941141084808080002207" + "450d052007200936020c2007411036020020002007360204200041023602002007" + "200b3602100c0a0b024020072004490d002002200b20046a200720046b10c98080" + "80002001200741016a2209360208024020092005490d00200341206a200b200520" + "0910838080800041002d00c0cfc080001a2003280224210b200328022021094114" + "1084808080002207450d06200741043602000c090b2001200741026a2204360208" + "02400240024002400240024002400240024002400240200b20096a2d0000220741" + "ed004a0d000240200741e1004a0d0020074122460d032007412f460d04200741dc" + "00470d020240200228020822072002280200470d00200210cb808080000b200220" + "0741016a360208200228020420076a41dc003a0000410021070c0b0b2007419e7f" + "6a0e050401010105010b200741927f6a0e080500000006000708000b200341186a" + "200b2005200410838080800041002d00c0cfc080001a200328021c210b20032802" + "18210941141084808080002207450d0e2007410c3602000c110b02402002280208" + "22072002280200470d00200210cb808080000b2002200741016a36020820022802" + "0420076a41223a0000410021070c070b0240200228020822072002280200470d00" + "200210cb808080000b2002200741016a360208200228020420076a412f3a000041" + "0021070c060b0240200228020822072002280200470d00200210cb808080000b20" + "02200741016a360208200228020420076a41083a0000410021070c050b02402002" + "28020822072002280200470d00200210cb808080000b2002200741016a36020820" + "0228020420076a410c3a0000410021070c040b0240200228020822072002280200" + "470d00200210cb808080000b2002200741016a360208200228020420076a410a3a" + "0000410021070c030b0240200228020822072002280200470d00200210cb808080" + "000b2002200741016a360208200228020420076a410d3a0000410021070c020b02" + "40200228020822072002280200470d00200210cb808080000b2002200741016a36" + "0208200228020420076a41093a0000410021070c010b2001200210cc8080800021" + "070b2007450d010c090b0b2004200741e8bcc0800010b780808000000b4102210b" + "200328022c21070b2000200b360200200020073602040c060b20072004490d0220" + "01200741016a360208200341286a2001200b20046a200720046b10ca8080800002" + "40024020032802282207450d002000200328022c3602084100210b0c010b410221" + "0b200328022c21070b2000200b360200200020073602040c050b000b2004200741" + "c8bcc0800010b780808000000b2004200741d8bcc0800010b780808000000b2007" + "200936020c2007200b3602100b20004102360200200020073602040b200341306a" + "2480808080000b7901027f410021030240024020024100480d00024020020d0041" + "002103410121040c020b41002d00c0cfc080001a20022103200210848080800022" + "040d01410121030b20032002109580808000000b20042001200210df8080800021" + "012000200236020c2000200136020820002003360204200041033a00000b100002" + "4020000d0010a3808080000b000b870102017c017e02400240024020012802000e" + "03000102000b20004202370308200020012b0308220239031020002002bd42ffff" + "ffffffffffffff00834280808080808080f8ff00534101743a00000f0b20004200" + "370308200041023a0000200020012903083703100f0b200041023a000020002001" + "290308220337031020002003423f883703080bb40701077f23808080800041306b" + "22022480808080002001280200220328020c210402400240024002402003280214" + "2205200341106a28020022064f0d000340200420056a2d0000220741776a220841" + "174b0d024101200874419380800471450d022003200541016a2205360214200620" + "05470d000b200621050b41012108200241286a200420062006200541016a220520" + "062005491b10838080800041002d00c0cfc080001a200228022c21062002280228" + "210341141084808080002205450d022005200336020c2005410336020020002005" + "360204200520063602100c010b0240200741fd00470d0041002108200041003a00" + "010c010b02400240024020012d00040d00200541016a21052007412c470d012003" + "20053602140240200520064f0d00034002400240024002400240200420056a2d00" + "002208410c4a0d00200841776a41024f0d010c040b0240200841606a0e03040102" + "000b2008410d460d03200841fd00460d020b41012108200241086a200420062006" + "200541016a220520062005491b10838080800041002d00c0cfc080001a20022802" + "0c21062002280208210341141084808080002205450d092005200336020c200541" + "1136020020002005360204200520063602100c080b200041013a0001410021080c" + "070b41012108200241186a200420062006200541016a220520062005491b108380" + "80800041002d00c0cfc080001a200228021c210620022802182103411410848080" + "80002205450d072005200336020c20054115360200200020053602042005200636" + "02100c060b2003200541016a220536021420062005470d000b200621050b410121" + "08200241106a200420062006200541016a220520062005491b1083808080004100" + "2d00c0cfc080001a20022802142106200228021021034114108480808000220545" + "0d042005200336020c2005410536020020002005360204200520063602100c030b" + "41002108200141003a0004024020074122460d002002200420062006200541016a" + "220520062005491b10838080800041002d00c0cfc080001a200228020421082002" + "280200210641141084808080002205450d042005200636020c2005411136020020" + "002005360204200520083602100c020b200041013a00010c020b200241206a2004" + "20062006200520062005491b10838080800041002d00c0cfc080001a2002280224" + "21082002280220210641141084808080002205450d022005200636020c20054108" + "36020020002005360204200520083602100b410121080b200020083a0000200241" + "306a2480808080000f0b000b7201027f410021030240024020024100480d000240" + "20020d0041002103410121040c020b41002d00c0cfc080001a2002210320021084" + "8080800022040d01410121030b20032002109580808000000b20042001200210df" + "8080800021012000200236020820002001360204200020033602000bdc0201067f" + "23808080800041106b22022480808080002001280200220328020c210402400240" + "02400240024020032802142201200341106a28020022054f0d000340200420016a" + "2d0000220641776a220741174b0d024101200774419380800471450d0220032001" + "41016a220136021420052001470d000b200521010b200241086a20042005200520" + "0141016a220120052001491b10838080800041002d00c0cfc080001a200228020c" + "21072002280208210541141084808080002201450d03200141033602000c010b02" + "402006413a470d002003200141016a360214200020031081808080000c020b2002" + "200420052005200141016a220120052001491b10838080800041002d00c0cfc080" + "001a200228020421072002280200210541141084808080002201450d0220014106" + "3602000b2001200536020c20002001360204200041063a0000200120073602100b" + "200241106a2480808080000f0b000be411020b7f027e23808080800041c0016b22" + "042480808080000240024002400240024002400240024002400240024002400240" + "20012802002205450d002002280208210620022802042107200128020421080240" + "03402005418c026a210920052f019203220a410c6c210b417f210c024002400340" + "0240200b0d00200a210c0c020b2009280208210d2009280204210e200c41016a21" + "0c200b41746a210b2009410c6a2109417f2007200e2006200d2006200d491b10dc" + "80808000220e2006200d6b200e1b220d410047200d4100481b220d4101460d000b" + "200d41ff0171450d010b2008450d022008417f6a21082005200c4102746a419803" + "6a28020021050c010b0b20022802002209450d0c200720091082808080000c0c0b" + "2002290204220fa721092002280200220b418080808078470d03200921050c010b" + "2002290204220fa721052002280200220d418080808078470d010b2001210c0c09" + "0b41002d00c0cfc080001a4198031084808080002209450d02200941013b019203" + "20094100360288022009200f422088a7ad4220862005ad84370390022009200d36" + "028c02200142808080801037020420012009360200200920032903003703002009" + "41086a200341086a290300370300200941106a200341106a2903003703000c010b" + "200f422088a7ad4220862009ad84210f0240024002400240024020052f01920322" + "09410b490d00200441086a21084104210d200c4105490d03200c210d200c417b6a" + "0e020302010b2005418c026a220e200c410c6c6a210d02400240200c41016a2206" + "20094d0d00200d200f370204200d200b3602000c010b200e2006410c6c6a200d20" + "09200c6b220e410c6c10de808080001a200d200f370204200d200b360200200520" + "0641186c6a2005200c41186c6a200e41186c10de808080001a0b2005200c41186c" + "6a220d41106a200341106a290300370300200d2003290300370300200d41086a20" + "0341086a2903003703002005200941016a3b0192030c030b200c41796a210c2004" + "41f8006a21084106210d0c010b4100210c200441f8006a21084105210d0b41002d" + "00c0cfc080001a4198031084808080002209450d02200941003b01920320094100" + "360288022009200d417f7320052f01920322076a22063b01920320044188016a41" + "086a2005200d41186c6a220e41086a29030037030020044188016a41106a200e41" + "106a2903003703002004200e290300370388012006410c4f0d032007200d41016a" + "220e6b2006470d042005418c026a2202200d410c6c6a2207290204211020072802" + "0021072009418c026a2002200e410c6c6a2006410c6c10df808080001a20092005" + "200e41186c6a200641186c10df8080800021062005200d3b019203200441dc006a" + "410c6a20044190016a290300370200200441f0006a20044198016a290300370200" + "200420042903880137026020042005360208200420063602782008280200220d41" + "8c026a200c410c6c6a210602400240200d2f019203220e200c4b0d002006200f37" + "02042006200b3602000c010b2006410c6a2006200e200c6b2208410c6c10de8080" + "80001a2006200f3702042006200b360200200d200c41186c6a220b41186a200b20" + "0841186c10de808080001a0b200d200c41186c6a220b41106a200341106a290300" + "370300200b2003290300370300200b41086a200341086a290300370300200d200e" + "41016a3b0192032007418080808078460d00200441c4006a200441dc006a41086a" + "290200370200200441cc006a200441dc006a41106a290200370200200441306a41" + "246a200441dc006a41186a28020036020020042010370234200420073602302004" + "200429025c37023c024002400240200528028802220b0d004100210c0c010b2004" + "41306a4104722108200441b8016a210220044188016a4104722107200441b0016a" + "2103200441c0006a210e4100210c4100210603402006200c470d0820052f019003" + "210d200b2f019203410b490d02200641016a210602400240024002400240024002" + "40200d4105490d00200d417b6a0e020203010b2004410436028001200420063602" + "7c2004200b3602782003210b0c040b20044106360280012004200636027c200420" + "0b360278200d41796a210d0c020b20044105360280012004200636027c2004200b" + "36027820044188016a200441f8006a10c18080800020042802b001410520044130" + "6a200e200910c080808000200428028801210d200441086a2007412410df808080" + "001a0c030b20044105360280012004200636027c2004200b3602784100210d0b20" + "02210b0b20044188016a200441f8006a10c180808000200b280200200d20044130" + "6a200e200910c080808000200428028801210d200441086a2007412410df808080" + "001a0b20042802bc01210c20042802b801210920042802b401210620042802b001" + "2105200d418080808078460d032004200d3602302008200441086a412410df8080" + "80001a200528028802220b0d000b0b2001280200220b450d0741002d00c0cfc080" + "001a2001280204210641c803108480808000220d450d03200d200b36029803200d" + "41003b019203200d410036028802200b41003b019003200b200d36028802200120" + "0641016a3602042001200d3602002006200c470d08200d200429033037028c0220" + "0d41013b019203200d2004290340370300200d200936029c03200d4194026a2004" + "41306a41086a280200360200200d41086a200441c8006a290300370300200d4110" + "6a200441d0006a2903003703002009200d36028802200941013b0190030c010b20" + "0b200d200441306a200e200910c0808080000b2001200128020841016a3602080b" + "200041063a00000c070b000b2006410b41c89fc0800010b180808000000b41909f" + "c08000412841b89fc0800010a680808000000b41e89fc08000413541a0a0c08000" + "10a680808000000b41e49dc0800010a280808000000b41cf9ec08000413041809f" + "c0800010a680808000000b20002005200c41186c6a220929030037030020004110" + "6a200941106a220d290300370300200041086a200941086a220b29030037030020" + "092003290300370300200b200341086a290300370300200d200341106a29030037" + "03000b200441c0016a2480808080000be30501067f23808080800041306b220124" + "80808080004100210241002103024020002802002204450d002001200436021820" + "014100360214200120043602082001410036020420012000280204220336021c20" + "01200336020c20002802082103410121020b200120033602202001200236021020" + "01200236020002400240024003400240024002400240024020030d002001280200" + "450d0820012802082104200128020422030d0141002100200128020c2203450d06" + "034020042802980321042003417f6a22030d000c070b0b20012003417f6a360220" + "024020024101712203450d0020012802040d0020012802082103200128020c2200" + "450d03034020032802980321032000417f6a22000d000c040b0b2003450d012001" + "28020421030c030b200421000c050b41f8bac0800010a280808000000b20014200" + "3702082001200336020441012102200141013602000b2001280208210002402001" + "28020c220520032f019203490d0002400340200141246a2003200010bf80808000" + "20012802242203450d0120012802282100200128022c220520032f019203490d02" + "0c000b0b41b0a0c0800010a280808000000b200541016a21040240024020000d00" + "2001200436020c20014100360208200120033602040c010b200320044102746a41" + "98036a21040340200428020022064198036a21042000417f6a22000d000b200142" + "00370208200120063602042003450d040b024020032005410c6c6a418c026a2200" + "2802002204450d00200028020420041082808080000b0240024002400240200320" + "0541186c6a22032d00000e050303030102000b200341046a109b808080000c020b" + "20032802042200450d01200328020820001082808080000c010b200341046a1091" + "8080800020032802042200450d002003280208200041186c1082808080000b2001" + "28022021030c000b0b200421030b0340200141246a2003200010bf808080002001" + "2802242203450d01200128022821000c000b0b200141306a2480808080000b8905" + "03037f017e037f23808080800041f0006b22022480808080004100210302402000" + "2d0000220420012d0000470d00410121030240024002400240024020040e060500" + "01020304050b20002d000120012d00014621030c040b4100210320002903082205" + "2001290308520d030240024002402005a70e03000102000b200029031020012903" + "105121030c050b200029031020012903105121030c040b20002b031020012b0310" + "6121030c030b41002103200028020c2204200128020c470d022000280208200128" + "0208200410dc808080004521030c020b41002103200028020c2206200128020c47" + "0d012001280208210420002802082100200641016a210103402001417f6a220145" + "21032001450d0220002004109c808080002106200441186a2104200041186a2100" + "20060d000c020b0b41002103200028020c2204200128020c470d00200241003602" + "6c2002420037026420024100360254200241003602442002410036023020024100" + "36022020022001280208220636025c200220012802042203360258200220063602" + "4c2002200336024820022000280208220636023820022000280204220136023420" + "0220063602282002200136022420022004410020031b3602602002200341004722" + "033602502002200336024020022004410020011b36023c20022001410047220336" + "022c2002200336021c200241c0006a21070340200241106a2002411c6a109d8080" + "80004101210320022802102201450d0120022802142104200241086a2007109d80" + "80800020022802082200450d0141002103200128020822062000280208470d0120" + "0228020c210820012802042000280204200610dc808080000d0120042008109c80" + "8080000d000b0b200241f0006a24808080800020030bed0201057f024002400240" + "200128022022020d00410021020c010b20012002417f6a36022002400240024020" + "012802004101470d0020012802040d01200128020821030240200128020c220245" + "0d00034020032802980321032002417f6a22020d000b0b20014200370208200120" + "03360204200141013602000c020b4198bbc0800010a280808000000b2001280204" + "21030b2001280208210202400240200128020c220420032f0192034f0d00200321" + "050c010b03402003280288022205450d03200241016a210220032f019003210420" + "052103200420052f0192034f0d000b0b200441016a21030240024020020d002005" + "21060c010b200520034102746a4198036a21030340200328020022064198036a21" + "032002417f6a22020d000b410021030b2001200336020c20014100360208200120" + "063602042005200441186c6a210320052004410c6c6a418c026a21020b20002003" + "360204200020023602000f0b4188bbc0800010a280808000000b4901017f410021" + "010240024020004100480d00024020000d00410121010c020b41002d00c0cfc080" + "001a200010848080800022010d01410121010b20012000109580808000000b2001" + "0b9b0301037f23808080800041d0006b2204248080808000200441386a20002001" + "108080808000024002400240024020042d00384106460d00200441086a41106a20" + "0441386a41106a2205290300370300200441086a41086a200441386a41086a2206" + "29030037030020042004290338370308200441386a200220031080808080002004" + "2d00384106460d01200441206a41106a2005290300370300200441206a41086a20" + "0629030037030020042004290338370320200441086a10a0808080002205450d02" + "200441206a10a0808080002206450d0320052006109c808080002105200441206a" + "108580808000200441086a10858080800002402003450d00200220031082808080" + "000b02402001450d00200020011082808080000b200441d0006a24808080800020" + "050f0b2004200428023c360220419080c08000412b200441206a418080c0800041" + "d080c0800010a180808000000b2004200428023c360220419080c08000412b2004" + "41206a418080c0800041e080c0800010a180808000000b41f880c0800010a28080" + "8000000b418881c0800010a280808000000bea0101077f41002101024020002d00" + "004105470d0020002802042202450d002000280208210303402002418c026a2100" + "20022f0192032204410c6c2105417f2106024002400340024020050d0020042106" + "0c020b2000280208210120002802042107200641016a2106200541746a21052000" + "410c6a2100417f41f080c0800020072001410720014107491b10dc808080002207" + "410720016b20071b220141004720014100481b22014101460d000b200141ff0171" + "450d010b024020030d0041000f0b2003417f6a2103200220064102746a4198036a" + "28020021020c010b0b2002200641186c6a21010b20010b8f0101017f2380808080" + "0041c0006b22052480808080002005200136020c20052000360208200520033602" + "14200520023602102005410236021c200541dc82c0800036021820054202370224" + "2005418180808000ad422086200541106aad843703382005418280808000ad4220" + "86200541086aad843703302005200541306a360220200541186a200410a4808080" + "00000b130041ea81c08000412b200010a680808000000b4701017f238080808000" + "41206b2200248080808000200041003602182000410136020c200041ac81c08000" + "36020820004204370210200041086a41c881c0800010a480808000000b5601017f" + "23808080800041206b2202248080808000200241106a200041106a290200370300" + "200241086a200041086a290200370300200241013b011c20022001360218200220" + "00290200370300200210ae80808000000bbe0601057f200041786a22012000417c" + "6a280200220241787122006a21030240024020024101710d002002410271450d01" + "2001280200220220006a21000240200120026b220141002802f4d2c08000470d00" + "20032802044103714103470d01410020003602ecd2c0800020032003280204417e" + "7136020420012000410172360204200320003602000f0b2001200210a880808000" + "0b024002400240024002400240200328020422024102710d00200341002802f8d2" + "c08000460d02200341002802f4d2c08000460d0320032002417871220210a88080" + "80002001200220006a2200410172360204200120006a2000360200200141002802" + "f4d2c08000470d01410020003602ecd2c080000f0b20032002417e713602042001" + "2000410172360204200120006a20003602000b2000418002490d022001200010d7" + "80808000410021014100410028028cd3c08000417f6a220036028cd3c080002000" + "0d04024041002802d4d0c080002200450d00410021010340200141016a21012000" + "28020822000d000b0b4100200141ff1f200141ff1f4b1b36028cd3c080000f0b41" + "0020013602f8d2c08000410041002802f0d2c0800020006a22003602f0d2c08000" + "200120004101723602040240200141002802f4d2c08000470d00410041003602ec" + "d2c08000410041003602f4d2c080000b20004100280284d3c0800022044d0d0341" + "002802f8d2c080002200450d034100210241002802f0d2c0800022054129490d02" + "41ccd0c080002101034002402001280200220320004b0d00200020032001280204" + "6a490d040b200128020821010c000b0b410020013602f4d2c08000410041002802" + "ecd2c0800020006a22003602ecd2c0800020012000410172360204200120006a20" + "003602000f0b200041f8017141dcd0c080006a21030240024041002802e4d2c080" + "00220241012000410376742200710d00410020022000723602e4d2c08000200321" + "000c010b200328020821000b200320013602082000200136020c2001200336020c" + "200120003602080f0b024041002802d4d0c080002201450d004100210203402002" + "41016a2102200128020822010d000b0b4100200241ff1f200241ff1f4b1b36028c" + "d3c08000200520044d0d004100417f360284d3c080000b0b4d01017f2380808080" + "0041206b2203248080808000200341003602102003410136020420034204370208" + "2003200136021c200320003602182003200341186a3602002003200210a4808080" + "00000b840601057f0240024002402000417c6a2203280200220441787122054104" + "4108200441037122061b20016a490d0002402006450d002005200141276a4b0d02" + "0b41102002410b6a4178712002410b491b210102400240024020060d0020014180" + "02490d0120052001410472490d01200520016b418180084f0d010c020b20004178" + "6a220720056a21060240024002400240200520014f0d00200641002802f8d2c080" + "00460d03200641002802f4d2c08000460d02200628020422044102710d04200441" + "7871220420056a22052001490d042006200410a880808000200520016b22024110" + "490d0120032001200328020041017172410272360200200720016a220120024103" + "72360204200720056a220520052802044101723602042001200210a98080800020" + "000f0b200520016b2202410f4d0d04200320012004410171724102723602002007" + "20016a22052002410372360204200620062802044101723602042005200210a980" + "80800020000f0b20032005200328020041017172410272360200200720056a2202" + "200228020441017236020420000f0b41002802ecd2c0800020056a22052001490d" + "0102400240200520016b2202410f4b0d0020032004410171200572410272360200" + "200720056a2202200228020441017236020441002102410021010c010b20032001" + "200441017172410272360200200720016a22012002410172360204200720056a22" + "05200236020020052005280204417e713602040b410020013602f4d2c080004100" + "20023602ecd2c0800020000f0b41002802f0d2c0800020056a220520014b0d040b" + "0240200210848080800022050d0041000f0b20052000417c417820032802002201" + "4103711b20014178716a2201200220012002491b10df808080002102200010a580" + "808000200221000b20000f0b41c9c5c08000412e41f8c5c0800010a68080800000" + "0b4188c6c08000412e41b8c6c0800010a680808000000b20032001200441017172" + "410272360200200720016a2202200520016b2205410172360204410020053602f0" + "d2c08000410020023602f8d2c0800020000b820301047f200028020c2102024002" + "4002402001418002490d002000280218210302400240024020022000470d002000" + "41144110200028021422021b6a28020022010d01410021020c020b200028020822" + "01200236020c200220013602080c010b200041146a200041106a20021b21040340" + "200421052001220241146a200241106a200228021422011b210420024114411020" + "011b6a28020022010d000b200541003602000b2003450d020240200028021c4102" + "7441cccfc080006a22012802002000460d0020034110411420032802102000461b" + "6a20023602002002450d030c020b2001200236020020020d01410041002802e8d2" + "c08000417e200028021c77713602e8d2c080000c020b0240200220002802082204" + "460d002004200236020c200220043602080f0b410041002802e4d2c08000417e20" + "0141037677713602e4d2c080000f0b20022003360218024020002802102201450d" + "0020022001360210200120023602180b20002802142201450d0020022001360214" + "200120023602180f0b0ba00401027f200020016a21020240024020002802042203" + "4101710d002003410271450d012000280200220320016a21010240200020036b22" + "0041002802f4d2c08000470d0020022802044103714103470d01410020013602ec" + "d2c0800020022002280204417e7136020420002001410172360204200220013602" + "000c020b2000200310a8808080000b024002400240024020022802042203410271" + "0d00200241002802f8d2c08000460d02200241002802f4d2c08000460d03200220" + "03417871220310a8808080002000200320016a2201410172360204200020016a20" + "01360200200041002802f4d2c08000470d01410020013602ecd2c080000f0b2002" + "2003417e7136020420002001410172360204200020016a20013602000b02402001" + "418002490d002000200110d7808080000f0b200141f8017141dcd0c080006a2102" + "0240024041002802e4d2c08000220341012001410376742201710d004100200320" + "01723602e4d2c08000200221010c010b200228020821010b200220003602082001" + "200036020c2000200236020c200020013602080f0b410020003602f8d2c0800041" + "0041002802f0d2c0800020016a22013602f0d2c080002000200141017236020420" + "0041002802f4d2c08000470d01410041003602ecd2c08000410041003602f4d2c0" + "80000f0b410020003602f4d2c08000410041002802ecd2c0800020016a22013602" + "ecd2c0800020002001410172360204200020016a20013602000f0b0b7902017f01" + "7e23808080800041306b2203248080808000200320003602002003200136020420" + "03410236020c200341c485c08000360208200342023702142003418380808000ad" + "4220862204200341046aad84370328200320042003ad843703202003200341206a" + "360210200341086a200210a480808000000b110020003502004101200110ad8080" + "80000b7902017f017e23808080800041306b220324808080800020032001360204" + "200320003602002003410236020c200341c882c080003602082003420237021420" + "03418380808000ad42208622042003ad8437032820032004200341046aad843703" + "202003200341206a360210200341086a200210a480808000000bec0203027f017e" + "037f23808080800041306b2203248080808000412721040240024020004290ce00" + "5a0d00200021050c010b412721040340200341096a20046a2206417c6a20004290" + "ce0080220542f0b1037e20007ca7220741ffff037141e4006e2208410174419283" + "c080006a2f00003b00002006417e6a2008419c7f6c20076a41ffff037141017441" + "9283c080006a2f00003b00002004417c6a2104200042ffc1d72f56210620052100" + "20060d000b0b02400240200542e300560d002005a721060c010b200341096a2004" + "417e6a22046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff03" + "71410174419283c080006a2f00003b00000b024002402006410a490d0020034109" + "6a2004417e6a22046a2006410174419283c080006a2f00003b00000c010b200341" + "096a2004417f6a22046a20064130723a00000b2002200141014100200341096a20" + "046a412720046b10af808080002104200341306a24808080800020040b5d01027f" + "23808080800041206b220124808080800020002802182102200141106a20004110" + "6a290200370300200141086a200041086a2902003703002001200036021c200120" + "0236021820012000290200370300200110d880808000000bcb0501077f02400240" + "20010d00200541016a2106200028021c2107412d21080c010b412b418080c40020" + "0028021c220741017122011b2108200120056a21060b0240024020074104710d00" + "410021020c010b0240024020030d00410021090c010b02402003410371220a0d00" + "0c010b41002109200221010340200920012c000041bf7f4a6a2109200141016a21" + "01200a417f6a220a0d000b0b200920066a21060b024020002802000d0002402000" + "28021422012000280218220920082002200310b080808000450d0041010f0b2001" + "20042005200928020c11818080800080808080000f0b0240024002400240200028" + "0204220120064b0d00200028021422012000280218220920082002200310b08080" + "8000450d0141010f0b2007410871450d0120002802102107200041303602102000" + "2d0020210b4101210c200041013a0020200028021422092000280218220a200820" + "02200310b0808080000d02200120066b41016a2101024003402001417f6a220145" + "0d0120094130200a2802101182808080008080808000450d000b41010f0b024020" + "0920042005200a28020c1181808080008080808000450d0041010f0b2000200b3a" + "00202000200736021041000f0b200120042005200928020c118180808000808080" + "8000210c0c010b200120066b210702400240024020002d002022010e0402000100" + "020b20072101410021070c010b20074101762101200741016a41017621070b2001" + "41016a210120002802102106200028021821092000280214210a02400340200141" + "7f6a2201450d01200a200620092802101182808080008080808000450d000b4101" + "0f0b4101210c200a200920082002200310b0808080000d00200a20042005200928" + "020c11818080800080808080000d00410021010340024020072001470d00200720" + "07490f0b200141016a2101200a200620092802101182808080008080808000450d" + "000b2001417f6a2007490f0b200c0b490002402002418080c400460d0020002002" + "20012802101182808080008080808000450d0041010f0b024020030d0041000f0b" + "200020032004200128020c11818080800080808080000b7902017f017e23808080" + "800041306b22032480808080002003200036020020032001360204200341023602" + "0c200341e485c08000360208200342023702142003418380808000ad4220862204" + "200341046aad84370328200320042003ad843703202003200341206a3602102003" + "41086a200210a480808000000bc20b010b7f200028020821030240024002400240" + "200028020022040d002003410171450d010b02402003410171450d00200120026a" + "210502400240200028020c22060d0041002107200121080c010b41002107410021" + "09200121080340200822032005460d020240024020032c00002208417f4c0d0020" + "0341016a21080c010b0240200841604f0d00200341026a21080c010b0240200841" + "704f0d00200341036a21080c010b200341046a21080b200820036b20076a210720" + "06200941016a2209470d000b0b20082005460d00024020082c00002203417f4a0d" + "0020034160491a0b024002402007450d000240200720024f0d00200120076a2c00" + "0041bf7f4a0d01410021030c020b20072002460d00410021030c010b200121030b" + "2007200220031b21022003200120031b21010b024020040d002000280214200120" + "02200028021828020c11818080800080808080000f0b2000280204210a02402002" + "4110490d0020022001200141036a417c7122076b22096a220b4103712104410021" + "0641002103024020012007460d004100210302402009417c4b0d00410021034100" + "210503402003200120056a22082c000041bf7f4a6a200841016a2c000041bf7f4a" + "6a200841026a2c000041bf7f4a6a200841036a2c000041bf7f4a6a210320054104" + "6a22050d000b0b200121080340200320082c000041bf7f4a6a2103200841016a21" + "08200941016a22090d000b0b02402004450d002007200b417c716a22082c000041" + "bf7f4a210620044101460d00200620082c000141bf7f4a6a210620044102460d00" + "200620082c000241bf7f4a6a21060b200b4102762105200620036a210603402007" + "21042005450d04200541c001200541c001491b220b410371210c200b410274210d" + "41002108024020054104490d002004200d41f007716a2109410021082004210303" + "40200328020c2207417f7341077620074106767241818284087120032802082207" + "417f7341077620074106767241818284087120032802042207417f734107762007" + "4106767241818284087120032802002207417f7341077620074106767241818284" + "087120086a6a6a6a2108200341106a22032009470d000b0b2005200b6b21052004" + "200d6a2107200841087641ff81fc0771200841ff81fc07716a418180046c411076" + "20066a2106200c450d000b2004200b41fc01714102746a22082802002203417f73" + "4107762003410676724181828408712103200c4101460d0220082802042207417f" + "7341077620074106767241818284087120036a2103200c4102460d022008280208" + "2208417f7341077620084106767241818284087120036a21030c020b024020020d" + "00410021060c030b2002410371210802400240200241044f0d0041002106410021" + "090c010b41002106200121032002410c71220921070340200620032c000041bf7f" + "4a6a200341016a2c000041bf7f4a6a200341026a2c000041bf7f4a6a200341036a" + "2c000041bf7f4a6a2106200341046a21032007417c6a22070d000b0b2008450d02" + "200120096a21030340200620032c000041bf7f4a6a2106200341016a2103200841" + "7f6a22080d000c030b0b200028021420012002200028021828020c118180808000" + "80808080000f0b200341087641ff811c71200341ff81fc07716a418180046c4110" + "7620066a21060b02400240200a20064d0d00200a20066b21054100210302400240" + "024020002d00200e0402000102020b20052103410021050c010b20054101762103" + "200541016a41017621050b200341016a2103200028021021092000280218210820" + "00280214210703402003417f6a2203450d02200720092008280210118280808000" + "8080808000450d000b41010f0b200028021420012002200028021828020c118180" + "80800080808080000f0b0240200720012002200828020c11818080800080808080" + "00450d0041010f0b410021030340024020052003470d0020052005490f0b200341" + "016a21032007200920082802101182808080008080808000450d000b2003417f6a" + "2005490b140020012000280200200028020410b2808080000b1c00200028020020" + "01200028020428020c11828080800080808080000bbf05010a7f23808080800041" + "306b2203248080808000200341033a002c2003412036021c410021042003410036" + "02282003200136022420032000360220200341003602142003410036020c024002" + "40024002400240200228021022050d00200228020c2200450d0120022802082101" + "200041037421062000417f6a41ffffffff017141016a2104200228020021000340" + "0240200041046a2802002207450d00200328022020002802002007200328022428" + "020c11818080800080808080000d040b20012802002003410c6a20012802041182" + "8080800080808080000d03200141086a2101200041086a2100200641786a22060d" + "000c020b0b20022802142201450d00200141057421082001417f6a41ffffff3f71" + "41016a210420022802082109200228020021004100210603400240200041046a28" + "02002201450d00200328022020002802002001200328022428020c118180808000" + "80808080000d030b2003200520066a220141106a28020036021c20032001411c6a" + "2d00003a002c2003200141186a2802003602282001410c6a28020021074100210a" + "4100210b024002400240200141086a2802000e03010002010b2007410374210c41" + "00210b2009200c6a220c2802040d01200c28020021070b4101210b0b2003200736" + "02102003200b36020c200141046a280200210702400240024020012802000e0301" + "0002010b2007410374210b2009200b6a220b2802040d01200b28020021070b4101" + "210a0b200320073602182003200a3602142009200141146a2802004103746a2201" + "2802002003410c6a200128020411828080800080808080000d02200041086a2100" + "2008200641206a2206470d000b0b200420022802044f0d01200328022020022802" + "0020044103746a22012802002001280204200328022428020c1181808080008080" + "808000450d010b410121010c010b410021010b200341306a24808080800020010b" + "d70201057f2380808080004180016b220224808080800002400240024002402001" + "28021c22034110710d0020034120710d012000ad4101200110ad8080800021000c" + "030b41ff00210303402002200322046a22052000410f712203413072200341d700" + "6a2003410a491b3a00002004417f6a210320004110492106200041047621002006" + "450d000c020b0b41ff00210303402002200322046a22052000410f712203413072" + "200341376a2003410a491b3a00002004417f6a2103200041104921062000410476" + "21002006450d000b02402004418101490d002004418001418083c0800010aa8080" + "8000000b20014101419083c0800041022005418101200441016a6b10af80808000" + "21000c010b02402004418101490d002004418001418083c0800010aa8080800000" + "0b20014101419083c0800041022005418101200441016a6b10af8080800021000b" + "20024180016a24808080800020000b7902017f017e23808080800041306b220324" + "808080800020032000360200200320013602042003410236020c2003419886c080" + "00360208200342023702142003418380808000ad4220862204200341046aad8437" + "0328200320042003ad843703202003200341206a360210200341086a200210a480" + "808000000b920c01057f23808080800041206b2203248080808000024002400240" + "024002400240024002400240024002400240024002400240024020010e28060101" + "010101010101020401010301010101010101010101010101010101010101010901" + "01010107000b200141dc00460d040b2001418006490d0b20024101710d060c0b0b" + "20004180043b010a20004200370102200041dce8013b01000c0c0b20004180043b" + "010a20004200370102200041dce4013b01000c0b0b20004180043b010a20004200" + "370102200041dcdc013b01000c0a0b20004180043b010a20004200370102200041" + "dcb8013b01000c090b20004180043b010a20004200370102200041dce0003b0100" + "0c080b200241800271450d0620004180043b010a20004200370102200041dcce00" + "3b01000c070b200141aa9d044b410474220220024108722202200241027441a896" + "c080006a280200410b742001410b7422024b1b2204200441047222042004410274" + "41a896c080006a280200410b7420024b1b220420044102722204200441027441a8" + "96c080006a280200410b7420024b1b2204200441016a2204200441027441a896c0" + "80006a280200410b7420024b1b2204200441016a2204200441027441a896c08000" + "6a280200410b7420024b1b220441027441a896c080006a280200410b7422052002" + "4620052002496a20046a220441204b0d01200441027441a896c080006a22052802" + "00411576210241d70521060240024020044120460d002005280204411576210620" + "040d00410021040c010b200441027441a496c080006a28020041ffffff00712104" + "0b024020062002417f736a450d00200120046b2107200241d705200241d7054b1b" + "21052006417f6a210641002104034020052002460d042004200241ac97c080006a" + "2d00006a220420074b0d012006200241016a2202470d000b200621020b20024101" + "71450d04200341003a000a200341003b01082003200141147641da81c080006a2d" + "00003a000b20032001410476410f7141da81c080006a2d00003a000f2003200141" + "0876410f7141da81c080006a2d00003a000e20032001410c76410f7141da81c080" + "006a2d00003a000d20032001411076410f7141da81c080006a2d00003a000c2003" + "41086a20014101726741027622026a220441fb003a00002004417f6a41f5003a00" + "00200341086a2002417e6a22026a41dc003a0000200341086a41086a2204200141" + "0f7141da81c080006a2d00003a00002000410a3a000b200020023a000a20002003" + "290208370200200341fd003a0011200041086a20042f01003b01000c060b200241" + "808004710d020c040b20044121418896c0800010ac80808000000b200541d70541" + "9896c0800010ac80808000000b20004180043b010a20004200370102200041dcc4" + "003b01000c020b024020014120490d00200141ff00490d01024020014180800449" + "0d0002402001418080084f0d00200141ec8ac08000412c41c48bc0800041c40141" + "888dc0800041c20310b980808000450d020c030b200141feffff0071419ef00a46" + "0d01200141e0ffff007141e0cd0a460d01200141c091756a41794b0d01200141d0" + "e2746a41714b0d0120014190a8746a41704b0d012001418090746a41dd6c4b0d01" + "2001418080746a419d744b0d01200141b0d9736a417a4b0d0120014180fe476a41" + "afc5544b0d01200141f083384f0d010c020b200141ca90c080004128419a91c080" + "0041a00241ba93c0800041ad0210b9808080000d010b200341003a001620034100" + "3b01142003200141147641da81c080006a2d00003a001720032001410476410f71" + "41da81c080006a2d00003a001b20032001410876410f7141da81c080006a2d0000" + "3a001a20032001410c76410f7141da81c080006a2d00003a001920032001411076" + "410f7141da81c080006a2d00003a0018200341146a20014101726741027622026a" + "220441fb003a00002004417f6a41f5003a0000200341146a2002417e6a22026a41" + "dc003a0000200341146a41086a22042001410f7141da81c080006a2d00003a0000" + "2000410a3a000b200020023a000a20002003290214370200200341fd003a001d20" + "0041086a20042f01003b01000c010b2000200136020420004180013a00000b2003" + "41206a2480808080000be90201067f200120024101746a210720004180fe037141" + "0876210841002109200041ff0171210a02400240024002400340200141026a210b" + "200920012d000122026a210c024020012d000022012008460d00200120084b0d04" + "200c2109200b2101200b2007470d010c040b200c2009490d01200c20044b0d0220" + "0320096a21010340024020020d00200c2109200b2101200b2007470d020c050b20" + "02417f6a210220012d00002109200141016a21012009200a470d000b0b41002102" + "0c030b2009200c41dc8ac0800010b780808000000b200c200441dc8ac0800010b1" + "80808000000b200041ffff03712109200520066a210c410121020340200541016a" + "210a0240024020052c000022014100480d00200a21050c010b0240200a200c460d" + "00200141ff007141087420052d0001722101200541026a21050c010b41cc8ac080" + "0010a280808000000b200920016b22094100480d01200241017321022005200c47" + "0d000b0b20024101710b13002000200120022003200410bb80808000000bd10902" + "057f017e23808080800041f0006b22052480808080002005200336020c20052002" + "3602080240024002400240024002400240024002402001418102490d0002402000" + "2c00800241bf7f4c0d00410321060c030b20002c00ff0141bf7f4c0d0141022106" + "0c020b200520013602142005200036021041002106410121070c020b20002c00fe" + "0141bf7f4a21060b2000200641fd016a22066a2c000041bf7f4c0d012005200636" + "0214200520003602104105210641a888c0800021070b2005200636021c20052007" + "3602180240200220014b22060d00200320014b0d00200220034b0d020240200245" + "0d00200220014f0d0020032002200020026a2c000041bf7f4a1b21030b20052003" + "360220200121020240200320014f0d00200341016a220641002003417d6a220220" + "0220034b1b2202490d04024020062002460d00200620026b21080240200020036a" + "2c000041bf7f4c0d002008417f6a21070c010b20022003460d000240200020066a" + "2206417e6a22032c000041bf7f4c0d002008417e6a21070c010b200020026a2209" + "2003460d0002402006417d6a22032c000041bf7f4c0d002008417d6a21070c010b" + "20092003460d0002402006417c6a22032c000041bf7f4c0d002008417c6a21070c" + "010b20092003460d002008417b6a21070b200720026a21020b02402002450d0002" + "40200220014f0d00200020026a2c000041bf7f4a0d010c070b20022001470d060b" + "20022001460d040240024002400240200020026a22032c00002201417f4a0d0020" + "032d0001413f7121002001411f7121062001415f4b0d0120064106742000722101" + "0c020b2005200141ff0171360224410121010c020b200041067420032d0002413f" + "717221000240200141704f0d0020002006410c747221010c010b20004106742003" + "2d0003413f71722006411274418080f00071722201418080c400460d060b200520" + "01360224024020014180014f0d00410121010c010b024020014180104f0d004102" + "21010c010b41034104200141808004491b21010b20052002360228200520012002" + "6a36022c20054105360234200541b089c080003602302005420537023c20054182" + "80808000ad422086220a200541186aad843703682005200a200541106aad843703" + "602005418480808000ad422086200541286aad843703582005418580808000ad42" + "2086200541246aad843703502005418380808000ad422086200541206aad843703" + "482005200541c8006a360238200541306a200410a480808000000b200520022003" + "20061b36022820054103360234200541f089c080003602302005420337023c2005" + "418280808000ad422086220a200541186aad843703582005200a200541106aad84" + "3703502005418380808000ad422086200541286aad843703482005200541c8006a" + "360238200541306a200410a480808000000b2000200141002006200410ba808080" + "00000b20054104360234200541d088c080003602302005420437023c2005418280" + "808000ad422086220a200541186aad843703602005200a200541106aad84370358" + "2005418380808000ad422086220a2005410c6aad843703502005200a200541086a" + "ad843703482005200541c8006a360238200541306a200410a480808000000b2002" + "2006419c8ac0800010b780808000000b200410a280808000000b20002001200220" + "01200410ba80808000000b4d01017f4101210202402000280200200110b6808080" + "000d00200128021441d881c080004102200128021828020c118180808000808080" + "80000d002000280204200110b68080800021020b20020bc40101047f2380808080" + "0041106b2202248080808000410121030240200128021422044127200128021822" + "05280210220111828080800080808080000d00200241046a200028020041810210" + "b8808080000240024020022d0004418001470d0020042002280208200111828080" + "80008080808000450d010c020b2004200241046a20022d000e22006a20022d000f" + "20006b200528020c11818080800080808080000d010b2004412720011182808080" + "00808080800021030b200241106a24808080800020030b2701017f200028020022" + "002000411f7522027320026bad2000417f73411f76200110ad808080000b500103" + "7f200121032002210402402001280288022205450d00200241016a210320012f01" + "900321040b200141c80341980320021b1082808080002000200536020020002004" + "ad4220862003ad843702040bec0201047f2000418c026a22052001410c6c6a2106" + "02400240200141016a220720002f01920322084d0d002006200229020037020020" + "0641086a200241086a2802003602000c010b20052007410c6c6a2006200820016b" + "2205410c6c10de808080001a200641086a200241086a2802003602002006200229" + "02003702002000200741186c6a2000200141186c6a200541186c10de808080001a" + "0b200841016a21022000200141186c6a22062003290300370300200641106a2003" + "41106a290300370300200641086a200341086a29030037030020004198036a2103" + "0240200141026a2205200841026a22064f0d00200320054102746a200320074102" + "746a200820016b41027410de808080001a0b200320074102746a20043602002000" + "20023b0192030240200720064f0d00200841016a2103200141027420006a419c03" + "6a2107034020072802002208200141016a22013b01900320082000360288022007" + "41046a210720032001470d000b0b0bed04010a7f23808080800041d0006b220224" + "808080800041002d00c0cfc080001a200128020022032f01920321040240024002" + "400240024041c8031084808080002205450d002005410036028802200520012802" + "082206417f7320032f01920322076a22083b019203200241286a41086a2003418c" + "026a22092006410c6c6a220a41086a280200360200200241386a41086a20032006" + "41186c6a220b41086a290300370300200241386a41106a200b41106a2903003703" + "002002200a2902003703282002200b2903003703382008410c4f0d012007200641" + "016a220b6b2008470d022005418c026a2009200b410c6c6a2008410c6c10df8080" + "80001a20052003200b41186c6a200841186c10df80808000210b200320063b0192" + "03200241086a200241286a41086a280200360200200241186a200241386a41086a" + "290300370300200241206a200241c8006a29030037030020022002290328370300" + "20022002290338370310200b2f019203220541016a21082005410c4f0d03200420" + "066b220a2008470d04200b4198036a200320064102746a419c036a200a41027410" + "df80808000210a200128020421014100210602400340200a20064102746a280200" + "220820063b0190032008200b36028802200620054f0d01200620062005496a2206" + "20054d0d000b0b2000200136022c2000200336022820002002412810df80808000" + "220620013602342006200b360230200241d0006a2480808080000f0b000b200841" + "0b41c89fc0800010b180808000000b41909fc08000412841b89fc0800010a68080" + "8000000b2008410c41d89fc0800010b180808000000b41909fc08000412841b89f" + "c0800010a680808000000bbb0b01037f2380808080004180016b22022480808080" + "00200028020021002002410036022c2002428080808010370224200241033a0050" + "200241203602402002410036024c200241c0a0c080003602482002410036023820" + "0241003602302002200241246a3602440240024002400240024002400240024002" + "400240024002400240024002400240024002400240024002400240024002400240" + "02400240024020002802000e1918000102030405060708090a0b0c0d0e0f101112" + "1314151617180b024002400240024020002d00040e0400010203000b2002200028" + "020836025441002d00c0cfc080001a41141084808080002203450d1c200341106a" + "41002800f4ccc08000360000200341086a41002900ecccc0800037000020034100" + "2900e4ccc08000370000200241143602602002200336025c200241143602582002" + "410336026c200241ccccc08000360268200242023702742002418680808000ad42" + "2086200241d4006aad843703102002418780808000ad422086200241d8006aad84" + "3703082002200241086a360270200241246a41c0a0c08000200241e8006a10b580" + "8080002103024020022802582204450d00200228025c20041082808080000b2003" + "0d1d0c1b0b20002d000521032002410136026c200241c8c6c08000360268200242" + "013702742002418280808000ad422086200241086aad8437035820022003410274" + "220341f8ccc080006a28020036020c20022003419ccec080006a28020036020820" + "02200241d8006a360270200241246a41c0a0c08000200241e8006a10b580808000" + "0d1c0c1a0b200241306a20002802082203280200200328020410b2808080000d1b" + "0c190b20002802082203280200200241306a200328020428021011828080800080" + "808080000d1a0c180b200241246a4181a2c08000411810c4808080000d190c170b" + "200241246a4199a2c08000411b10c4808080000d180c160b200241246a41b4a2c0" + "8000411a10c4808080000d170c150b200241246a41cea2c08000411910c4808080" + "000d160c140b200241246a41e7a2c08000410c10c4808080000d150c130b200241" + "246a41f3a2c08000411310c4808080000d140c120b200241246a4186a3c0800041" + "1310c4808080000d130c110b200241246a4199a3c08000410e10c4808080000d12" + "0c100b200241246a41a7a3c08000410e10c4808080000d110c0f0b200241246a41" + "b5a3c08000410c10c4808080000d100c0e0b200241246a41c1a3c08000410e10c4" + "808080000d0f0c0d0b200241246a41cfa3c08000410e10c4808080000d0e0c0c0b" + "200241246a41dda3c08000411310c4808080000d0d0c0b0b200241246a41f0a3c0" + "8000411a10c4808080000d0c0c0a0b200241246a418aa4c08000413e10c4808080" + "000d0b0c090b200241246a41c8a4c08000411410c4808080000d0a0c080b200241" + "246a41dca4c08000413410c4808080000d090c070b200241246a4190a5c0800041" + "2c10c4808080000d080c060b200241246a41bca5c08000412410c4808080000d07" + "0c050b200241246a41e0a5c08000410e10c4808080000d060c040b200241246a41" + "eea5c08000411310c4808080000d050c030b200241246a4181a6c08000411c10c4" + "808080000d040c020b200241246a419da6c08000411810c480808000450d010c03" + "0b200241246a2000280204200028020810c4808080000d020b200241d8006a4108" + "6a200241246a41086a280200360200200220022902243703582002418380808000" + "36027c2002418380808000360274200241888080800036026c2002410436020c20" + "0241d0a6c08000360208200242033702142002200041106a36027820022000410c" + "6a3602702002200241d8006a3602682002200241e8006a36021020012802142001" + "280218200241086a10b5808080002100024020022802582201450d00200228025c" + "20011082808080000b20024180016a24808080800020000f0b000b41e8a0c08000" + "4137200241e8006a41d8a0c0800041eca1c0800010a180808000000b1400200120" + "00280204200028020810b2808080000b4b01017f02402000280200200028020822" + "036b20024f0d0020002003200210cf80808000200028020821030b200028020420" + "036a2001200210df808080001a2000200320026a36020841000bd507010d7f2380" + "8080800041106b2202248080808000200028020821032000280204210441012105" + "024020012802142206412220012802182207280210220811828080800080808080" + "000d000240024020030d0041002103410021000c010b410021094100210a200421" + "0b2003210c024002400340200b200c6a210d4100210002400340200b20006a220e" + "2d0000220141817f6a41ff017141a101490d0120014122460d01200141dc00460d" + "01200c200041016a2200470d000b200a200c6a210a0c030b02400240200e2c0000" + "2201417f4c0d00200e41016a210b200141ff017121010c010b200e2d0001413f71" + "210b2001411f71210c02402001415f4b0d00200c410674200b722101200e41026a" + "210b0c010b200b410674200e2d0002413f7172210b0240200141704f0d00200b20" + "0c410c74722101200e41036a210b0c010b200b410674200e2d0003413f7172200c" + "411274418080f00071722101200e41046a210b0b2000200a6a2100200241046a20" + "014181800410b8808080000240024020022d0004418001460d0020022d000f2002" + "2d000e6b41ff01714101460d0020002009490d0302402009450d00024020092003" + "4f0d00200420096a2c000041bf7f4a0d010c050b20092003470d040b0240200045" + "0d000240200020034f0d00200420006a2c000041bf7f4c0d050c010b2000200347" + "0d040b2006200420096a200020096b200728020c220e1181808080008080808000" + "0d010240024020022d0004418001470d0020062002280208200811828080800080" + "80808000450d010c030b2006200241046a20022d000e220c6a20022d000f200c6b" + "200e11818080800080808080000d020b0240024020014180014f0d004101210e0c" + "010b024020014180104f0d004102210e0c010b41034104200141808004491b210e" + "0b200e20006a21090b0240024020014180014f0d00410121010c010b0240200141" + "80104f0d00410221010c010b41034104200141808004491b21010b200120006a21" + "0a200d200b6b220c0d010c030b0b410121050c030b200420032009200041f084c0" + "800010ba80808000000b02402009200a4b0d004100210002402009450d00024020" + "0920034f0d0020092100200420096a2c000041bf7f4c0d020c010b200321002009" + "2003470d010b0240200a0d00410021030c020b0240200a20034f0d002000210920" + "04200a6a2c000041bf7f4c0d01200a21030c020b20002109200a2003460d010b20" + "0420032009200a418085c0800010ba80808000000b2006200420006a200320006b" + "200728020c11818080800080808080000d00200641222008118280808000808080" + "800021050b200241106a24808080800020050b2200200128021441fca1c0800041" + "05200128021828020c11818080800080808080000b1e01017f0240200028020022" + "01450d00200028020420011082808080000b0b5301047f02402000280208220120" + "0028020422024f0d00200028020021030340200320016a2d000022044122460d01" + "200441dc00460d0120044120490d012000200141016a220136020820022001470d" + "000b0b0b4901017f02402000280200200028020822036b20024f0d002000200320" + "0210cf80808000200028020821030b200028020420036a2001200210df80808000" + "1a2000200320026a3602080bb10501077f23808080800041106b22042480808080" + "0002402003450d004100200341796a2205200520034b1b2106200241036a417c71" + "20026b21074100210503400240024002400240200220056a2d00002208c0220941" + "00480d00200720056b4103710d01200520064f0d020340200220056a2208280204" + "200828020072418081828478710d03200541086a22052006490d000c030b0b0240" + "024002400240024002400240200841a886c080006a2d0000417e6a0e0300010205" + "0b200541016a220520034f0d04200220056a2c000041bf7f4a0d040c050b200541" + "016a220a20034f0d032002200a6a2c0000210a02400240200841e001460d002008" + "41ed01460d012009411f6a41ff0171410c490d032009417e71416e470d05200a41" + "40480d040c050b200a41607141a07f460d030c040b200a419f7f4a0d030c020b20" + "0541016a220a20034f0d022002200a6a2c0000210a024002400240024020084190" + "7e6a0e050100000002000b2009410f6a41ff017141024b0d05200a4140480d020c" + "050b200a41f0006a41ff01714130490d010c040b200a418f7f4a0d030b20054102" + "6a220820034f0d02200220086a2c000041bf7f4a0d02200541036a220520034f0d" + "02200220056a2c000041bf7f4c0d030c020b200a41404e0d010b200541026a2205" + "20034f0d00200220056a2c000041bf7f4c0d010b200441086a2001280200200128" + "020420012802081083808080004100210241002d00c0cfc080001a200428020c21" + "0520042802082108024041141084808080002203450d002003200836020c200341" + "0f360200200320053602100c060b000b200541016a21050c020b200541016a2105" + "0c010b200520034f0d000340200220056a2c00004100480d012003200541016a22" + "05470d000c030b0b20052003490d000b0b20002002360200200020033602042004" + "41106a2480808080000b5901017f23808080800041106b22012480808080002001" + "41086a2000200028020041014101410110d4808080000240200128020822004181" + "80808078460d002000200128020c109580808000000b200141106a248080808000" + "0be20601057f23808080800041206b2202248080808000200241146a200010cd80" + "8080000240024020022f01140d0002400240024002400240024020022f01162203" + "4180f803714180b803460d0020034180c8006a41ffff03714180f803490d042002" + "41146a200010ce8080800020022d00140d0620022d001521042000200028020822" + "0541016a360208200441dc00470d03200241146a200010ce8080800020022d0014" + "0d0620022d001521042000200541026a360208200441f500470d02200241146a20" + "0010cd8080800020022f01140d0620022f011622044180c0006a41ffff03714180" + "f803490d0120034180d0006a41ffff0371410a7420044180c8006a41ffff037172" + "2205418080046a210302402001280200200128020822006b41034b0d0020012000" + "410410cf80808000200128020821000b2001200041046a36020820012802042000" + "6a2200200341127641f001723a0000200041036a2004413f71418001723a000020" + "002005410676413f71418001723a000220002003410c76413f71418001723a0001" + "410021000c070b200220002802002000280204200028020810838080800041002d" + "00c0cfc080001a200228020421012002280200210341141084808080002200450d" + "042000200336020c20004114360200200020013602100c060b200241086a200028" + "02002000280204200028020810838080800041002d00c0cfc080001a200228020c" + "21012002280208210341141084808080002200450d032000200336020c20004114" + "360200200020013602100c050b200241173602142000200241146a10d080808000" + "21000c040b200241173602142000200241146a10d08080800021000c030b024002" + "4002402003418001490d0002402001280200200128020822046b41034b0d002001" + "2004410410cf80808000200128020821040b200128020420046a21002003418010" + "4f0d0120034106764140722106410221050c020b02402001280208220020012802" + "00470d00200110cb808080000b2001200041016a360208200128020420006a2003" + "3a0000410021000c040b20002003410676413f71418001723a00012003410c7641" + "60722106410321050b200020063a00002001200420056a360208200020056a417f" + "6a2003413f71418001723a0000410021000c020b000b200228021821000b200241" + "206a24808080800020000b910301057f23808080800041106b2202248080808000" + "02400240024002402001280204220320012802082204490d000240200320046b41" + "034b0d0020012003360208200241086a2001280200200320031083808080004100" + "2d00c0cfc080001a200228020c2103200228020821044114108480808000220145" + "0d022001200436020c2001410436020020002001360204200120033602100c030b" + "2001200441046a220536020802402001280200220620046a22012d000141017441" + "88bdc080006a2f010020012d00004101744188c1c080006a2f010072c141087420" + "012d00024101744188c1c080006a2e01007220012d00034101744188bdc080006a" + "2e0100722201417f4a0d00200220062003200510838080800041002d00c0cfc080" + "001a200228020421032002280200210441141084808080002201450d0220012004" + "36020c2001410c36020020002001360204200120033602100c030b200020013b01" + "02410021010c030b2004200341f8bcc0800010aa808080000b000b410121010b20" + "0020013b0100200241106a2480808080000bb20101037f23808080800041106b22" + "022480808080000240024002402001280208220320012802042204490d00200241" + "086a20012802002004200310838080800041002d00c0cfc080001a200228020c21" + "032002280208210441141084808080002201450d022001200436020c2001410436" + "02002000200136020420012003360210410121010c010b2000200128020020036a" + "2d00003a0001410021010b200020013a0000200241106a2480808080000f0b000b" + "5601017f23808080800041106b2203248080808000200341086a20002001200241" + "01410110d480808000024020032802082202418180808078460d00200220032802" + "0c109580808000000b200341106a2480808080000b8c0101037f23808080800041" + "106b2202248080808000200241086a200028020020002802042000280208108380" + "80800041002d00c0cfc080001a200228020c210320022802082104024041141084" + "8080800022000d00000b2000200436020c20002001290200370200200020033602" + "10200041086a200141086a280200360200200241106a24808080800020000b1f00" + "024020012802040e020000000b20004188c5c08000200110b5808080000be30201" + "027f23808080800041106b22022480808080000240024002400240200141800149" + "0d002002410036020c2001418010490d0102402001418080044f0d002002200141" + "3f71418001723a000e20022001410c7641e001723a000c20022001410676413f71" + "418001723a000d410321010c030b20022001413f71418001723a000f2002200141" + "127641f001723a000c20022001410676413f71418001723a000e20022001410c76" + "413f71418001723a000d410421010c020b0240200028020822032000280200470d" + "00200010cb808080000b2000200341016a360208200028020420036a20013a0000" + "0c020b20022001413f71418001723a000d2002200141067641c001723a000c4102" + "21010b02402000280200200028020822036b20014f0d0020002003200110cf8080" + "8000200028020821030b200028020420036a2002410c6a200110df808080001a20" + "00200320016a3602080b200241106a24808080800041000b820101017f02400240" + "024002402003280204450d000240200328020822040d002002450d0341002d00c0" + "cfc080001a0c020b20032802002004200210a78080800021030c030b2002450d01" + "41002d00c0cfc080001a0b200210848080800021030c010b200121030b20002002" + "36020820002003200120031b36020420002003453602000b9f0202047f017e2380" + "8080800041206b2206248080808000024002400240200220036a220320024f0d00" + "410021020c010b41002102200420056a417f6a410020046b71ad41084104200541" + "01461b22072001280200220841017422092003200920034b1b2203200720034b1b" + "2207ad7e220a422088a70d00200aa7220941808080807820046b4b0d0102400240" + "20080d00410021020c010b2006200820056c36021c200620012802043602142004" + "21020b20062002360218200641086a20042009200641146a10d380808000024020" + "062802080d00200628020c21022001200736020020012002360204418180808078" + "21020c010b20062802102103200628020c21020c010b0b20002003360204200020" + "02360200200641206a2480808080000b0300000b0900200041003602000bc30201" + "047f411f21020240200141ffffff074b0d002001410620014108766722026b7641" + "017120024101746b413e6a21020b200042003702102000200236021c2002410274" + "41cccfc080006a2103024041002802e8d2c0800041012002742204710d00200320" + "00360200200020033602182000200036020c20002000360208410041002802e8d2" + "c080002004723602e8d2c080000f0b024002400240200328020022042802044178" + "712001470d00200421020c010b20014100411920024101766b2002411f461b7421" + "03034020042003411d764104716a41106a22052802002202450d02200341017421" + "032002210420022802044178712001470d000b0b20022802082203200036020c20" + "022000360208200041003602182000200236020c200020033602080f0b20052000" + "360200200020043602182000200036020c200020003602080b0b00200010d98080" + "8000000bb50101037f23808080800041106b2201248080808000200028020c2102" + "024002400240024020002802040e020001020b20020d0141012102410021030c02" + "0b20020d00200028020022022802042103200228020021020c010b200141808080" + "80783602002001200036020c2001418980808000200028021c22002d001c20002d" + "001d10da80808000000b20012003360204200120023602002001418a8080800020" + "0028021c22002d001c20002d001d10da80808000000b990101027f238080808000" + "41106b2204248080808000410041002802c8cfc08000220541016a3602c8cfc080" + "00024020054100480d000240024041002d0094d3c080000d0041004100280290d3" + "c0800041016a360290d3c0800041002802c4cfc08000417f4a0d010c020b200441" + "086a200020011183808080008080808000000b410041003a0094d3c08000200245" + "0d0010d580808000000b000b0c00200020012902003703000b4a01037f41002103" + "02402002450d000240034020002d0000220420012d00002205470d01200041016a" + "2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b2003" + "0bac0501087f0240024002400240200020016b20024f0d00200120026a21032000" + "20026a21040240200241104f0d00200021050c030b2004417c7121054100200441" + "037122066b210702402006450d00200120026a417f6a210803402004417f6a2204" + "20082d00003a00002008417f6a210820052004490d000b0b2005200220066b2209" + "417c7122066b21040240200320076a2207410371450d0020064101480d02200741" + "0374220841187121022007417c71220a417c6a2101410020086b4118712103200a" + "280200210803402005417c6a220520082003742001280200220820027672360200" + "2001417c6a210120042005490d000c030b0b20064101480d01200920016a417c6a" + "210103402005417c6a220520012802003602002001417c6a210120042005490d00" + "0c020b0b02400240200241104f0d00200021040c010b2000410020006b41037122" + "036a210502402003450d0020002104200121080340200420082d00003a00002008" + "41016a2108200441016a22042005490d000b0b2005200220036b2209417c712207" + "6a210402400240200120036a2206410371450d0020074101480d01200641037422" + "0841187121022006417c71220a41046a2101410020086b4118712103200a280200" + "21080340200520082002762001280200220820037472360200200141046a210120" + "0541046a22052004490d000c020b0b20074101480d002006210103402005200128" + "0200360200200141046a2101200541046a22052004490d000b0b20094103712102" + "200620076a21010b2002450d02200420026a21050340200420012d00003a000020" + "0141016a2101200441016a22042005490d000c030b0b20094103712201450d0120" + "07410020066b6a2103200420016b21050b2003417f6a210103402004417f6a2204" + "20012d00003a00002001417f6a210120052004490d000b0b20000b0e0020002001" + "200210dd808080000bc10201087f02400240200241104f0d00200021030c010b20" + "00410020006b41037122046a210502402004450d00200021032001210603402003" + "20062d00003a0000200641016a2106200341016a22032005490d000b0b20052002" + "20046b2207417c7122086a210302400240200120046a2209410371450d00200841" + "01480d012009410374220641187121022009417c71220a41046a2101410020066b" + "4118712104200a2802002106034020052006200276200128020022062004747236" + "0200200141046a2101200541046a22052003490d000c020b0b20084101480d0020" + "092101034020052001280200360200200141046a2101200541046a22052003490d" + "000b0b20074103712102200920086a21010b02402002450d00200320026a210503" + "40200320012d00003a0000200141016a2101200341016a22032005490d000b0b20" + "000b0bca4f0100418080c0000bc04f0b00000004000000040000000c0000006361" + "6c6c65642060526573756c743a3a756e77726170282960206f6e20616e20604572" + "72602076616c7565756c6c727565616c73657372632f6c69622e72730045001000" + "0a000000150000004b000000450010000a000000160000004b0000004163636f75" + "6e7400450010000a0000001700000033000000450010000a000000180000003300" + "00006361706163697479206f766572666c6f770000009800100011000000616c6c" + "6f632f7372632f7261775f7665632e7273b4001000140000001800000005000000" + "2e2e3031323334353637383961626364656663616c6c656420604f7074696f6e3a" + "3a756e77726170282960206f6e206120604e6f6e65602076616c7565696e646578" + "206f7574206f6620626f756e64733a20746865206c656e20697320206275742074" + "686520696e6465782069732000150110002000000035011000120000003a200000" + "01000000000000005801100002000000636f72652f7372632f666d742f6e756d2e" + "7273006c0110001300000066000000170000003078303030313032303330343035" + "303630373038303931303131313231333134313531363137313831393230323132" + "323233323432353236323732383239333033313332333333343335333633373338" + "333934303431343234333434343534363437343834393530353135323533353435" + "353536353735383539363036313632363336343635363636373638363937303731" + "373237333734373537363737373837393830383138323833383438353836383738" + "3838393930393139323933393439353936393739383939636f72652f7372632f66" + "6d742f6d6f642e72730000005a021000130000009b090000260000005a02100013" + "000000a40900001a00000072616e676520737461727420696e64657820206f7574" + "206f662072616e676520666f7220736c696365206f66206c656e67746820900210" + "0012000000a20210002200000072616e676520656e6420696e64657820d4021000" + "10000000a202100022000000736c69636520696e64657820737461727473206174" + "202062757420656e64732061742000f4021000160000000a0310000d0000000101" + "010101010101010101010101010101010101010101010101010101010101010101" + "010101010101010101010101010101010101010101010101010101010101010101" + "010101010101010101010101010101010101010101010101010101010101010101" + "010101010101010101010101010101010101010101010101010101000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000020202020202" + "020202020202020202020202020202020202020202020202030303030303030303" + "03030303030303040404040400000000000000000000005b2e2e2e5d626567696e" + "203c3d20656e642028203c3d2029207768656e20736c6963696e672060602d0410" + "000e0000003b041000040000003f041000100000004f0410000100000062797465" + "20696e64657820206973206e6f742061206368617220626f756e646172793b2069" + "7420697320696e7369646520202862797465732029206f66206000700410000b00" + "00007b04100026000000a104100008000000a9041000060000004f041000010000" + "00206973206f7574206f6620626f756e6473206f6620600000700410000b000000" + "d8041000160000004f04100001000000636f72652f7372632f7374722f6d6f642e" + "7273000805100013000000f00000002c000000636f72652f7372632f756e69636f" + "64652f7072696e7461626c652e72730000002c0510001d0000001a000000360000" + "002c0510001d0000000a0000002b00000000060101030104020507070208080902" + "0a050b020e041001110212051311140115021702190d1c051d081f0124016a046b" + "02af03b102bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004" + "f802fa03fb010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3" + "d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a454649" + "4a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66" + "698f92116f5fbfeeef5a62f4fcff53549a9b2e2f2728559da0a1a3a4a7a8adbabc" + "c4060b0c151d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c60420232526" + "2833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf" + "6e6fbe935e227b0503042d036603012f2e80821d03310f1c0424091e052b054404" + "0e2a80aa06240424042808340b4e43813709160a08183b45390363080930160521" + "031b05014038044b052f040a070907402027040c0936033a051a07040c07504937" + "330d33072e080a8126524b2b082a161a261c1417094e042409440d19070a064808" + "2709750b423e2a063b050a0651060105100305808b621e48080a80a65e22450b0a" + "060d133a060a362c041780b93c64530c48090a46451b4808530d49070a80f6460a" + "1d03474937030e080a0639070a813619073b031c56010f320d839b66750b80c48a" + "4c630d843010168faa8247a1b98239072a045c06260a460a28051382b05b654b04" + "39071140050b020e97f80884d62a09a2e781330f011d060e0408818c89046b050d" + "0309071092604709743c80f60a73087015467a140c140c57091980878147038542" + "0f1584501f060680d52b053e2101702d031a040281401f113a050181d02a82e680" + "f7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae" + "381d0d2c040907020e06809a83d80411030d0377045f060c04010f0c0438080a06" + "2808224e81540c1d03090736080e040907090780cb250a84060001030505060602" + "0706080709110a1c0b190c1a0d100e0c0f0410031212130916011704180119031a" + "071b011c021f1620032b032d0b2e01300431023201a702a902aa04ab08fa02fb05" + "fd02fe03ff09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2" + "848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e" + "92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b" + "9dc9cecf0d11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d1145" + "4964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cfdadb4898bdcdc6cecf49" + "4e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f" + "6e6f1c1d5f7d7eaeaf7fbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1" + "f572738f747596262e2fa7afb7bfc7cfd7df9a00409798308f1fd2d4ceff4e4f5a" + "5b07080f10272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f" + "2282df048244081b04061181ac0e80ab051f09811b03190801042f043404070301" + "070607110a500f1207550703041c0a090308030703020303030c0405030b06010e" + "15054e071b0757070206170c500443032d03010411060f0c3a041d255f206d046a" + "2580c80582b0031a0682fd03590716091809140c140c6a060a061a0659072b0546" + "0a2c040c040103310b2c041a060b0380ac060a062f314d0380a4083c030f033c07" + "38082b0582ff1118082f112d03210f210f808c048297190b158894052f053b0702" + "0e180980be22740c80d61a81100580df0bf29e033709815c1480b80880cb050a18" + "3b030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c" + "170431a10481da26070c050580a61081f50701202a064c04808d0480be031b030f" + "0d636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273" + "00e70a1000200000005000000028000000e70a1000200000005c00000016000000" + "0003000083042000910560005d13a0001217201f0c20601fef2ca02b2a30202c6f" + "a6e02c02a8602d1efb602e00fe20369eff6036fd01e136010a2137240de137ab0e" + "61392f18a139301c6148f31ea14c40346150f06aa1514f6f21529dbca15200cf61" + "5365d1a15300da215400e0e155aee26157ece42159d0e8a1592000ee59f0017f5a" + "00700007002d0101010201020101480b30151001650702060202010423011e1b5b" + "0b3a09090118040109010301052b033c082a180120370101010408040103070a02" + "1d013a0101010204080109010a021a010202390104020402020303011e0203010b" + "0239010405010204011402160601013a0101020104080107030a021e013b010101" + "0c01090128010301370101030503010407020b021d013a01020102010301050207" + "020b021c02390201010204080109010a021d014801040102030101080151010207" + "0c08620102090b0749021b0101010101370e01050102050b012409016604010601" + "0202021902040310040d01020206010f01000300031d021e021e02400201070801" + "020b09012d030101750222017603040209010603db0202013a0101070101010102" + "08060a0201301f310430070101050128090c022004020201033801010203010103" + "3a0802029803010d0107040106010302c6400001c32100038d0160200006690200" + "04010a200250020001030104011902050197021a120d012608190b2e0330010204" + "020227014306020202020c0108012f01330101030202050201012a020801ee0102" + "01040100010010101000020001e201950500030102050428030401a50200040002" + "5003460b31047b01360f290102020a033104020207013d03240501083e010c0234" + "090a0402015f0302010102060102019d010308150239020101010116010e070305" + "c308020301011701510102060101020101020102eb010204060201021b02550802" + "0101026a0101010206010165030204010500090102f5010a020101040190040202" + "0401200a280602040801090602032e0d010200070106010152160207010201027a" + "06030101020107010148020301010100020b023405050101010001060f00053b07" + "00013f0451010002002e0217000101030405080802071e0494030037043208010e" + "011605010f000701110207010201056401a00700013d04000400076d07006080f0" + "002f72757374632f63326637346333663932386165623530336631356234653965" + "6635373738653737663330353862382f6c6962726172792f616c6c6f632f737263" + "2f636f6c6c656374696f6e732f62747265652f6d61702f656e7472792e72730083" + "0e10006000000071010000360000002f72757374632f6332663734633366393238" + "61656235303366313562346539656635373738653737663330353862382f6c6962" + "726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f" + "6e6f64652e7273617373657274696f6e206661696c65643a20656467652e686569" + "676874203d3d2073656c662e686569676874202d203100f40e10005b000000af02" + "000009000000617373657274696f6e206661696c65643a207372632e6c656e2829" + "203d3d206473742e6c656e2829f40e10005b0000002f07000005000000f40e1000" + "5b000000af04000023000000f40e10005b000000ef040000240000006173736572" + "74696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e" + "6e6f64652e686569676874202d2031000000f40e10005b000000f0030000090000" + "00181d10005f00000058020000300000000d0000000c000000040000000e000000" + "0f00000010000000000000000000000001000000110000006120446973706c6179" + "20696d706c656d656e746174696f6e2072657475726e656420616e206572726f72" + "20756e65787065637465646c792f72757374632f63326637346333663932386165" + "6235303366313562346539656635373738653737663330353862382f6c69627261" + "72792f616c6c6f632f7372632f737472696e672e727300009f1010004b00000006" + "0a00000e0000004572726f72454f46207768696c652070617273696e672061206c" + "697374454f46207768696c652070617273696e6720616e206f626a656374454f46" + "207768696c652070617273696e67206120737472696e67454f46207768696c6520" + "70617273696e6720612076616c7565657870656374656420603a60657870656374" + "656420602c60206f7220605d60657870656374656420602c60206f7220607d6065" + "78706563746564206964656e7465787065637465642076616c7565657870656374" + "656420602260696e76616c696420657363617065696e76616c6964206e756d6265" + "726e756d626572206f7574206f662072616e6765696e76616c696420756e69636f" + "646520636f646520706f696e74636f6e74726f6c2063686172616374657220285c" + "75303030302d5c75303031462920666f756e64207768696c652070617273696e67" + "206120737472696e676b6579206d757374206265206120737472696e67696e7661" + "6c69642076616c75653a206578706563746564206b657920746f2062652061206e" + "756d62657220696e2071756f746573666c6f6174206b6579206d75737420626520" + "66696e6974652028676f74204e614e206f72202b2f2d696e66296c6f6e65206c65" + "6164696e6720737572726f6761746520696e206865782065736361706574726169" + "6c696e6720636f6d6d61747261696c696e672063686172616374657273756e6578" + "70656374656420656e64206f662068657820657363617065726563757273696f6e" + "206c696d69742065786365656465644572726f72282c206c696e653a202c20636f" + "6c756d6e3a2000000035131000060000003b13100008000000431310000a000000" + "4826100001000000000000000000f03f0000000000002440000000000000594000" + "00000000408f40000000000088c34000000000006af8400000000080842e410000" + "0000d01263410000000084d797410000000065cdcd41000000205fa00242000000" + "e876483742000000a2941a6d42000040e59c30a2420000901ec4bcd64200003426" + "f56b0c430080e03779c3414300a0d8855734764300c84e676dc1ab43003d9160e4" + "58e143408cb5781daf154450efe2d6e41a4b4492d54d06cff08044f64ae1c7022d" + "b544b49dd9794378ea449102282c2a8b2045350332b7f4ad54450284fee471d989" + "4581121f2fe727c04521d7e6fae031f445ea8ca039593e294624b00888ef8d5f46" + "176e05b5b5b893469cc94622e3a6c846037cd8ea9bd0fe46824dc77261423347e3" + "2079cff91268471b695743b8179e47b1a1162ad3ced2471d4a9cf487820748a55c" + "c3f129633d48e7191a37fa5d724861a0e0c478f5a64879c818f6d6b2dc484c7dcf" + "59c6ef11499e5c43f0b76b4649c63354eca5067c495ca0b4b32784b14973c8a1a0" + "31e5e5498f3aca087e5e1b4a9a647ec50e1b514ac0fddd76d261854a307d951447" + "baba4a3e6edd6c6cb4f04acec9148887e1244b41fc196ae9195a4ba93d50e23150" + "904b134de45a3e64c44b57609df14d7df94b6db8046ea1dc2f4c44f3c2e4e4e963" + "4c15b0f31d5ee4984c1b9c70a5751dcf4c916166876972034df5f93fe9034f384d" + "72f88fe3c4626e4d47fb390ebbfda24d197ac8d129bdd74d9f983a4674ac0d4e64" + "9fe4abc88b424e3dc7ddd6ba2e774e0c39958c69faac4ea743ddf7811ce24e9194" + "d475a2a3164fb5b949138b4c4c4f11140eecd6af814f169911a7cc1bb64f5bffd5" + "d0bfa2eb4f99bf85e2b74521507f2f27db259755505ffbf051effc8a501b9d3693" + "15dec050624404f89a15f5507b5505b6015b2a516d55c311e1786051c82a345619" + "9794517a35c1abdfbcc9516cc158cb0b160052c7f12ebe8e1b345239aeba6d7222" + "6952c75929090f6b9f521dd8b965e9a2d352244e28bfa38b0853ad61f2ae8cae3e" + "530c7d57ed172d73534f5cade85df8a75363b3d86275f6dd531e70c75d09ba1254" + "254c39b58b6847542e9f87a2ae427d547dc39425ad49b2545cf4f96e18dce65473" + "71b88a1e931c55e846b316f3db5155a21860dcef528655ca1e78d3abe7bb553f13" + "2b64cb70f1550ed8353dfecc2556124e83cc3d405b56cb10d29f26089156fe94c6" + "47304ac5563d3ab859bc9cfa56662413b8f5a1305780ed172673ca6457e0e89def" + "0ffd99578cb1c2f5293ed057ef5d3373b44d04586b35009021613958c54200f469" + "b96f58bb298038e2d3a3582a34a0c6dac8d8583541487811fb0e59c1282debea5c" + "4359f172f8a525347859ad8f760f2f41ae59cc19aa69bde8e2593fa014c4eca217" + "5a4fc819f5a78b4d5a321d30f94877825a7e247c371b15b75a9e2d5b0562daec5a" + "82fc58437d08225ba33b2f949c8a565b8c0a3bb9432d8c5b97e6c4534a9cc15b3d" + "20b6e85c03f65b4da8e32234842b5c3049ce95a032615c7cdb41bb487f955c5b52" + "12ea1adfca5c79734bd270cb005d5750de064dfe345d6de49548e03d6a5dc4ae5d" + "2dac66a05d751ab5385780d45d1261e2066da0095eab7c4d244404405ed6db602d" + "5505745ecc12b978aa06a95e7f57e7165548df5eaf96502e358d135f5bbce47982" + "70485f72eb5d18a38c7e5f27b33aefe517b35ff15f096bdfdde75fedb7cb4557d5" + "1d60f4529f8b56a55260b127872eac4e87609df1283a5722bd60029759847635f2" + "60c3fc6f25d4c22661f4fbcb2e89735c61787d3fbd35c89161d65c8f2c433ac661" + "0c34b3f7d3c8fb618700d07a845d3162a9008499e5b46562d400e5ff1e229b6284" + "20ef5f53f5d062a5e8ea37a8320563cfa2e545527f3a63c185af6b938f70633267" + "9b4678b3a463fe40425856e0d9639f6829f7352c1064c6c2f3744337446478b330" + "521445796456e0bc665996af64360c36e0f7bde364438f43d875ad18651473544e" + "d3d84e65ecc7f41084478365e8f931156519b86561787e5abe1fee653d0b8ff8d6" + "d322660cceb2b6cc8857668f815fe4ff6a8d66f9b0bbeedf62c266389d6aea97fb" + "f666864405e57dba2c67d44a23af8ef46167891dec5ab2719667eb24a7f11e0ecc" + "6713770857d3880168d794ca2c08eb35680d3afd37ca656b684844fe629e1fa168" + "5ad5bdfb8567d568b14aad7a67c10a69af4eacace0b840695a62d7d718e77469f1" + "3acd0ddf20aa69d644a0688b54e0690c56c842ae69146a8f6b7ad31984496a7306" + "594820e57f6a08a4372d34efb36a0a8d853801ebe86a4cf0a686c1251f6b305628" + "f49877536bbb6b32317f55886baa067ffdde6abe6b2a646f5ecb02f36b353d0b36" + "7ec3276c820c8ec35db45d6cd1c7389aba90926cc6f9c640e934c76c37b8f89023" + "02fd6c23739b3a5621326deb4f42c9aba9666de6e392bb16549c6d70ce3b358eb4" + "d16d0cc28ac2b121066e8f722d331eaa3b6e9967fcdf524a716e7f81fb97e79ca5" + "6edf61fa7d2104db6e2c7dbcee94e2106f769c6b2a3a1b456f948306b508627a6f" + "3d122471457db06fcc166dcd969ce46f7f5cc880bcc31970cf397dd0551a507043" + "889c44eb20847054aac3152629b970e994349b6f73ef7011dd00c125a823715614" + "41312f9258716b5991fdbab68e71e3d77ade3432c371dc8d1916c2fef77153f19f" + "9b72fe2d72d4f643a107bf627289f49489c96e9772ab31faeb7b4acd720b5f7c73" + "8d4e0273cd765bd030e2367381547204bd9a6c73d074c722b6e0a173045279abe3" + "58d67386a657961cef0b7414c8f6dd71754174187a7455ced275749e98d1ea8147" + "ab7463ffc232b10ce1743cbf737fdd4f15750baf50dfd4a34a75676d920b65a680" + "75c008774efecfb475f1ca14e2fd03ea75d6fe4cad7e4220768c3ea0581e535476" + "2f4ec8eee5678976bb617a6adfc1bf76157d8ca22bd9f3765a9c2f8b76cf287770" + "83fb2d54035f772632bd9c14629377b07eecc3993ac8775c9ee7344049fe77f9c2" + "1021c8ed3278b8f354293aa96778a530aab388939d78675e4a70357cd27801f65c" + "cc421b07798233747f13e23c7931a0a82f4c0d72793dc8923b9f90a6794d7a770a" + "c734dc7970ac8a66fca0117a8c572d803b09467a6fad38608a8b7b7a656c237c36" + "37b17a7f472c1b0485e57a5e59f72145e61a7bdb973a35ebcf507bd23d8902e603" + "857b468d2b83df44ba7b4c38fbb10b6bf07b5f067a9ece85247cf687184642a759" + "7cfa54cf6b8908907c382ac3c6ab0ac47cc7f473b8560df97cf8f19066ac502f7d" + "3b971ac06b92637d0a3d21b00677987d4c8c295cc894ce7db0f79939fd1c037e9c" + "7500883ce4377e039300aa4bdd6d7ee25b404a4faaa27eda72d01ce354d77e908f" + "04e41b2a0d7fbad9826e513a427f299023cae5c8767f3374ac3c1f7bac7fa0c8eb" + "85f3cce17f2f72757374632f633266373463336639323861656235303366313562" + "346539656635373738653737663330353862382f6c6962726172792f616c6c6f63" + "2f7372632f636f6c6c656374696f6e732f62747265652f6e617669676174652e72" + "7300181d10005f000000c600000027000000181d10005f000000160200002f0000" + "00181d10005f000000a1000000240000002f686f6d652f7077616e672f2e636172" + "676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d36" + "6631376432326262613135303031662f73657264655f6a736f6e2d312e302e3133" + "352f7372632f726561642e727300a81d10005f000000a001000045000000a81d10" + "005f000000a50100003d000000a81d10005f000000ad0100001a000000a81d1000" + "5f000000fa01000013000000a81d10005f000000030200003e000000a81d10005f" + "000000ff01000033000000a81d10005f000000090200003a000000a81d10005f00" + "00006802000019000000ffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffff0000010002000300040005000600070008000900ffffffffffff" + "ffffffffffffffff0a000b000c000d000e000f00ffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffff0a000b000c000d000e000f00ffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffff000010002000300040" + "0050006000700080009000ffffffffffffffffffffffffffffa000b000c000d000" + "e000f000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffa000b000c000d000e000" + "f000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffff0d0000000c000000040000000e0000000f0000001000" + "00002f727573742f646570732f646c6d616c6c6f632d302e322e362f7372632f64" + "6c6d616c6c6f632e7273617373657274696f6e206661696c65643a207073697a65" + "203e3d2073697a65202b206d696e5f6f7665726865616400a022100029000000a8" + "04000009000000617373657274696f6e206661696c65643a207073697a65203c3d" + "2073697a65202b206d61785f6f766572686561640000a022100029000000ae0400" + "000d0000000100000000000000656e74697479206e6f7420666f756e647065726d" + "697373696f6e2064656e696564636f6e6e656374696f6e2072656675736564636f" + "6e6e656374696f6e207265736574686f737420756e726561636861626c656e6574" + "776f726b20756e726561636861626c65636f6e6e656374696f6e2061626f727465" + "646e6f7420636f6e6e65637465646164647265737320696e207573656164647265" + "7373206e6f7420617661696c61626c656e6574776f726b20646f776e62726f6b65" + "6e2070697065656e7469747920616c7265616479206578697374736f7065726174" + "696f6e20776f756c6420626c6f636b6e6f742061206469726563746f7279697320" + "61206469726563746f72796469726563746f7279206e6f7420656d707479726561" + "642d6f6e6c792066696c6573797374656d206f722073746f72616765206d656469" + "756d66696c6573797374656d206c6f6f70206f7220696e646972656374696f6e20" + "6c696d69742028652e672e2073796d6c696e6b206c6f6f70297374616c65206e65" + "74776f726b2066696c652068616e646c65696e76616c696420696e707574207061" + "72616d65746572696e76616c6964206461746174696d6564206f75747772697465" + "207a65726f6e6f2073746f726167652073706163657365656b206f6e20756e7365" + "656b61626c652066696c6566696c6573797374656d2071756f7461206578636565" + "64656466696c6520746f6f206c617267657265736f757263652062757379657865" + "63757461626c652066696c652062757379646561646c6f636b63726f73732d6465" + "76696365206c696e6b206f722072656e616d65746f6f206d616e79206c696e6b73" + "696e76616c69642066696c656e616d65617267756d656e74206c69737420746f6f" + "206c6f6e676f7065726174696f6e20696e746572727570746564756e737570706f" + "72746564756e657870656374656420656e64206f662066696c656f7574206f6620" + "6d656d6f72796f74686572206572726f72756e63617465676f72697a6564206572" + "726f7220286f73206572726f72202900000001000000000000003d2610000b0000" + "0048261000010000006f7065726174696f6e207375636365737366756c10000000" + "1100000012000000100000001000000013000000120000000d0000000e00000015" + "0000000c0000000b00000015000000150000000f0000000e000000130000002600" + "00003800000019000000170000000c000000090000000a00000010000000170000" + "00190000000e0000000d00000014000000080000001b0000000e00000010000000" + "16000000150000000b000000160000000d0000000b000000130000005023100060" + "231000712310008323100093231000a3231000b6231000c8231000d5231000e323" + "1000f8231000042410000f24100024241000392410004824100056241000692410" + "008f241000c7241000e0241000f7241000032510000c2510001625100026251000" + "3d251000562510006425100071251000852510008d251000a8251000b6251000c6" + "251000dc251000f1251000fc251000122610001f2610002a26100000ac3a046e61" + "6d65000e0d7761736d5f6c69622e7761736d01f4396000325f5a4e313073657264" + "655f6a736f6e326465313066726f6d5f736c696365313768313163653038373736" + "34633961376230450188015f5a4e313073657264655f6a736f6e3576616c756532" + "646537375f244c5424696d706c247532302473657264652e2e64652e2e44657365" + "7269616c697a652475323024666f72247532302473657264655f6a736f6e2e2e76" + "616c75652e2e56616c7565244754243131646573657269616c697a653137683331" + "653531373831633833363837353945020e5f5f727573745f6465616c6c6f630345" + "5f5a4e313073657264655f6a736f6e347265616439536c69636552656164313770" + "6f736974696f6e5f6f665f696e6465783137683236623431383938353234383332" + "39364504435f5a4e38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c" + "6c6f63244c54244124475424366d616c6c6f633137686536353933396134633839" + "376363313545054f5f5a4e34636f726533707472343564726f705f696e5f706c61" + "6365244c542473657264655f6a736f6e2e2e76616c75652e2e56616c7565244754" + "243137683533326265333033376461316237656445064a5f5a4e31307365726465" + "5f6a736f6e3264653231446573657269616c697a6572244c542452244754243131" + "70617273655f6964656e743137683663353964643731393635353139313045074b" + "5f5a4e313073657264655f6a736f6e3264653231446573657269616c697a657224" + "4c54245224475424313270617273655f6e756d6265723137683738336134316134" + "623931306464323045084c5f5a4e313073657264655f6a736f6e32646532314465" + "73657269616c697a6572244c54245224475424313370617273655f646563696d61" + "6c3137683661306333363832326663336530306145094d5f5a4e31307365726465" + "5f6a736f6e3264653231446573657269616c697a6572244c542452244754243134" + "70617273655f6578706f6e656e7431376833366464376462643233653461346562" + "450a555f5a4e313073657264655f6a736f6e3264653231446573657269616c697a" + "6572244c54245224475424323270617273655f646563696d616c5f6f766572666c" + "6f7731376833613030656365646638363031386433450b4d5f5a4e313073657264" + "655f6a736f6e3264653231446573657269616c697a6572244c5424522447542431" + "346636345f66726f6d5f7061727473313768633863316239626161613836666637" + "33450c565f5a4e313073657264655f6a736f6e3264653231446573657269616c69" + "7a6572244c54245224475424323370617273655f6578706f6e656e745f6f766572" + "666c6f7731376830343762396637333562616463666138450d4f5f5a4e31307365" + "7264655f6a736f6e3264653231446573657269616c697a6572244c542452244754" + "24313670617273655f616e795f6e756d6265723137683931643533303465356139" + "6363663531450e515f5a4e313073657264655f6a736f6e32646532314465736572" + "69616c697a6572244c54245224475424313870617273655f6c6f6e675f696e7465" + "67657231376864383130373866346133316332626532450f3d5f5a4e3130736572" + "64655f6a736f6e356572726f72354572726f7231326669785f706f736974696f6e" + "313768386631666565323432343761346639634510435f5a4e35616c6c6f633772" + "61775f7665633139526177566563244c54245424432441244754243867726f775f" + "6f6e65313768663733333137633566643665626336364511645f5a4e37305f244c" + "5424616c6c6f632e2e7665632e2e566563244c5424542443244124475424247532" + "302461732475323024636f72652e2e6f70732e2e64726f702e2e44726f70244754" + "243464726f703137686431353834386335383231633466666545124f5f5a4e3463" + "6f726533707472343564726f705f696e5f706c616365244c542473657264655f6a" + "736f6e2e2e6572726f722e2e4572726f7224475424313768663837633864366463" + "396162346263354513695f5a4e37305f244c542473657264655f6a736f6e2e2e72" + "6561642e2e536c6963655265616424753230246173247532302473657264655f6a" + "736f6e2e2e726561642e2e52656164244754243970617273655f73747231376861" + "62653863353535633862636433353545143c5f5a4e357365726465326465375669" + "7369746f72313876697369745f626f72726f7765645f7374723137683435643731" + "31633837313638633266364515335f5a4e35616c6c6f63377261775f7665633132" + "68616e646c655f6572726f72313768393762376462643066373264643738384516" + "3a5f5a4e313073657264655f6a736f6e32646531325061727365724e756d626572" + "35766973697431376838366238393638313662613130613765451781015f5a4e37" + "355f244c542473657264655f6a736f6e2e2e64652e2e4d6170416363657373244c" + "5424522447542424753230246173247532302473657264652e2e64652e2e4d6170" + "4163636573732447542431336e6578745f6b65795f7365656431326861735f6e65" + "78745f6b6579313768356461326634303536653538313464394518695f5a4e3730" + "5f244c542473657264652e2e64652e2e696d706c732e2e537472696e6756697369" + "746f7224753230246173247532302473657264652e2e64652e2e56697369746f72" + "244754243976697369745f73747231376835356436653830653061376366383938" + "4519755f5a4e37355f244c542473657264655f6a736f6e2e2e64652e2e4d617041" + "6363657373244c5424522447542424753230246173247532302473657264652e2e" + "64652e2e4d61704163636573732447542431356e6578745f76616c75655f736565" + "6431376865633835363737653830316539393133451a565f5a4e35616c6c6f6331" + "31636f6c6c656374696f6e73356274726565336d6170323542547265654d617024" + "4c54244b24432456244324412447542436696e7365727431376834643164623464" + "613838343264346665451b81015f5a4e39395f244c5424616c6c6f632e2e636f6c" + "6c656374696f6e732e2e62747265652e2e6d61702e2e42547265654d6170244c54" + "244b244324562443244124475424247532302461732475323024636f72652e2e6f" + "70732e2e64726f702e2e44726f70244754243464726f7031376835346633306630" + "323133646334313362451c5d5f5a4e36355f244c542473657264655f6a736f6e2e" + "2e76616c75652e2e56616c7565247532302461732475323024636f72652e2e636d" + "702e2e5061727469616c4571244754243265713137683162323138393234373831" + "3936633830451d8b015f5a4e3130385f244c5424616c6c6f632e2e636f6c6c6563" + "74696f6e732e2e62747265652e2e6d61702e2e49746572244c54244b2443245624" + "475424247532302461732475323024636f72652e2e697465722e2e747261697473" + "2e2e6974657261746f722e2e4974657261746f7224475424346e65787431376835" + "363664323036316535613937646164451e08616c6c6f636174651f11636f6d7061" + "72655f6163636f756e744944205c5f5a4e35355f244c5424737472247532302461" + "73247532302473657264655f6a736f6e2e2e76616c75652e2e696e6465782e2e49" + "6e646578244754243130696e6465785f696e746f31376864333238633634636161" + "3964313761634521325f5a4e34636f726536726573756c743133756e777261705f" + "6661696c6564313768663839396364303037373637303035314522325f5a4e3463" + "6f7265366f7074696f6e3133756e777261705f6661696c65643137683335353139" + "64653938613737363134664523385f5a4e35616c6c6f63377261775f7665633137" + "63617061636974795f6f766572666c6f7731376834393964343832613965643537" + "3135614524305f5a4e34636f72653970616e69636b696e673970616e69635f666d" + "74313768363534306363623264356664633361624525415f5a4e38646c6d616c6c" + "6f6338646c6d616c6c6f633137446c6d616c6c6f63244c54244124475424346672" + "65653137683339383334616161616533653839343645262c5f5a4e34636f726539" + "70616e69636b696e673570616e6963313768303465656239313764643933633232" + "3945270e5f5f727573745f7265616c6c6f63284a5f5a4e38646c6d616c6c6f6338" + "646c6d616c6c6f633137446c6d616c6c6f63244c542441244754243132756e6c69" + "6e6b5f6368756e6b3137683933346533646333383362623538613345294b5f5a4e" + "38646c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c542441" + "244754243133646973706f73655f6368756e6b3137683665306363636434353836" + "3537343633452a445f5a4e34636f726535736c69636535696e6465783236736c69" + "63655f73746172745f696e6465785f6c656e5f6661696c31376866393161336166" + "653837623164343433452b625f5a4e34636f726533666d74336e756d33696d7035" + "325f244c5424696d706c2475323024636f72652e2e666d742e2e446973706c6179" + "2475323024666f7224753230247533322447542433666d74313768626633653032" + "32383438336533373561452c3a5f5a4e34636f72653970616e69636b696e673138" + "70616e69635f626f756e64735f636865636b313768336436623861613463383034" + "39363632452d305f5a4e34636f726533666d74336e756d33696d7037666d745f75" + "363431376864353231666136656636613036373261452e11727573745f62656769" + "6e5f756e77696e642f385f5a4e34636f726533666d7439466f726d617474657231" + "327061645f696e74656772616c3137686334656130376130626331333536633445" + "30465f5a4e34636f726533666d7439466f726d617474657231327061645f696e74" + "656772616c313277726974655f7072656669783137686139613433323830623630" + "30366431324531425f5a4e34636f726535736c69636535696e6465783234736c69" + "63655f656e645f696e6465785f6c656e5f6661696c313768303838623536653239" + "3962656161616645322e5f5a4e34636f726533666d7439466f726d617474657233" + "706164313768343736396165333839333734636335314533495f5a4e34345f244c" + "54242452462454247532302461732475323024636f72652e2e666d742e2e446973" + "706c61792447542433666d74313768376666346430623836303963323437324534" + "475f5a4e34325f244c54242452462454247532302461732475323024636f72652e" + "2e666d742e2e44656275672447542433666d743137683361366261613162623437" + "61643230344535265f5a4e34636f726533666d7435777269746531376839333535" + "34653462653731663263376145365c5f5a4e34636f726533666d74336e756d3530" + "5f244c5424696d706c2475323024636f72652e2e666d742e2e4465627567247532" + "3024666f7224753230247533322447542433666d74313768353533393862313635" + "353064353237654537405f5a4e34636f726535736c69636535696e646578323273" + "6c6963655f696e6465785f6f726465725f6661696c313768353862336536383666" + "653333373030654538535f5a4e34636f72653463686172376d6574686f64733232" + "5f244c5424696d706c2475323024636861722447542431366573636170655f6465" + "6275675f657874313768656366613566303431373437393039384539345f5a4e34" + "636f726537756e69636f6465397072696e7461626c6535636865636b3137683664" + "6136346638306663313630633761453a325f5a4e34636f7265337374723136736c" + "6963655f6572726f725f6661696c31376862303364323439386438646362363433" + "453b355f5a4e34636f7265337374723139736c6963655f6572726f725f6661696c" + "5f727431376832616462643139306563313832373933453c645f5a4e37315f244c" + "5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c542449647824" + "475424247532302461732475323024636f72652e2e666d742e2e44656275672447" + "542433666d7431376836636632383632303536616535653233453d465f5a4e3431" + "5f244c542463686172247532302461732475323024636f72652e2e666d742e2e44" + "656275672447542433666d7431376865613566643964626339343936626665453e" + "625f5a4e34636f726533666d74336e756d33696d7035325f244c5424696d706c24" + "75323024636f72652e2e666d742e2e446973706c61792475323024666f72247532" + "30246933322447542433666d743137686365643930633761363339633031646445" + "3fce015f5a4e35616c6c6f633131636f6c6c656374696f6e73356274726565346e" + "6f64653132374e6f6465526566244c5424616c6c6f632e2e636f6c6c656374696f" + "6e732e2e62747265652e2e6e6f64652e2e6d61726b65722e2e4479696e67244324" + "4b24432456244324616c6c6f632e2e636f6c6c656374696f6e732e2e6274726565" + "2e2e6e6f64652e2e6d61726b65722e2e4c6561664f72496e7465726e616c244754" + "2432316465616c6c6f636174655f616e645f617363656e64313768353839613732" + "6639343233626663656245409a025f5a4e35616c6c6f633131636f6c6c65637469" + "6f6e73356274726565346e6f646532313448616e646c65244c5424616c6c6f632e" + "2e636f6c6c656374696f6e732e2e62747265652e2e6e6f64652e2e4e6f64655265" + "66244c5424616c6c6f632e2e636f6c6c656374696f6e732e2e62747265652e2e6e" + "6f64652e2e6d61726b65722e2e4d75742443244b24432456244324616c6c6f632e" + "2e636f6c6c656374696f6e732e2e62747265652e2e6e6f64652e2e6d61726b6572" + "2e2e496e7465726e616c24475424244324616c6c6f632e2e636f6c6c656374696f" + "6e732e2e62747265652e2e6e6f64652e2e6d61726b65722e2e4564676524475424" + "3130696e736572745f666974313768633861306366353339656666303131314541" + "92025f5a4e35616c6c6f633131636f6c6c656374696f6e73356274726565346e6f" + "646532313248616e646c65244c5424616c6c6f632e2e636f6c6c656374696f6e73" + "2e2e62747265652e2e6e6f64652e2e4e6f6465526566244c5424616c6c6f632e2e" + "636f6c6c656374696f6e732e2e62747265652e2e6e6f64652e2e6d61726b65722e" + "2e4d75742443244b24432456244324616c6c6f632e2e636f6c6c656374696f6e73" + "2e2e62747265652e2e6e6f64652e2e6d61726b65722e2e496e7465726e616c2447" + "5424244324616c6c6f632e2e636f6c6c656374696f6e732e2e62747265652e2e6e" + "6f64652e2e6d61726b65722e2e4b56244754243573706c69743137686430396134" + "386237613831363331616145425a5f5a4e36315f244c542473657264655f6a736f" + "6e2e2e6572726f722e2e4572726f72247532302461732475323024636f72652e2e" + "666d742e2e44656275672447542433666d74313768343032353764366634326532" + "396237344543595f5a4e36305f244c5424616c6c6f632e2e737472696e672e2e53" + "7472696e67247532302461732475323024636f72652e2e666d742e2e446973706c" + "61792447542433666d74313768636534323236616131663732366331634544615f" + "5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532" + "302461732475323024636f72652e2e666d742e2e57726974652447542439777269" + "74655f73747231376835393964396535373839343664643938452e31393245575f" + "5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532" + "302461732475323024636f72652e2e666d742e2e44656275672447542433666d74" + "313768623637326562313939633335643138364546555f5a4e35335f244c542463" + "6f72652e2e666d742e2e4572726f72247532302461732475323024636f72652e2e" + "666d742e2e44656275672447542433666d74313768663761653238353562323439" + "64626335452e3734474c5f5a4e34636f726533707472343264726f705f696e5f70" + "6c616365244c5424616c6c6f632e2e737472696e672e2e537472696e6724475424" + "313768376236353738393966393837353963624548475f5a4e313073657264655f" + "6a736f6e347265616439536c696365526561643139736b69705f746f5f65736361" + "70655f736c6f77313768343738366336653232346661323366324549465f5a4e35" + "616c6c6f63337665633136566563244c5424542443244124475424313765787465" + "6e645f66726f6d5f736c6963653137686462613134663734663865323236646345" + "4a2f5f5a4e313073657264655f6a736f6e34726561643661735f73747231376866" + "636436626234313731373865366635454b435f5a4e35616c6c6f63377261775f76" + "65633139526177566563244c54245424432441244754243867726f775f6f6e6531" + "376836366638363461663034626564326232454c3e5f5a4e313073657264655f6a" + "736f6e3472656164323070617273655f756e69636f64655f657363617065313768" + "39363430666363616264303034613064454d725f5a4e37305f244c542473657264" + "655f6a736f6e2e2e726561642e2e536c6963655265616424753230246173247532" + "302473657264655f6a736f6e2e2e726561642e2e52656164244754243137646563" + "6f64655f6865785f65736361706531376834376265353936383535663830346461" + "454e355f5a4e313073657264655f6a736f6e347265616431317065656b5f6f725f" + "656f6631376837336362313436306531616339386135454f5a5f5a4e35616c6c6f" + "63377261775f7665633230526177566563496e6e6572244c542441244754243772" + "6573657276653231646f5f726573657276655f616e645f68616e646c6531376837" + "66656665376563326164336435616245502e5f5a4e313073657264655f6a736f6e" + "3472656164356572726f7231376865663535323764333333633963323666455130" + "5f5a4e34636f726533666d743557726974653977726974655f666d743137686133" + "31656164363637646336373865304552635f5a4e35385f244c5424616c6c6f632e" + "2e737472696e672e2e537472696e67247532302461732475323024636f72652e2e" + "666d742e2e577269746524475424313077726974655f6368617231376832313433" + "393163623865623135326336452e31393353325f5a4e35616c6c6f63377261775f" + "766563313166696e6973685f67726f773137683533383539626133383962373164" + "333545544b5f5a4e35616c6c6f63377261775f7665633230526177566563496e6e" + "6572244c54244124475424313467726f775f616d6f7274697a6564313768393863" + "3336346663343566336431323445550a727573745f70616e696356375f5a4e3463" + "6f72653570616e6963313250616e69635061796c6f61643661735f737472313768" + "363134396631343264396132653032654557505f5a4e38646c6d616c6c6f633864" + "6c6d616c6c6f633137446c6d616c6c6f63244c542441244754243138696e736572" + "745f6c617267655f6368756e6b3137686566653835316132373538326461376245" + "58455f5a4e3373746433737973396261636b747261636532365f5f727573745f65" + "6e645f73686f72745f6261636b7472616365313768346463336465343764323230" + "323162394559585f5a4e337374643970616e69636b696e673139626567696e5f70" + "616e69635f68616e646c657232385f24753762242475376224636c6f7375726524" + "75376424247537642431376865313761333937376638396331313738455a3b5f5a" + "4e337374643970616e69636b696e673230727573745f70616e69635f776974685f" + "686f6f6b31376837373665373963396636353931626535455b83015f5a4e39395f" + "244c54247374642e2e70616e69636b696e672e2e626567696e5f70616e69635f68" + "616e646c65722e2e5374617469635374725061796c6f6164247532302461732475" + "323024636f72652e2e70616e69632e2e50616e69635061796c6f61642447542436" + "61735f73747231376865623366373232643232346534326638455c066d656d636d" + "705d365f5a4e3137636f6d70696c65725f6275696c74696e73336d656d376d656d" + "6d6f766531376863383366393136386635323861656536455e076d656d6d6f7665" + "5f066d656d637079071201000f5f5f737461636b5f706f696e746572090a010007" + "2e726f6461746100550970726f64756365727302086c616e677561676501045275" + "7374000c70726f6365737365642d62790105727573746325312e38332e302d6e69" + "6768746c79202863326637346333663920323032342d30392d30392900490f7461" + "726765745f6665617475726573042b0a6d756c746976616c75652b0f6d75746162" + "6c652d676c6f62616c732b0f7265666572656e63652d74797065732b087369676e" + "2d657874"; + +extern std::string const p4Hex = + "0061736d0100000001791160037f7f7f017f60027f7f017f60017f0060027f7f00" + "60037e7f7f017f60037f7f7f0060067f7f7f7f7f7f017f60017f017f60047f7f7f" + "7f017f60057f7f7f7f7f0060000060057f7f7f7f7f017f60077f7f7f7f7f7f7f01" + "7f60047f7f7f7f0060067f7f7f7f7f7f0060047f7f7f7e0060057f7f7f7e7f0003" + "7c7b01010301040506010202020202010102050001000103010007070303080500" + "090201020a03020500030305020b05050101010001010a0505050c090901010105" + "0903010101030d0d0502050d01030301010d0e020a0a02030101020a0d0d000101" + "0a030302020d03030205050003030f0f1010101009030000000004050170011e1e" + "05030100110619037f01418080c0000b7f004184e0c0000b7f004190e0c0000b07" + "5106066d656d6f7279020008616c6c6f6361746500180a6465616c6c6f63617465" + "001b11636f6d706172655f6163636f756e744944001c0a5f5f646174615f656e64" + "03010b5f5f686561705f6261736503020923010041010b1d210307122f30433134" + "3c3d443e59626708110e500d160942585a5e5f600a9188037b6601017f23808080" + "800041106b220224808080800002400240200028020c450d00200021010c010b20" + "0241086a200041086a280200360200200220002902003703002001200210818080" + "80002101200041141082808080000b200241106a24808080800020010b8c010103" + "7f23808080800041106b2202248080808000200241086a200028020c2000280210" + "200028021410c78080800041002d00e0dbc080001a200228020c21032002280208" + "21040240411410998080800022000d00000b2000200436020c2000200129020037" + "020020002003360210200041086a200141086a280200360200200241106a248080" + "80800020000b7001027f024002402000417c6a2802002202417871220341044108" + "200241037122021b20016a490d0002402002450d002003200141276a4b0d020b20" + "0010a5808080000f0b419db8c08000412e41ccb8c0800010a680808000000b41dc" + "b8c08000412e418cb9c0800010a680808000000be90201057f2380808080004180" + "016b22022480808080000240024002400240200128021c22034110710d00200341" + "20710d0120003100004101200110848080800021000c030b20002d0000210041ff" + "00210303402002200322046a22052000410f712203413072200341d7006a200341" + "0a491b3a00002004417f6a2103200041ff017122064104762100200641104f0d00" + "0c020b0b20002d0000210041ff00210303402002200322046a22052000410f7122" + "03413072200341376a2003410a491b3a00002004417f6a2103200041ff01712206" + "4104762100200641104f0d000b02402004418101490d002004418001419887c080" + "00108580808000000b2001410141a887c0800041022005418101200441016a6b10" + "868080800021000c010b02402004418101490d002004418001419887c080001085" + "80808000000b2001410141a887c0800041022005418101200441016a6b10868080" + "800021000b20024180016a24808080800020000bec0203027f017e037f23808080" + "800041306b2203248080808000412721040240024020004290ce005a0d00200021" + "050c010b412721040340200341096a20046a2206417c6a20004290ce0080220542" + "f0b1037e20007ca7220741ffff037141e4006e220841017441aa87c080006a2f00" + "003b00002006417e6a2008419c7f6c20076a41ffff037141017441aa87c080006a" + "2f00003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b" + "02400240200542e300560d002005a721060c010b200341096a2004417e6a22046a" + "2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff037141017441aa" + "87c080006a2f00003b00000b024002402006410a490d00200341096a2004417e6a" + "22046a200641017441aa87c080006a2f00003b00000c010b200341096a2004417f" + "6a22046a20064130723a00000b2002200141014100200341096a20046a41272004" + "6b1086808080002104200341306a24808080800020040b7902017f017e23808080" + "800041306b22032480808080002003200036020020032001360204200341023602" + "0c2003419c8ac08000360208200342023702142003418180808000ad4220862204" + "200341046aad84370328200320042003ad843703202003200341206a3602102003" + "41086a200210a480808000000bcb0501077f0240024020010d00200541016a2106" + "200028021c2107412d21080c010b412b418080c400200028021c22074101712201" + "1b2108200120056a21060b0240024020074104710d00410021020c010b02400240" + "20030d00410021090c010b02402003410371220a0d000c010b4100210920022101" + "0340200920012c000041bf7f4a6a2109200141016a2101200a417f6a220a0d000b" + "0b200920066a21060b024020002802000d00024020002802142201200028021822" + "0920082002200310ac80808000450d0041010f0b200120042005200928020c1180" + "8080800080808080000f0b02400240024002402000280204220120064b0d002000" + "28021422012000280218220920082002200310ac80808000450d0141010f0b2007" + "410871450d01200028021021072000413036021020002d0020210b4101210c2000" + "41013a0020200028021422092000280218220a20082002200310ac808080000d02" + "200120066b41016a2101024003402001417f6a2201450d0120094130200a280210" + "1181808080008080808000450d000b41010f0b0240200920042005200a28020c11" + "80808080008080808000450d0041010f0b2000200b3a0020200020073602104100" + "0f0b200120042005200928020c1180808080008080808000210c0c010b20012006" + "6b210702400240024020002d002022010e0402000100020b20072101410021070c" + "010b20074101762101200741016a41017621070b200141016a2101200028021021" + "06200028021821092000280214210a024003402001417f6a2201450d01200a2006" + "20092802101181808080008080808000450d000b41010f0b4101210c200a200920" + "082002200310ac808080000d00200a20042005200928020c118080808000808080" + "80000d00410021010340024020072001470d0020072007490f0b200141016a2101" + "200a200620092802101181808080008080808000450d000b2001417f6a2007490f" + "0b200c0be70201057f2380808080004180016b2202248080808000024002400240" + "0240200128021c22034110710d0020034120710d01200035020041012001108480" + "80800021000c030b2000280200210041ff00210303402002200322046a22052000" + "410f712203413072200341d7006a2003410a491b3a00002004417f6a2103200041" + "10492106200041047621002006450d000c020b0b2000280200210041ff00210303" + "402002200322046a22052000410f712203413072200341376a2003410a491b3a00" + "002004417f6a210320004110492106200041047621002006450d000b0240200441" + "8101490d002004418001419887c08000108580808000000b2001410141a887c080" + "0041022005418101200441016a6b10868080800021000c010b0240200441810149" + "0d002004418001419887c08000108580808000000b2001410141a887c080004102" + "2005418101200441016a6b10868080800021000b20024180016a24808080800020" + "000b1e01017f024020002802002201450d00200028020420011082808080000b0b" + "970101047f024002400240200028020022002802000e020001020b200028020822" + "01450d01200028020420011082808080000c010b20002d00044103470d00200028" + "0208220128020021020240200128020422032802002204450d0020022004118280" + "80800080808080000b024020032802042203450d00200220031082808080000b20" + "01410c1082808080000b200041141082808080000b6801017f0240024002400240" + "20002d00000e050303030102000b200041046a108b808080000c020b2000280204" + "2201450d01200028020820011082808080000f0b200041046a108c808080002000" + "2802042201450d002000280208200141186c1082808080000f0b0be30501067f23" + "808080800041306b22012480808080004100210241002103024020002802002204" + "450d00200120043602182001410036021420012004360208200141003602042001" + "2000280204220336021c2001200336020c20002802082103410121020b20012003" + "360220200120023602102001200236020002400240024003400240024002400240" + "024020030d002001280200450d0820012802082104200128020422030d01410021" + "00200128020c2203450d06034020042802980321042003417f6a22030d000c070b" + "0b20012003417f6a360220024020024101712203450d0020012802040d00200128" + "02082103200128020c2200450d03034020032802980321032000417f6a22000d00" + "0c040b0b2003450d01200128020421030c030b200421000c050b41a8acc0800010" + "a080808000000b200142003702082001200336020441012102200141013602000b" + "200128020821000240200128020c220520032f019203490d000240034020014124" + "6a2003200010bf8080800020012802242203450d0120012802282100200128022c" + "220520032f019203490d020c000b0b4188a5c0800010a080808000000b20054101" + "6a21040240024020000d002001200436020c20014100360208200120033602040c" + "010b200320044102746a4198036a21040340200428020022064198036a21042000" + "417f6a22000d000b20014200370208200120063602042003450d040b0240200320" + "05410c6c6a418c026a22002802002204450d00200028020420041082808080000b" + "02400240024002402003200541186c6a22032d00000e050303030102000b200341" + "046a108b808080000c020b20032802042200450d01200328020820001082808080" + "000c010b200341046a108c8080800020032802042200450d002003280208200041" + "186c1082808080000b200128022021030c000b0b200421030b0340200141246a20" + "03200010bf8080800020012802242203450d01200128022821000c000b0b200141" + "306a2480808080000b950101027f024020002802082201450d0020002802044104" + "6a2100034002400240024002402000417c6a2d00000e050303030102000b200010" + "8b808080000c020b20002802002202450d01200041046a28020020021082808080" + "000c010b2000108c8080800020002802002202450d00200041046a280200200241" + "186c1082808080000b200041186a21002001417f6a22010d000b0b0b2200200128" + "021441d4a6c080004105200128021828020c11808080800080808080000be30201" + "027f23808080800041106b22022480808080000240024002400240200141800149" + "0d002002410036020c2001418010490d0102402001418080044f0d002002200141" + "3f71418001723a000e20022001410c7641e001723a000c20022001410676413f71" + "418001723a000d410321010c030b20022001413f71418001723a000f2002200141" + "127641f001723a000c20022001410676413f71418001723a000e20022001410c76" + "413f71418001723a000d410421010c020b0240200028020822032000280200470d" + "002000108f808080000b2000200341016a360208200028020420036a20013a0000" + "0c020b20022001413f71418001723a000d2002200141067641c001723a000c4102" + "21010b02402000280200200028020822036b20014f0d0020002003200110908080" + "8000200028020821030b200028020420036a2002410c6a200110fa808080001a20" + "00200320016a3602080b200241106a24808080800041000b5901017f2380808080" + "0041106b2201248080808000200141086a2000200028020041014101410110d280" + "808000024020012802082200418180808078460d002000200128020c109a808080" + "00000b200141106a2480808080000b5601017f23808080800041106b2203248080" + "808000200341086a2000200120024101410110d280808000024020032802082202" + "418180808078460d002002200328020c109a80808000000b200341106a24808080" + "80000b4b01017f02402000280200200028020822036b20024f0d00200020032002" + "109080808000200028020821030b200028020420036a2001200210fa808080001a" + "2000200320026a36020841000b1400200120002802042000280208109380808000" + "0bc20b010b7f200028020821030240024002400240200028020022040d00200341" + "0171450d010b02402003410171450d00200120026a210502400240200028020c22" + "060d0041002107200121080c010b41002107410021092001210803402008220320" + "05460d020240024020032c00002208417f4c0d00200341016a21080c010b024020" + "0841604f0d00200341026a21080c010b0240200841704f0d00200341036a21080c" + "010b200341046a21080b200820036b20076a21072006200941016a2209470d000b" + "0b20082005460d00024020082c00002203417f4a0d0020034160491a0b02400240" + "2007450d000240200720024f0d00200120076a2c000041bf7f4a0d01410021030c" + "020b20072002460d00410021030c010b200121030b2007200220031b2102200320" + "0120031b21010b024020040d00200028021420012002200028021828020c118080" + "80800080808080000f0b2000280204210a024020024110490d0020022001200141" + "036a417c7122076b22096a220b4103712104410021064100210302402001200746" + "0d004100210302402009417c4b0d00410021034100210503402003200120056a22" + "082c000041bf7f4a6a200841016a2c000041bf7f4a6a200841026a2c000041bf7f" + "4a6a200841036a2c000041bf7f4a6a2103200541046a22050d000b0b2001210803" + "40200320082c000041bf7f4a6a2103200841016a2108200941016a22090d000b0b" + "02402004450d002007200b417c716a22082c000041bf7f4a210620044101460d00" + "200620082c000141bf7f4a6a210620044102460d00200620082c000241bf7f4a6a" + "21060b200b4102762105200620036a21060340200721042005450d04200541c001" + "200541c001491b220b410371210c200b410274210d41002108024020054104490d" + "002004200d41f007716a210941002108200421030340200328020c2207417f7341" + "077620074106767241818284087120032802082207417f73410776200741067672" + "41818284087120032802042207417f734107762007410676724181828408712003" + "2802002207417f7341077620074106767241818284087120086a6a6a6a21082003" + "41106a22032009470d000b0b2005200b6b21052004200d6a2107200841087641ff" + "81fc0771200841ff81fc07716a418180046c41107620066a2106200c450d000b20" + "04200b41fc01714102746a22082802002203417f73410776200341067672418182" + "8408712103200c4101460d0220082802042207417f734107762007410676724181" + "8284087120036a2103200c4102460d0220082802082208417f7341077620084106" + "767241818284087120036a21030c020b024020020d00410021060c030b20024103" + "71210802400240200241044f0d0041002106410021090c010b4100210620012103" + "2002410c71220921070340200620032c000041bf7f4a6a200341016a2c000041bf" + "7f4a6a200341026a2c000041bf7f4a6a200341036a2c000041bf7f4a6a21062003" + "41046a21032007417c6a22070d000b0b2008450d02200120096a21030340200620" + "032c000041bf7f4a6a2106200341016a21032008417f6a22080d000c030b0b2000" + "28021420012002200028021828020c11808080800080808080000f0b2003410876" + "41ff811c71200341ff81fc07716a418180046c41107620066a21060b0240024020" + "0a20064d0d00200a20066b21054100210302400240024020002d00200e04020001" + "02020b20052103410021050c010b20054101762103200541016a41017621050b20" + "0341016a210320002802102109200028021821082000280214210703402003417f" + "6a2203450d022007200920082802101181808080008080808000450d000b41010f" + "0b200028021420012002200028021828020c11808080800080808080000f0b0240" + "200720012002200828020c1180808080008080808000450d0041010f0b41002103" + "0340024020052003470d0020052005490f0b200341016a21032007200920082802" + "101181808080008080808000450d000b2003417f6a2005490b890503037f017e03" + "7f23808080800041f0006b220224808080800041002103024020002d0000220420" + "012d0000470d00410121030240024002400240024020040e06050001020304050b" + "20002d000120012d00014621030c040b4100210320002903082205200129030852" + "0d030240024002402005a70e03000102000b200029031020012903105121030c05" + "0b200029031020012903105121030c040b20002b031020012b03106121030c030b" + "41002103200028020c2204200128020c470d0220002802082001280208200410f7" + "808080004521030c020b41002103200028020c2206200128020c470d0120012802" + "08210420002802082100200641016a210103402001417f6a22014521032001450d" + "02200020041094808080002106200441186a2104200041186a210020060d000c02" + "0b0b41002103200028020c2204200128020c470d002002410036026c2002420037" + "026420024100360254200241003602442002410036023020024100360220200220" + "01280208220636025c2002200128020422033602582002200636024c2002200336" + "024820022000280208220636023820022000280204220136023420022006360228" + "2002200136022420022004410020031b3602602002200341004722033602502002" + "200336024020022004410020011b36023c20022001410047220336022c20022003" + "36021c200241c0006a21070340200241106a2002411c6a10958080800041012103" + "20022802102201450d0120022802142104200241086a2007109580808000200228" + "02082200450d0141002103200128020822062000280208470d01200228020c2108" + "20012802042000280204200610f7808080000d01200420081094808080000d000b" + "0b200241f0006a24808080800020030bed0201057f024002400240200128022022" + "020d00410021020c010b20012002417f6a36022002400240024020012802004101" + "470d0020012802040d01200128020821030240200128020c2202450d0003402003" + "2802980321032002417f6a22020d000b0b20014200370208200120033602042001" + "41013602000c020b41c8acc0800010a080808000000b200128020421030b200128" + "0208210202400240200128020c220420032f0192034f0d00200321050c010b0340" + "2003280288022205450d03200241016a210220032f019003210420052103200420" + "052f0192034f0d000b0b200441016a21030240024020020d00200521060c010b20" + "0520034102746a4198036a21030340200328020022064198036a21032002417f6a" + "22020d000b410021030b2001200336020c20014100360208200120063602042005" + "200441186c6a210320052004410c6c6a418c026a21020b20002003360204200020" + "023602000f0b41b8acc0800010a080808000000bae0301057f2380808080004110" + "6b220224808080800041012103024020012802142204419f81c08000410d200128" + "0218220528020c220611808080800080808080000d00024020012d001c4104710d" + "00200441f886c080004103200611808080800080808080000d01200441ac81c080" + "004104200611808080800080808080000d012004418bc2c0800041022006118080" + "80800080808080000d01200420002d0000410274220141dc83c080006a28020020" + "0141c883c080006a280200200611808080800080808080000d012004418187c080" + "0041022006118080808000808080800021030c010b200441fb86c0800041032006" + "11808080800080808080000d002002200536020420022004360200410121032002" + "41013a000f20022002410f6a360208200241ac81c0800041041097808080000d00" + "2002418bc2c0800041021097808080000d00200220002d0000410274220141dc83" + "c080006a280200200141c883c080006a2802001097808080000d00410121032002" + "41fe86c0800041021097808080000d002004418087c08000410120061180808080" + "00808080800021030b200241106a24808080800020030bdf04010c7f2001417f6a" + "210320002802042104200028020021052000280208210641002107410021084100" + "21094100210a02400340200a4101710d0102400240200920024b0d000340200120" + "096a210a0240024002400240200220096b220b41074b0d0020022009470d012002" + "21090c050b02400240200a41036a417c71220c200a6b220d450d00410021000340" + "200a20006a2d0000410a460d05200d200041016a2200470d000b200d200b41786a" + "220e4d0d010c030b200b41786a210e0b03404180828408200c2802002200418a94" + "a8d000736b2000724180828408200c41046a2802002200418a94a8d000736b2000" + "727141808182847871418081828478470d02200c41086a210c200d41086a220d20" + "0e4d0d000c020b0b410021000340200a20006a2d0000410a460d02200b20004101" + "6a2200470d000b200221090c030b0240200d200b470d00200221090c030b200a20" + "0d6a210c2002200d6b20096b210b4100210002400340200c20006a2d0000410a46" + "0d01200b200041016a2200470d000b200221090c030b2000200d6a21000b200020" + "096a220c41016a21090240200c20024f0d00200a20006a2d0000410a470d004100" + "210a2009210d200921000c030b200920024d0d000b0b20082002460d024101210a" + "2008210d200221000b0240024020062d0000450d00200541f486c0800041042004" + "28020c11808080800080808080000d010b200020086b210b4100210c0240200020" + "08460d00200320006a2d0000410a46210c0b200120086a21002006200c3a000020" + "0d210820052000200b200428020c1180808080008080808000450d010b0b410121" + "070b20070b4901017f410021010240024020004100480d00024020000d00410121" + "010c020b41002d00e0dbc080001a200010998080800022010d01410121010b2001" + "2000109a80808000000b20010bcb2502087f017e02400240024002400240024002" + "400240200041f501490d0041002101200041cdff7b4f0d052000410b6a22014178" + "71210241002802c4dfc080002203450d04411f21040240200041f4ffff074b0d00" + "2002410620014108766722006b7641017120004101746b413e6a21040b41002002" + "6b21010240200441027441a8dcc080006a28020022050d0041002100410021060c" + "020b4100210020024100411920044101766b2004411f461b742107410021060340" + "02402005220528020441787122082002490d00200820026b220820014f0d002008" + "21012005210620080d004100210120052106200521000c040b2005280214220820" + "00200820052007411d764104716a41106a2802002205471b200020081b21002007" + "41017421072005450d020c000b0b024041002802c0dfc08000220541102000410b" + "6a41f803712000410b491b22024103762201762200410371450d00024002402000" + "417f7341017120016a2207410374220041b8ddc080006a2201200041c0ddc08000" + "6a28020022022802082206460d002006200136020c200120063602080c010b4100" + "2005417e200777713602c0dfc080000b20022000410372360204200220006a2200" + "2000280204410172360204200241086a0f0b200241002802c8dfc080004d0d0302" + "400240024020000d0041002802c4dfc080002200450d0620006841027441a8dcc0" + "80006a280200220628020441787120026b21012006210503400240200628021022" + "000d00200628021422000d0020052802182104024002400240200528020c220020" + "05470d00200541144110200528021422001b6a28020022060d01410021000c020b" + "20052802082206200036020c200020063602080c010b200541146a200541106a20" + "001b21070340200721082006220041146a200041106a200028021422061b210720" + "004114411020061b6a28020022060d000b200841003602000b2004450d04024020" + "0528021c41027441a8dcc080006a22062802002005460d00200441104114200428" + "02102005461b6a20003602002000450d050c040b2006200036020020000d034100" + "41002802c4dfc08000417e200528021c77713602c4dfc080000c040b2000280204" + "41787120026b22062001200620014922061b21012000200520061b210520002106" + "0c000b0b02400240200020017441022001742200410020006b7271682208410374" + "220141b8ddc080006a2206200141c0ddc080006a28020022002802082207460d00" + "2007200636020c200620073602080c010b41002005417e200877713602c0dfc080" + "000b20002002410372360204200020026a2207200120026b220641017236020420" + "0020016a2006360200024041002802c8dfc080002205450d00200541787141b8dd" + "c080006a210141002802d0dfc0800021020240024041002802c0dfc08000220841" + "012005410376742205710d00410020082005723602c0dfc08000200121050c010b" + "200128020821050b200120023602082005200236020c2002200136020c20022005" + "3602080b410020073602d0dfc08000410020063602c8dfc08000200041086a0f0b" + "20002004360218024020052802102206450d002000200636021020062000360218" + "0b20052802142206450d0020002006360214200620003602180b02400240024020" + "014110490d0020052002410372360204200520026a220220014101723602042002" + "20016a200136020041002802c8dfc080002207450d01200741787141b8ddc08000" + "6a210641002802d0dfc0800021000240024041002802c0dfc08000220841012007" + "410376742207710d00410020082007723602c0dfc08000200621070c010b200628" + "020821070b200620003602082007200036020c2000200636020c20002007360208" + "0c010b2005200120026a2200410372360204200520006a22002000280204410172" + "3602040c010b410020023602d0dfc08000410020013602c8dfc080000b20054108" + "6a0f0b024020002006720d004100210641022004742200410020006b7220037122" + "00450d0320006841027441a8dcc080006a28020021000b2000450d010b03402000" + "20062000280204417871220520026b220820014922041b21032005200249210720" + "08200120041b21080240200028021022050d00200028021421050b200620032007" + "1b21062001200820071b21012005210020050d000b0b2006450d00024041002802" + "c8dfc0800022002002490d002001200020026b4f0d010b20062802182104024002" + "400240200628020c22002006470d00200641144110200628021422001b6a280200" + "22050d01410021000c020b20062802082205200036020c200020053602080c010b" + "200641146a200641106a20001b21070340200721082005220041146a200041106a" + "200028021422051b210720004114411020051b6a28020022050d000b2008410036" + "02000b2004450d030240200628021c41027441a8dcc080006a2205280200200646" + "0d0020044110411420042802102006461b6a20003602002000450d040c030b2005" + "200036020020000d02410041002802c4dfc08000417e200628021c77713602c4df" + "c080000c030b02400240024002400240024041002802c8dfc08000220020024f0d" + "00024041002802ccdfc08000220020024b0d0041002101200241af80046a220641" + "107640002200417f4622070d0720004110742205450d07410041002802d8dfc080" + "00410020064180807c7120071b22086a22003602d8dfc08000410041002802dcdf" + "c0800022012000200120004b1b3602dcdfc0800002400240024041002802d4dfc0" + "80002201450d0041a8ddc080002100034020002802002206200028020422076a20" + "05460d02200028020822000d000c030b0b0240024041002802e4dfc08000220045" + "0d00200020054d0d010b410020053602e4dfc080000b410041ff1f3602e8dfc080" + "00410020083602acddc08000410020053602a8ddc08000410041b8ddc080003602" + "c4ddc08000410041c0ddc080003602ccddc08000410041b8ddc080003602c0ddc0" + "8000410041c8ddc080003602d4ddc08000410041c0ddc080003602c8ddc0800041" + "0041d0ddc080003602dcddc08000410041c8ddc080003602d0ddc08000410041d8" + "ddc080003602e4ddc08000410041d0ddc080003602d8ddc08000410041e0ddc080" + "003602ecddc08000410041d8ddc080003602e0ddc08000410041e8ddc080003602" + "f4ddc08000410041e0ddc080003602e8ddc08000410041f0ddc080003602fcddc0" + "8000410041e8ddc080003602f0ddc08000410041003602b4ddc08000410041f8dd" + "c08000360284dec08000410041f0ddc080003602f8ddc08000410041f8ddc08000" + "360280dec0800041004180dec0800036028cdec0800041004180dec08000360288" + "dec0800041004188dec08000360294dec0800041004188dec08000360290dec080" + "0041004190dec0800036029cdec0800041004190dec08000360298dec080004100" + "4198dec080003602a4dec0800041004198dec080003602a0dec08000410041a0de" + "c080003602acdec08000410041a0dec080003602a8dec08000410041a8dec08000" + "3602b4dec08000410041a8dec080003602b0dec08000410041b0dec080003602bc" + "dec08000410041b0dec080003602b8dec08000410041b8dec080003602c4dec080" + "00410041c0dec080003602ccdec08000410041b8dec080003602c0dec080004100" + "41c8dec080003602d4dec08000410041c0dec080003602c8dec08000410041d0de" + "c080003602dcdec08000410041c8dec080003602d0dec08000410041d8dec08000" + "3602e4dec08000410041d0dec080003602d8dec08000410041e0dec080003602ec" + "dec08000410041d8dec080003602e0dec08000410041e8dec080003602f4dec080" + "00410041e0dec080003602e8dec08000410041f0dec080003602fcdec080004100" + "41e8dec080003602f0dec08000410041f8dec08000360284dfc08000410041f0de" + "c080003602f8dec0800041004180dfc0800036028cdfc08000410041f8dec08000" + "360280dfc0800041004188dfc08000360294dfc0800041004180dfc08000360288" + "dfc0800041004190dfc0800036029cdfc0800041004188dfc08000360290dfc080" + "0041004198dfc080003602a4dfc0800041004190dfc08000360298dfc080004100" + "41a0dfc080003602acdfc0800041004198dfc080003602a0dfc08000410041a8df" + "c080003602b4dfc08000410041a0dfc080003602a8dfc08000410041b0dfc08000" + "3602bcdfc08000410041a8dfc080003602b0dfc08000410020053602d4dfc08000" + "410041b0dfc080003602b8dfc080004100200841586a22003602ccdfc080002005" + "2000410172360204200520006a4128360204410041808080013602e0dfc080000c" + "080b200120054f0d00200620014b0d00200028020c450d030b410041002802e4df" + "c080002200200520002005491b3602e4dfc08000200520086a210641a8ddc08000" + "21000240024002400340200028020022072006460d01200028020822000d000c02" + "0b0b200028020c450d010b41a8ddc0800021000240034002402000280200220620" + "014b0d002001200620002802046a2206490d020b200028020821000c000b0b4100" + "20053602d4dfc080004100200841586a22003602ccdfc080002005200041017236" + "0204200520006a4128360204410041808080013602e0dfc080002001200641606a" + "41787141786a22002000200141106a491b2207411b36020441002902a8ddc08000" + "2109200741106a41002902b0ddc0800037020020072009370208410020083602ac" + "ddc08000410020053602a8ddc080004100200741086a3602b0ddc0800041004100" + "3602b4ddc080002007411c6a2100034020004107360200200041046a2200200649" + "0d000b20072001460d0720072007280204417e713602042001200720016b220041" + "01723602042007200036020002402000418002490d002001200010e3808080000c" + "080b200041f8017141b8ddc080006a21060240024041002802c0dfc08000220541" + "012000410376742200710d00410020052000723602c0dfc08000200621000c010b" + "200628020821000b200620013602082000200136020c2001200636020c20012000" + "3602080c070b200020053602002000200028020420086a36020420052002410372" + "3602042007410f6a41787141786a2201200520026a22006b2102200141002802d4" + "dfc08000460d03200141002802d0dfc08000460d04024020012802042206410371" + "4101470d0020012006417871220610a880808000200620026a2102200120066a22" + "0128020421060b20012006417e7136020420002002410172360204200020026a20" + "0236020002402002418002490d002000200210e3808080000c060b200241f80171" + "41b8ddc080006a21010240024041002802c0dfc080002206410120024103767422" + "02710d00410020062002723602c0dfc08000200121020c010b200128020821020b" + "200120003602082002200036020c2000200136020c200020023602080c050b4100" + "200020026b22013602ccdfc08000410041002802d4dfc08000220020026a220636" + "02d4dfc080002006200141017236020420002002410372360204200041086a2101" + "0c060b41002802d0dfc08000210102400240200020026b2206410f4b0d00410041" + "003602d0dfc08000410041003602c8dfc080002001200041037236020420012000" + "6a220020002802044101723602040c010b410020063602c8dfc080004100200120" + "026a22053602d0dfc0800020052006410172360204200120006a20063602002001" + "20024103723602040b200141086a0f0b2000200720086a360204410041002802d4" + "dfc080002200410f6a417871220141786a22063602d4dfc080004100200020016b" + "41002802ccdfc0800020086a22016a41086a22053602ccdfc08000200620054101" + "72360204200020016a4128360204410041808080013602e0dfc080000c030b4100" + "20003602d4dfc08000410041002802ccdfc0800020026a22023602ccdfc0800020" + "0020024101723602040c010b410020003602d0dfc08000410041002802c8dfc080" + "0020026a22023602c8dfc0800020002002410172360204200020026a2002360200" + "0b200541086a0f0b4100210141002802ccdfc08000220020024d0d004100200020" + "026b22013602ccdfc08000410041002802d4dfc08000220020026a22063602d4df" + "c080002006200141017236020420002002410372360204200041086a0f0b20010f" + "0b20002004360218024020062802102205450d0020002005360210200520003602" + "180b20062802142205450d0020002005360214200520003602180b024002402001" + "4110490d0020062002410372360204200620026a22002001410172360204200020" + "016a200136020002402001418002490d002000200110e3808080000c020b200141" + "f8017141b8ddc080006a21020240024041002802c0dfc080002205410120014103" + "76742201710d00410020052001723602c0dfc08000200221010c010b2002280208" + "21010b200220003602082001200036020c2000200236020c200020013602080c01" + "0b2006200120026a2200410372360204200620006a220020002802044101723602" + "040b200641086a0b1000024020000d0010a3808080000b000b140002402001450d" + "00200020011082808080000b0ba20b03087f017e017f2380808080004190016b22" + "04248080808000200441e8006a20002001109d8080800002400240024002400240" + "024002400240024002400240024020042d00684106460d00200441106a200441e8" + "006a41106a2205290300370300200441086a200441e8006a41086a220629030037" + "030020042004290368370300200441e8006a20022003109d8080800020042d0068" + "4106460d01200441186a41106a2005290300370300200441186a41086a20062903" + "003703002004200429036837031841dc81c0800041072004109e80808000220745" + "0d0241dc81c080004107200441186a109e808080002208450d03418482c0800041" + "04200441186a109e808080002206450d0420062d00004103462205450d05410021" + "092006280208410020051b210502400240200628020c220a0e020c00010b410121" + "0920052d000041556a0e030b080b080b20052d0000412b470d06200541016a2105" + "200a410a492106200a417f6a2209210a20060d070c080b2004200428026c36024c" + "41b880c08000412b200441cc006a41e480c0800041bc81c08000109f8080800000" + "0b2004200428026c36024c41b880c08000412b200441cc006a41e480c0800041cc" + "81c08000109f80808000000b41e481c0800010a080808000000b41f481c0800010" + "a080808000000b418882c0800010a080808000000b419882c0800010a080808000" + "000b200a2109200a41094f0d010b41002106034020052d000041506a220a41094b" + "0d02200541016a2105200a2006410a6c6a21062009417f6a22090d000c040b0b41" + "0021060340200a450d0320052d000041506a220b41094b0d01410221092006ad42" + "0a7e220c422088a74100470d02200541016a2105200a417f6a210a200b200ca722" + "0d6a2206200d4f0d000c020b0b410121090b200420093a006841b880c08000412b" + "200441e8006a41a880c0800041a882c08000109f80808000000b20042006360230" + "02400240200720081094808080000d00200441003a00370c010b20042006417f6a" + "220536023002402005450d00200441003a00370c010b200441013a00370b200441" + "0336026c200441d482c08000360268200442023702742004418180808000360258" + "20044182808080003602502004200441cc006a3602702004200441306a36025420" + "04200441376a36024c200441e8006a10a28080800041002d00e0dbc080001a0240" + "02400240024041091099808080002205450d00200520042d00373a000020044100" + "360254200442808080801037024c200441033a0088012004412036027820044100" + "360284012004418080c08000360280012004410036027020044100360268200420" + "0441cc006a36027c20043502304101200441e8006a1084808080000d0120044138" + "6a41086a200441cc006a41086a2802003602002004200429024c37033841002d00" + "e0dbc080001a200428023c210641041099808080002209450d0220092006360000" + "2005200636000120042004280240220a36024841002d00e0dbc080001a20044104" + "3602444104109980808000220b450d032005200a360005200b200a360000200441" + "05360250200441a083c0800036024c200442043702582004418180808000360284" + "01200441818080800036027c200441838080800036027420044184808080003602" + "6c200420063602642004200441e8006a3602542004200441c8006a360280012004" + "200441c4006a3602782004200441e4006a3602702004200441386a360268200441" + "cc006a10a280808000200b41041082808080002009410410828080800020044118" + "6a108a808080002004108a8080800002402003450d00200220031082808080000b" + "02402001450d00200020011082808080000b20044190016a24808080800020050f" + "0b41014109109a80808000000b41c0a5c080004137200441e4006a419880c08000" + "41c4a6c08000109f80808000000b41014104109a80808000000b41014104109a80" + "808000000bea0301057f23808080800041e0006b22032480808080002003410036" + "0228200320023602242003200136022020034180013a002c2003410036021c2003" + "428080808010370214200341c8006a200341146a10e88080800002400240024002" + "4020032d00484106460d00200341306a41106a2204200341c8006a41106a290300" + "370300200341306a41086a2205200341c8006a41086a2903003703002003200329" + "03483703300240024020032802282202200328022422064f0d0020032802202107" + "0340200720026a2d000041776a220141174b0d024101200174419380800471450d" + "022006200241016a2202470d000b200320063602280b2000200329033037030020" + "0041106a2004290300370300200041086a20052903003703002003280214220245" + "0d04200328021820021082808080000c040b20032002360228200341086a200720" + "062006200241016a220220062002491b10c78080800041002d00e0dbc080001a20" + "0328020c21012003280208210641141099808080002202450d012002200636020c" + "2002411636020020002002360204200041063a000020022001360210200341306a" + "108a808080000c020b2000200328024c360204200041063a00000c010b000b2003" + "2802142202450d00200328021820021082808080000b200341e0006a2480808080" + "000be60101077f41002103024020022d00004105470d0020022802042204450d00" + "2002280208210503402004418c026a210220042f0192032206410c6c2107417f21" + "08024002400340024020070d00200621080c020b20022802082103200228020421" + "09200841016a2108200741746a21072002410c6a2102417f200020092001200320" + "012003491b10f7808080002209200120036b20091b220341004720034100481b22" + "034101460d000b200341ff0171450d010b024020050d0041000f0b2005417f6a21" + "05200420084102746a4198036a28020021040c010b0b2004200841186c6a21030b" + "20030b8f0101017f23808080800041c0006b22052480808080002005200136020c" + "2005200036020820052003360214200520023602102005410236021c200541e486" + "c08000360218200542023702242005418580808000ad422086200541106aad8437" + "03382005418680808000ad422086200541086aad843703302005200541306a3602" + "20200541186a200410a480808000000b130041ec84c08000412b200010a6808080" + "00000b11002000350200410120011084808080000bbe0604017f017e037f017e23" + "808080800041c0006b22012480808080002001410636020c200141b0c2c0800036" + "0208024041002d0090dcc080004103460d0010db808080000b0240024002400240" + "024041002903f8dfc0800022024200520d0002404100280280e0c0800022030d00" + "10d5808080004100280280e0c0800021030b20032003280200220441016a360200" + "2004417f4c0d012003450d02200320032802002204417f6a360200200329030821" + "0220044101470d00200310d6808080000b024002400240200241002903e8dbc080" + "00510d0041002d00f4dbc08000210441012103410041013a00f4dbc08000200120" + "043a00182004450d012001420037023420014281808080c00037022c200141d8c3" + "c08000360228200141186a200141286a10d780808000000b024041002802f0dbc0" + "80002203417f460d00200341016a21030c020b41b8c4c08000412641fcc4c08000" + "10b780808000000b410020023703e8dbc080000b410020033602f0dbc080002001" + "41e8dbc0800036021041042103200141043a00182001200141106a360220200141" + "186a41dcb7c08000200010b280808000210020012d001821040240024020000d00" + "420021024117200441ff0171764101710d01200128021c22032802002100024020" + "0341046a28020022042802002205450d002000200511828080800080808080000b" + "024020042802042204450d00200020041082808080000b2003410c108280808000" + "410421030c010b200441ff01714104460d032001290318220642807e8321022006" + "a721030b200128021022002000280208417f6a2204360208024020040d00200041" + "003a000c200042003703000b200341ff01714104470d03200141c0006a24808080" + "80000f0b000b419cb9c0800041de004190bac0800010b780808000000b20014100" + "3602382001410136022c200141a0c3c0800036022820014204370230200141286a" + "41a8c3c0800010a480808000000b200120022003ad42ff01838437031020014102" + "36022c20014190c2c08000360228200142023702342001418780808000ad422086" + "200141106aad843703202001418680808000ad422086200141086aad8437031820" + "01200141186a360230200141286a41a0c2c0800010a480808000000b4701017f23" + "808080800041206b2200248080808000200041003602182000410136020c200041" + "8484c0800036020820004204370210200041086a41a084c0800010a48080800000" + "0b5601017f23808080800041206b2202248080808000200241106a200041106a29" + "0200370300200241086a200041086a290200370300200241013b011c2002200136" + "021820022000290200370300200210ab80808000000bbe0601057f200041786a22" + "012000417c6a280200220241787122006a21030240024020024101710d00200241" + "0271450d012001280200220220006a21000240200120026b220141002802d0dfc0" + "8000470d0020032802044103714103470d01410020003602c8dfc0800020032003" + "280204417e7136020420012000410172360204200320003602000f0b2001200210" + "a8808080000b024002400240024002400240200328020422024102710d00200341" + "002802d4dfc08000460d02200341002802d0dfc08000460d032003200241787122" + "0210a8808080002001200220006a2200410172360204200120006a200036020020" + "0141002802d0dfc08000470d01410020003602c8dfc080000f0b20032002417e71" + "36020420012000410172360204200120006a20003602000b2000418002490d0220" + "01200010e38080800041002101410041002802e8dfc08000417f6a22003602e8df" + "c0800020000d04024041002802b0ddc080002200450d0041002101034020014101" + "6a2101200028020822000d000b0b4100200141ff1f200141ff1f4b1b3602e8dfc0" + "80000f0b410020013602d4dfc08000410041002802ccdfc0800020006a22003602" + "ccdfc08000200120004101723602040240200141002802d0dfc08000470d004100" + "41003602c8dfc08000410041003602d0dfc080000b200041002802e0dfc0800022" + "044d0d0341002802d4dfc080002200450d034100210241002802ccdfc080002205" + "4129490d0241a8ddc080002101034002402001280200220320004b0d0020002003" + "20012802046a490d040b200128020821010c000b0b410020013602d0dfc0800041" + "0041002802c8dfc0800020006a22003602c8dfc080002001200041017236020420" + "0120006a20003602000f0b200041f8017141b8ddc080006a210302400240410028" + "02c0dfc08000220241012000410376742200710d00410020022000723602c0dfc0" + "8000200321000c010b200328020821000b200320013602082000200136020c2001" + "200336020c200120003602080f0b024041002802b0ddc080002201450d00410021" + "020340200241016a2102200128020822010d000b0b4100200241ff1f200241ff1f" + "4b1b3602e8dfc08000200520044d0d004100417f3602e0dfc080000b0b4d01017f" + "23808080800041206b220324808080800020034100360210200341013602042003" + "42043702082003200136021c200320003602182003200341186a36020020032002" + "10a480808000000b840601057f0240024002402000417c6a220328020022044178" + "71220541044108200441037122061b20016a490d0002402006450d002005200141" + "276a4b0d020b41102002410b6a4178712002410b491b210102400240024020060d" + "002001418002490d0120052001410472490d01200520016b418180084f0d010c02" + "0b200041786a220720056a21060240024002400240200520014f0d002006410028" + "02d4dfc08000460d03200641002802d0dfc08000460d0220062802042204410271" + "0d042004417871220420056a22052001490d042006200410a88080800020052001" + "6b22024110490d0120032001200328020041017172410272360200200720016a22" + "012002410372360204200720056a220520052802044101723602042001200210a9" + "8080800020000f0b200520016b2202410f4d0d0420032001200441017172410272" + "360200200720016a22052002410372360204200620062802044101723602042005" + "200210a98080800020000f0b200320052003280200410171724102723602002007" + "20056a2202200228020441017236020420000f0b41002802c8dfc0800020056a22" + "052001490d0102400240200520016b2202410f4b0d002003200441017120057241" + "0272360200200720056a2202200228020441017236020441002102410021010c01" + "0b20032001200441017172410272360200200720016a2201200241017236020420" + "0720056a2205200236020020052005280204417e713602040b410020013602d0df" + "c08000410020023602c8dfc0800020000f0b41002802ccdfc0800020056a220520" + "014b0d040b0240200210998080800022050d0041000f0b20052000417c41782003" + "28020022014103711b20014178716a2201200220012002491b10fa808080002102" + "200010a580808000200221000b20000f0b419db8c08000412e41ccb8c0800010a6" + "80808000000b41dcb8c08000412e418cb9c0800010a680808000000b2003200120" + "0441017172410272360200200720016a2202200520016b22054101723602044100" + "20053602ccdfc08000410020023602d4dfc0800020000b820301047f200028020c" + "21020240024002402001418002490d002000280218210302400240024020022000" + "470d00200041144110200028021422021b6a28020022010d01410021020c020b20" + "002802082201200236020c200220013602080c010b200041146a200041106a2002" + "1b21040340200421052001220241146a200241106a200228021422011b21042002" + "4114411020011b6a28020022010d000b200541003602000b2003450d0202402000" + "28021c41027441a8dcc080006a22012802002000460d0020034110411420032802" + "102000461b6a20023602002002450d030c020b2001200236020020020d01410041" + "002802c4dfc08000417e200028021c77713602c4dfc080000c020b024020022000" + "2802082204460d002004200236020c200220043602080f0b410041002802c0dfc0" + "8000417e200141037677713602c0dfc080000f0b20022003360218024020002802" + "102201450d0020022001360210200120023602180b20002802142201450d002002" + "2001360214200120023602180f0b0ba00401027f200020016a2102024002402000" + "28020422034101710d002003410271450d012000280200220320016a2101024020" + "0020036b220041002802d0dfc08000470d0020022802044103714103470d014100" + "20013602c8dfc0800020022002280204417e713602042000200141017236020420" + "0220013602000c020b2000200310a8808080000b02400240024002402002280204" + "22034102710d00200241002802d4dfc08000460d02200241002802d0dfc0800046" + "0d0320022003417871220310a8808080002000200320016a220141017236020420" + "0020016a2001360200200041002802d0dfc08000470d01410020013602c8dfc080" + "000f0b20022003417e7136020420002001410172360204200020016a2001360200" + "0b02402001418002490d002000200110e3808080000f0b200141f8017141b8ddc0" + "80006a21020240024041002802c0dfc08000220341012001410376742201710d00" + "410020032001723602c0dfc08000200221010c010b200228020821010b20022000" + "3602082001200036020c2000200236020c200020013602080f0b410020003602d4" + "dfc08000410041002802ccdfc0800020016a22013602ccdfc08000200020014101" + "72360204200041002802d0dfc08000470d01410041003602c8dfc0800041004100" + "3602d0dfc080000f0b410020003602d0dfc08000410041002802c8dfc080002001" + "6a22013602c8dfc0800020002001410172360204200020016a20013602000f0b0b" + "7902017f017e23808080800041306b220324808080800020032001360204200320" + "003602002003410236020c200341cc85c080003602082003420237021420034181" + "80808000ad42208622042003ad8437032820032004200341046aad843703202003" + "200341206a360210200341086a200210a480808000000b5d01027f238080808000" + "41206b220124808080800020002802182102200141106a200041106a2902003703" + "00200141086a200041086a2902003703002001200036021c200120023602182001" + "2000290200370300200110e480808000000b490002402002418080c400460d0020" + "00200220012802101181808080008080808000450d0041010f0b024020030d0041" + "000f0b200020032004200128020c11808080800080808080000b7902017f017e23" + "808080800041306b22032480808080002003200036020020032001360204200341" + "0236020c200341bc8ac08000360208200342023702142003418180808000ad4220" + "862204200341046aad84370328200320042003ad843703202003200341206a3602" + "10200341086a200210a480808000000b820302017f017e23808080800041f0006b" + "2203248080808000200341ccb7c0800036020c20032000360208200341ccb7c080" + "00360214200320013602102003410236021c200341dc85c0800036021802402002" + "2802000d002003410336025c2003419086c0800036025820034203370264200341" + "8580808000ad4220862204200341106aad8437034820032004200341086aad8437" + "03402003418680808000ad422086200341186aad843703382003200341386a3602" + "60200341d8006a4184c4c0800010a480808000000b200341206a41106a20024110" + "6a290200370300200341206a41086a200241086a29020037030020032002290200" + "3703202003410436025c200341c486c08000360258200342043702642003418580" + "808000ad4220862204200341106aad8437035020032004200341086aad84370348" + "2003418880808000ad422086200341206aad843703402003418680808000ad4220" + "86200341186aad843703382003200341386a360260200341d8006a4184c4c08000" + "10a480808000000b1c0020002802002001200028020428020c1181808080008080" + "8080000b14002001200028020020002802041093808080000b1400200128021420" + "01280218200010b2808080000bbf05010a7f23808080800041306b220324808080" + "8000200341033a002c2003412036021c4100210420034100360228200320013602" + "2420032000360220200341003602142003410036020c0240024002400240024020" + "0228021022050d00200228020c2200450d01200228020821012000410374210620" + "00417f6a41ffffffff017141016a21042002280200210003400240200041046a28" + "02002207450d00200328022020002802002007200328022428020c118080808000" + "80808080000d040b20012802002003410c6a200128020411818080800080808080" + "000d03200141086a2101200041086a2100200641786a22060d000c020b0b200228" + "02142201450d00200141057421082001417f6a41ffffff3f7141016a2104200228" + "02082109200228020021004100210603400240200041046a2802002201450d0020" + "0328022020002802002001200328022428020c11808080800080808080000d030b" + "2003200520066a220141106a28020036021c20032001411c6a2d00003a002c2003" + "200141186a2802003602282001410c6a28020021074100210a4100210b02400240" + "0240200141086a2802000e03010002010b2007410374210c4100210b2009200c6a" + "220c2802040d01200c28020021070b4101210b0b200320073602102003200b3602" + "0c200141046a280200210702400240024020012802000e03010002010b20074103" + "74210b2009200b6a220b2802040d01200b28020021070b4101210a0b2003200736" + "02182003200a3602142009200141146a2802004103746a22012802002003410c6a" + "200128020411818080800080808080000d02200041086a21002008200641206a22" + "06470d000b0b200420022802044f0d012003280220200228020020044103746a22" + "012802002001280204200328022428020c1180808080008080808000450d010b41" + "0121010c010b410021010b200341306a24808080800020010bd70201057f238080" + "8080004180016b22022480808080000240024002400240200128021c2203411071" + "0d0020034120710d012000ad4101200110848080800021000c030b41ff00210303" + "402002200322046a22052000410f712203413072200341d7006a2003410a491b3a" + "00002004417f6a210320004110492106200041047621002006450d000c020b0b41" + "ff00210303402002200322046a22052000410f712203413072200341376a200341" + "0a491b3a00002004417f6a210320004110492106200041047621002006450d000b" + "02402004418101490d002004418001419887c08000108580808000000b20014101" + "41a887c0800041022005418101200441016a6b10868080800021000c010b024020" + "04418101490d002004418001419887c08000108580808000000b2001410141a887" + "c0800041022005418101200441016a6b10868080800021000b20024180016a2480" + "8080800020000b2200200128021441c284c08000410e200128021828020c118080" + "80800080808080000b6001017f23808080800041306b2200248080808000200041" + "0136020c200041e484c08000360208200042013702142000418980808000ad4220" + "862000412f6aad843703202000200041206a360210200041086a41e8c1c0800010" + "a480808000000b7902017f017e23808080800041306b2203248080808000200320" + "00360200200320013602042003410236020c200341f08ac0800036020820034202" + "3702142003418180808000ad4220862204200341046aad84370328200320042003" + "ad843703202003200341206a360210200341086a200210a480808000000b6a0101" + "7f23808080800041306b22032480808080002003200136020c2003200036020820" + "034101360214200341f0bac080003602102003420137021c2003418680808000ad" + "422086200341086aad843703282003200341286a360218200341106a200210a480" + "808000000b920c01057f23808080800041206b2203248080808000024002400240" + "024002400240024002400240024002400240024002400240024020010e28060101" + "010101010101020401010301010101010101010101010101010101010101010901" + "01010107000b200141dc00460d040b2001418006490d0b20024101710d060c0b0b" + "20004180043b010a20004200370102200041dce8013b01000c0c0b20004180043b" + "010a20004200370102200041dce4013b01000c0b0b20004180043b010a20004200" + "370102200041dcdc013b01000c0a0b20004180043b010a20004200370102200041" + "dcb8013b01000c090b20004180043b010a20004200370102200041dce0003b0100" + "0c080b200241800271450d0620004180043b010a20004200370102200041dcce00" + "3b01000c070b200141aa9d044b410474220220024108722202200241027441809b" + "c080006a280200410b742001410b7422024b1b2204200441047222042004410274" + "41809bc080006a280200410b7420024b1b22042004410272220420044102744180" + "9bc080006a280200410b7420024b1b2204200441016a2204200441027441809bc0" + "80006a280200410b7420024b1b2204200441016a2204200441027441809bc08000" + "6a280200410b7420024b1b220441027441809bc080006a280200410b7422052002" + "4620052002496a20046a220441204b0d01200441027441809bc080006a22052802" + "00411576210241d70521060240024020044120460d002005280204411576210620" + "040d00410021040c010b200441027441fc9ac080006a28020041ffffff00712104" + "0b024020062002417f736a450d00200120046b2107200241d705200241d7054b1b" + "21052006417f6a210641002104034020052002460d042004200241849cc080006a" + "2d00006a220420074b0d012006200241016a2202470d000b200621020b20024101" + "71450d04200341003a000a200341003b01082003200141147641b284c080006a2d" + "00003a000b20032001410476410f7141b284c080006a2d00003a000f2003200141" + "0876410f7141b284c080006a2d00003a000e20032001410c76410f7141b284c080" + "006a2d00003a000d20032001411076410f7141b284c080006a2d00003a000c2003" + "41086a20014101726741027622026a220441fb003a00002004417f6a41f5003a00" + "00200341086a2002417e6a22026a41dc003a0000200341086a41086a2204200141" + "0f7141b284c080006a2d00003a00002000410a3a000b200020023a000a20002003" + "290208370200200341fd003a0011200041086a20042f01003b01000c060b200241" + "808004710d020c040b2004412141e09ac0800010aa80808000000b200541d70541" + "f09ac0800010aa80808000000b20004180043b010a20004200370102200041dcc4" + "003b01000c020b024020014120490d00200141ff00490d01024020014180800449" + "0d0002402001418080084f0d00200141c48fc08000412c419c90c0800041c40141" + "e091c0800041c20310b980808000450d020c030b200141feffff0071419ef00a46" + "0d01200141e0ffff007141e0cd0a460d01200141c091756a41794b0d01200141d0" + "e2746a41714b0d0120014190a8746a41704b0d012001418090746a41dd6c4b0d01" + "2001418080746a419d744b0d01200141b0d9736a417a4b0d0120014180fe476a41" + "afc5544b0d01200141f083384f0d010c020b200141a295c08000412841f295c080" + "0041a002419298c0800041ad0210b9808080000d010b200341003a001620034100" + "3b01142003200141147641b284c080006a2d00003a001720032001410476410f71" + "41b284c080006a2d00003a001b20032001410876410f7141b284c080006a2d0000" + "3a001a20032001410c76410f7141b284c080006a2d00003a001920032001411076" + "410f7141b284c080006a2d00003a0018200341146a20014101726741027622026a" + "220441fb003a00002004417f6a41f5003a0000200341146a2002417e6a22026a41" + "dc003a0000200341146a41086a22042001410f7141b284c080006a2d00003a0000" + "2000410a3a000b200020023a000a20002003290214370200200341fd003a001d20" + "0041086a20042f01003b01000c010b2000200136020420004180013a00000b2003" + "41206a2480808080000be90201067f200120024101746a210720004180fe037141" + "0876210841002109200041ff0171210a02400240024002400340200141026a210b" + "200920012d000122026a210c024020012d000022012008460d00200120084b0d04" + "200c2109200b2101200b2007470d010c040b200c2009490d01200c20044b0d0220" + "0320096a21010340024020020d00200c2109200b2101200b2007470d020c050b20" + "02417f6a210220012d00002109200141016a21012009200a470d000b0b41002102" + "0c030b2009200c41b48fc0800010b680808000000b200c200441b48fc0800010ad" + "80808000000b200041ffff03712109200520066a210c410121020340200541016a" + "210a0240024020052c000022014100480d00200a21050c010b0240200a200c460d" + "00200141ff007141087420052d0001722101200541026a21050c010b41a48fc080" + "0010a080808000000b200920016b22094100480d01200241017321022005200c47" + "0d000b0b20024101710b13002000200120022003200410bb80808000000bd10902" + "057f017e23808080800041f0006b22052480808080002005200336020c20052002" + "3602080240024002400240024002400240024002402001418102490d0002402000" + "2c00800241bf7f4c0d00410321060c030b20002c00ff0141bf7f4c0d0141022106" + "0c020b200520013602142005200036021041002106410121070c020b20002c00fe" + "0141bf7f4a21060b2000200641fd016a22066a2c000041bf7f4c0d012005200636" + "0214200520003602104105210641808dc0800021070b2005200636021c20052007" + "3602180240200220014b22060d00200320014b0d00200220034b0d020240200245" + "0d00200220014f0d0020032002200020026a2c000041bf7f4a1b21030b20052003" + "360220200121020240200320014f0d00200341016a220641002003417d6a220220" + "0220034b1b2202490d04024020062002460d00200620026b21080240200020036a" + "2c000041bf7f4c0d002008417f6a21070c010b20022003460d000240200020066a" + "2206417e6a22032c000041bf7f4c0d002008417e6a21070c010b200020026a2209" + "2003460d0002402006417d6a22032c000041bf7f4c0d002008417d6a21070c010b" + "20092003460d0002402006417c6a22032c000041bf7f4c0d002008417c6a21070c" + "010b20092003460d002008417b6a21070b200720026a21020b02402002450d0002" + "40200220014f0d00200020026a2c000041bf7f4a0d010c070b20022001470d060b" + "20022001460d040240024002400240200020026a22032c00002201417f4a0d0020" + "032d0001413f7121002001411f7121062001415f4b0d0120064106742000722101" + "0c020b2005200141ff0171360224410121010c020b200041067420032d0002413f" + "717221000240200141704f0d0020002006410c747221010c010b20004106742003" + "2d0003413f71722006411274418080f00071722201418080c400460d060b200520" + "01360224024020014180014f0d00410121010c010b024020014180104f0d004102" + "21010c010b41034104200141808004491b21010b20052002360228200520012002" + "6a36022c20054105360234200541888ec080003602302005420537023c20054186" + "80808000ad422086220a200541186aad843703682005200a200541106aad843703" + "602005418a80808000ad422086200541286aad843703582005418b80808000ad42" + "2086200541246aad843703502005418180808000ad422086200541206aad843703" + "482005200541c8006a360238200541306a200410a480808000000b200520022003" + "20061b36022820054103360234200541c88ec080003602302005420337023c2005" + "418680808000ad422086220a200541186aad843703582005200a200541106aad84" + "3703502005418180808000ad422086200541286aad843703482005200541c8006a" + "360238200541306a200410a480808000000b2000200141002006200410ba808080" + "00000b20054104360234200541a88dc080003602302005420437023c2005418680" + "808000ad422086220a200541186aad843703602005200a200541106aad84370358" + "2005418180808000ad422086220a2005410c6aad843703502005200a200541086a" + "ad843703482005200541c8006a360238200541306a200410a480808000000b2002" + "200641f48ec0800010b680808000000b200410a080808000000b20002001200220" + "01200410ba80808000000b4d01017f4101210202402000280200200110b3808080" + "000d00200128021441b084c080004102200128021828020c118080808000808080" + "80000d002000280204200110b38080800021020b20020bc40101047f2380808080" + "0041106b2202248080808000410121030240200128021422044127200128021822" + "05280210220111818080800080808080000d00200241046a200028020041810210" + "b8808080000240024020022d0004418001470d0020042002280208200111818080" + "80008080808000450d010c020b2004200241046a20022d000e22006a20022d000f" + "20006b200528020c11808080800080808080000d010b2004412720011181808080" + "00808080800021030b200241106a24808080800020030b2701017f200028020022" + "002000411f7522027320026bad2000417f73411f7620011084808080000b500103" + "7f200121032002210402402001280288022205450d00200241016a210320012f01" + "900321040b200141c80341980320021b1082808080002000200536020020002004" + "ad4220862003ad843702040bec0201047f2000418c026a22052001410c6c6a2106" + "02400240200141016a220720002f01920322084d0d002006200229020037020020" + "0641086a200241086a2802003602000c010b20052007410c6c6a2006200820016b" + "2205410c6c10f9808080001a200641086a200241086a2802003602002006200229" + "02003702002000200741186c6a2000200141186c6a200541186c10f9808080001a" + "0b200841016a21022000200141186c6a22062003290300370300200641106a2003" + "41106a290300370300200641086a200341086a29030037030020004198036a2103" + "0240200141026a2205200841026a22064f0d00200320054102746a200320074102" + "746a200820016b41027410f9808080001a0b200320074102746a20043602002000" + "20023b0192030240200720064f0d00200841016a2103200141027420006a419c03" + "6a2107034020072802002208200141016a22013b01900320082000360288022007" + "41046a210720032001470d000b0b0bed04010a7f23808080800041d0006b220224" + "808080800041002d00e0dbc080001a200128020022032f01920321040240024002" + "400240024041c8031099808080002205450d002005410036028802200520012802" + "082206417f7320032f01920322076a22083b019203200241286a41086a2003418c" + "026a22092006410c6c6a220a41086a280200360200200241386a41086a20032006" + "41186c6a220b41086a290300370300200241386a41106a200b41106a2903003703" + "002002200a2902003703282002200b2903003703382008410c4f0d012007200641" + "016a220b6b2008470d022005418c026a2009200b410c6c6a2008410c6c10fa8080" + "80001a20052003200b41186c6a200841186c10fa80808000210b200320063b0192" + "03200241086a200241286a41086a280200360200200241186a200241386a41086a" + "290300370300200241206a200241c8006a29030037030020022002290328370300" + "20022002290338370310200b2f019203220541016a21082005410c4f0d03200420" + "066b220a2008470d04200b4198036a200320064102746a419c036a200a41027410" + "fa80808000210a200128020421014100210602400340200a20064102746a280200" + "220820063b0190032008200b36028802200620054f0d01200620062005496a2206" + "20054d0d000b0b2000200136022c2000200336022820002002412810fa80808000" + "220620013602342006200b360230200241d0006a2480808080000f0b000b200841" + "0b41a0a4c0800010ad80808000000b41e8a3c0800041284190a4c0800010a68080" + "8000000b2008410c41b0a4c0800010ad80808000000b41e8a3c0800041284190a4" + "c0800010a680808000000b900801017f23808080800041f0006b22022480808080" + "0020002802002100200241003602482002428080808010370240200241033a006c" + "2002412036025c2002410036026820024198a5c080003602642002410036025420" + "02410036024c2002200241c0006a36026002400240024002400240024002400240" + "024002400240024002400240024002400240024002400240024002400240024002" + "400240024020002802000e191718000102030405060708090a0b0c0d0e0f101112" + "13141516170b200241c0006a41d9a6c0800041181091808080000d190c180b2002" + "41c0006a41f1a6c08000411b1091808080000d180c170b200241c0006a418ca7c0" + "8000411a1091808080000d170c160b200241c0006a41a6a7c08000411910918080" + "80000d160c150b200241c0006a41bfa7c08000410c1091808080000d150c140b20" + "0241c0006a41cba7c0800041131091808080000d140c130b200241c0006a41dea7" + "c0800041131091808080000d130c120b200241c0006a41f1a7c08000410e109180" + "8080000d120c110b200241c0006a41ffa7c08000410e1091808080000d110c100b" + "200241c0006a418da8c08000410c1091808080000d100c0f0b200241c0006a4199" + "a8c08000410e1091808080000d0f0c0e0b200241c0006a41a7a8c08000410e1091" + "808080000d0e0c0d0b200241c0006a41b5a8c0800041131091808080000d0d0c0c" + "0b200241c0006a41c8a8c08000411a1091808080000d0c0c0b0b200241c0006a41" + "e2a8c08000413e1091808080000d0b0c0a0b200241c0006a41a0a9c08000411410" + "91808080000d0a0c090b200241c0006a41b4a9c0800041341091808080000d090c" + "080b200241c0006a41e8a9c08000412c1091808080000d080c070b200241c0006a" + "4194aac0800041241091808080000d070c060b200241c0006a41b8aac08000410e" + "1091808080000d060c050b200241c0006a41c6aac0800041131091808080000d05" + "0c040b200241c0006a41d9aac08000411c1091808080000d040c030b200241c000" + "6a41f5aac0800041181091808080000d030c020b200241c0006a20002802042000" + "280208109180808000450d010c020b200041046a200241cc006a10c3808080000d" + "010b200241306a41086a200241c0006a41086a2802003602002002200229024037" + "0330200241818080800036022c20024181808080003602242002418c8080800036" + "021c20024104360204200241a8abc080003602002002420337020c200220004110" + "6a36022820022000410c6a3602202002200241306a3602182002200241186a3602" + "0820012802142001280218200210b2808080002100024020022802302201450d00" + "200228023420011082808080000b200241f0006a24808080800020000f0b41c0a5" + "c080004137200241186a41b0a5c0800041c4a6c08000109f80808000000be50301" + "017f23808080800041c0006b220224808080800002400240024002400240024020" + "002d00000e0400010203000b2002200028020436020441002d00e0dbc080001a41" + "141099808080002200450d04200041106a410028009cc5c0800036000020004108" + "6a4100290094c5c080003700002000410029008cc5c08000370000200241143602" + "102002200036020c200241143602082002410336022c200241bcc1c08000360228" + "200242023702342002418d80808000ad422086200241046aad843703202002418e" + "80808000ad422086200241086aad843703182002200241186a3602302001280214" + "2001280218200241286a10b280808000210020022802082201450d03200228020c" + "20011082808080000c030b20002d000121002002410136022c200241f0bac08000" + "360228200242013702342002418680808000ad422086200241186aad8437030820" + "022000410274220041e0c5c080006a28020036021c200220004184c7c080006a28" + "02003602182002200241086a36023020012802142001280218200241286a10b280" + "80800021000c020b20012000280204220028020020002802041093808080002100" + "0c010b200028020422002802002001200028020428021011818080800080808080" + "0021000b200241c0006a24808080800020000f0b000bd507010d7f238080808000" + "41106b220224808080800020002802082103200028020421044101210502402001" + "2802142206412220012802182207280210220811818080800080808080000d0002" + "40024020030d0041002103410021000c010b410021094100210a2004210b200321" + "0c024002400340200b200c6a210d4100210002400340200b20006a220e2d000022" + "0141817f6a41ff017141a101490d0120014122460d01200141dc00460d01200c20" + "0041016a2200470d000b200a200c6a210a0c030b02400240200e2c00002201417f" + "4c0d00200e41016a210b200141ff017121010c010b200e2d0001413f71210b2001" + "411f71210c02402001415f4b0d00200c410674200b722101200e41026a210b0c01" + "0b200b410674200e2d0002413f7172210b0240200141704f0d00200b200c410c74" + "722101200e41036a210b0c010b200b410674200e2d0003413f7172200c41127441" + "8080f00071722101200e41046a210b0b2000200a6a2100200241046a2001418180" + "0410b8808080000240024020022d0004418001460d0020022d000f20022d000e6b" + "41ff01714101460d0020002009490d0302402009450d000240200920034f0d0020" + "0420096a2c000041bf7f4a0d010c050b20092003470d040b02402000450d000240" + "200020034f0d00200420006a2c000041bf7f4c0d050c010b20002003470d040b20" + "06200420096a200020096b200728020c220e11808080800080808080000d010240" + "024020022d0004418001470d002006200228020820081181808080008080808000" + "450d010c030b2006200241046a20022d000e220c6a20022d000f200c6b200e1180" + "8080800080808080000d020b0240024020014180014f0d004101210e0c010b0240" + "20014180104f0d004102210e0c010b41034104200141808004491b210e0b200e20" + "006a21090b0240024020014180014f0d00410121010c010b024020014180104f0d" + "00410221010c010b41034104200141808004491b21010b200120006a210a200d20" + "0b6b220c0d010c030b0b410121050c030b2004200320092000419089c0800010ba" + "80808000000b02402009200a4b0d004100210002402009450d000240200920034f" + "0d0020092100200420096a2c000041bf7f4c0d020c010b2003210020092003470d" + "010b0240200a0d00410021030c020b0240200a20034f0d00200021092004200a6a" + "2c000041bf7f4c0d01200a21030c020b20002109200a2003460d010b2004200320" + "09200a41a089c0800010ba80808000000b2006200420006a200320006b20072802" + "0c11808080800080808080000d0020064122200811818080800080808080002105" + "0b200241106a24808080800020050b870102017c017e0240024002402001280200" + "0e03000102000b20004202370308200020012b0308220239031020002002bd42ff" + "ffffffffffffffff00834280808080808080f8ff00534101743a00000f0b200042" + "00370308200041023a0000200020012903083703100f0b200041023a0000200020" + "01290308220337031020002003423f883703080be411020b7f027e238080808000" + "41c0016b2204248080808000024002400240024002400240024002400240024002" + "400240024020012802002205450d00200228020821062002280204210720012802" + "042108024003402005418c026a210920052f019203220a410c6c210b417f210c02" + "40024003400240200b0d00200a210c0c020b2009280208210d2009280204210e20" + "0c41016a210c200b41746a210b2009410c6a2109417f2007200e2006200d200620" + "0d491b10f780808000220e2006200d6b200e1b220d410047200d4100481b220d41" + "01460d000b200d41ff0171450d010b2008450d022008417f6a21082005200c4102" + "746a4198036a28020021050c010b0b20022802002209450d0c2007200910828080" + "80000c0c0b2002290204220fa721092002280200220b418080808078470d032009" + "21050c010b2002290204220fa721052002280200220d418080808078470d010b20" + "01210c0c090b41002d00e0dbc080001a4198031099808080002209450d02200941" + "013b01920320094100360288022009200f422088a7ad4220862005ad8437039002" + "2009200d36028c0220014280808080103702042001200936020020092003290300" + "370300200941086a200341086a290300370300200941106a200341106a29030037" + "03000c010b200f422088a7ad4220862009ad84210f024002400240024002402005" + "2f0192032209410b490d00200441086a21084104210d200c4105490d03200c210d" + "200c417b6a0e020302010b2005418c026a220e200c410c6c6a210d02400240200c" + "41016a220620094d0d00200d200f370204200d200b3602000c010b200e2006410c" + "6c6a200d2009200c6b220e410c6c10f9808080001a200d200f370204200d200b36" + "02002005200641186c6a2005200c41186c6a200e41186c10f9808080001a0b2005" + "200c41186c6a220d41106a200341106a290300370300200d200329030037030020" + "0d41086a200341086a2903003703002005200941016a3b0192030c030b200c4179" + "6a210c200441f8006a21084106210d0c010b4100210c200441f8006a2108410521" + "0d0b41002d00e0dbc080001a4198031099808080002209450d02200941003b0192" + "0320094100360288022009200d417f7320052f01920322076a22063b0192032004" + "4188016a41086a2005200d41186c6a220e41086a29030037030020044188016a41" + "106a200e41106a2903003703002004200e290300370388012006410c4f0d032007" + "200d41016a220e6b2006470d042005418c026a2202200d410c6c6a220729020421" + "10200728020021072009418c026a2002200e410c6c6a2006410c6c10fa80808000" + "1a20092005200e41186c6a200641186c10fa8080800021062005200d3b01920320" + "0441dc006a410c6a20044190016a290300370200200441f0006a20044198016a29" + "030037020020042004290388013702602004200536020820042006360278200828" + "0200220d418c026a200c410c6c6a210602400240200d2f019203220e200c4b0d00" + "2006200f3702042006200b3602000c010b2006410c6a2006200e200c6b2208410c" + "6c10f9808080001a2006200f3702042006200b360200200d200c41186c6a220b41" + "186a200b200841186c10f9808080001a0b200d200c41186c6a220b41106a200341" + "106a290300370300200b2003290300370300200b41086a200341086a2903003703" + "00200d200e41016a3b0192032007418080808078460d00200441c4006a200441dc" + "006a41086a290200370200200441cc006a200441dc006a41106a29020037020020" + "0441306a41246a200441dc006a41186a2802003602002004201037023420042007" + "3602302004200429025c37023c024002400240200528028802220b0d004100210c" + "0c010b200441306a4104722108200441b8016a210220044188016a410472210720" + "0441b0016a2103200441c0006a210e4100210c4100210603402006200c470d0820" + "052f019003210d200b2f019203410b490d02200641016a21060240024002400240" + "024002400240200d4105490d00200d417b6a0e020203010b200441043602800120" + "04200636027c2004200b3602782003210b0c040b20044106360280012004200636" + "027c2004200b360278200d41796a210d0c020b2004410536028001200420063602" + "7c2004200b36027820044188016a200441f8006a10c18080800020042802b00141" + "05200441306a200e200910c080808000200428028801210d200441086a20074124" + "10fa808080001a0c030b20044105360280012004200636027c2004200b36027841" + "00210d0b2002210b0b20044188016a200441f8006a10c180808000200b28020020" + "0d200441306a200e200910c080808000200428028801210d200441086a20074124" + "10fa808080001a0b20042802bc01210c20042802b801210920042802b401210620" + "042802b0012105200d418080808078460d032004200d3602302008200441086a41" + "2410fa808080001a200528028802220b0d000b0b2001280200220b450d0741002d" + "00e0dbc080001a2001280204210641c803109980808000220d450d03200d200b36" + "029803200d41003b019203200d410036028802200b41003b019003200b200d3602" + "88022001200641016a3602042001200d3602002006200c470d08200d2004290330" + "37028c02200d41013b019203200d2004290340370300200d200936029c03200d41" + "94026a200441306a41086a280200360200200d41086a200441c8006a2903003703" + "00200d41106a200441d0006a2903003703002009200d36028802200941013b0190" + "030c010b200b200d200441306a200e200910c0808080000b200120012802084101" + "6a3602080b200041063a00000c070b000b2006410b41a0a4c0800010ad80808000" + "000b41e8a3c0800041284190a4c0800010a680808000000b41c0a4c08000413541" + "f8a4c0800010a680808000000b41bca2c0800010a080808000000b41a7a3c08000" + "413041d8a3c0800010a680808000000b20002005200c41186c6a22092903003703" + "00200041106a200941106a220d290300370300200041086a200941086a220b2903" + "0037030020092003290300370300200b200341086a290300370300200d20034110" + "6a2903003703000b200441c0016a2480808080000be60301057f02400240024002" + "400240024020022003490d00410121044100210520034101480d04200120036a21" + "060240200341034b0d000340200620014d0d062006417f6a22062d0000410a470d" + "000c050b0b024041808284082006417c6a2800002207418a94a8d000736b200772" + "41808182847871418081828478460d000340200620014d0d062006417f6a22062d" + "0000410a470d000c050b0b200320064103716b210720034109490d010340024002" + "4020074108480d004180828408200120076a220641786a2802002208418a94a8d0" + "00736b20087241808182847871418081828478460d010b200120076a21060c040b" + "200741786a210741808284082006417c6a2802002208418a94a8d000736b200872" + "41808182847871418081828478460d000c030b0b2003200241b8adc0800010ad80" + "808000000b200120076a21060340200620014d0d032006417f6a22062d0000410a" + "470d000c020b0b0340200620014d0d022006417f6a22062d0000410a470d000b0b" + "200620016b41016a220520024b0d010b0240200120056a20014d0d004100210620" + "0521070340200620012d0000410a466a2106200141016a21012007417f6a22070d" + "000b200641016a21040b200020043602002000200320056b3602040f0b20052002" + "41c8adc0800010ad80808000000b9b0d02097f017e23808080800041306b220324" + "808080800002400240024002400240024002400240024003400240024020012802" + "08220420012802042205460d00024002400240200420054f0d0020012802002206" + "20046a2d000022074122460d01200741dc00460d0120074120490d012006200441" + "016a22086a21094100200520086b417871220a6b210703402009210b024020070d" + "002001200a20086a360208200110c9808080002001280204210520012802082107" + "0c040b200741086a2107200b41086a2109200b290000220c42a2c48891a2c48891" + "228542fffdfbf7efdfbfff7e7c200c42e0bffffefdfbf7ef5f7c84200c42dcb8f1" + "e2c58b97aedc008542fffdfbf7efdfbfff7e7c84200c427f858342808182848890" + "a0c0807f83220c500d000b2001200b20066b200c7aa74103766a22073602080c02" + "0b2004200541d8adc0800010aa808080000c080b200421070b20072005470d0120" + "0521040b200341086a20012802002004200410c78080800041002d00e0dbc08000" + "1a200328020c210b2003280208210941141099808080002207450d052007200936" + "020c2007410436020020002007360204200041023602002007200b3602100c0a0b" + "024020072005490d002007200541e8adc0800010aa80808000000b024020012802" + "00220b20076a2d0000220941dc00460d00024020094122470d002002280208450d" + "0520072004490d072002200b20046a200720046b10ca808080004101210b200120" + "0741016a360208200341286a20012002280204200228020810cb80808000200328" + "02282207450d032000200328022c3602080c040b2001200741016a220736020820" + "0341106a200b2005200710c78080800041002d00e0dbc080001a2003280214210b" + "2003280210210941141099808080002207450d052007200936020c200741103602" + "0020002007360204200041023602002007200b3602100c0a0b024020072004490d" + "002002200b20046a200720046b10ca808080002001200741016a22093602080240" + "20092005490d00200341206a200b2005200910c78080800041002d00e0dbc08000" + "1a2003280224210b2003280220210941141099808080002207450d062007410436" + "02000c090b2001200741026a220436020802400240024002400240024002400240" + "024002400240200b20096a2d0000220741ed004a0d000240200741e1004a0d0020" + "074122460d032007412f460d04200741dc00470d02024020022802082207200228" + "0200470d002002108f808080000b2002200741016a360208200228020420076a41" + "dc003a0000410021070c0b0b2007419e7f6a0e050401010105010b200741927f6a" + "0e080500000006000708000b200341186a200b2005200410c78080800041002d00" + "e0dbc080001a200328021c210b2003280218210941141099808080002207450d0e" + "2007410c3602000c110b0240200228020822072002280200470d002002108f8080" + "80000b2002200741016a360208200228020420076a41223a0000410021070c070b" + "0240200228020822072002280200470d002002108f808080000b2002200741016a" + "360208200228020420076a412f3a0000410021070c060b02402002280208220720" + "02280200470d002002108f808080000b2002200741016a36020820022802042007" + "6a41083a0000410021070c050b0240200228020822072002280200470d00200210" + "8f808080000b2002200741016a360208200228020420076a410c3a000041002107" + "0c040b0240200228020822072002280200470d002002108f808080000b20022007" + "41016a360208200228020420076a410a3a0000410021070c030b02402002280208" + "22072002280200470d002002108f808080000b2002200741016a36020820022802" + "0420076a410d3a0000410021070c020b0240200228020822072002280200470d00" + "2002108f808080000b2002200741016a360208200228020420076a41093a000041" + "0021070c010b2001200210cc8080800021070b2007450d010c090b0b2004200741" + "98aec0800010b680808000000b4102210b200328022c21070b2000200b36020020" + "0020073602040c060b20072004490d022001200741016a360208200341286a2001" + "200b20046a200720046b10cb808080000240024020032802282207450d00200020" + "0328022c3602084100210b0c010b4102210b200328022c21070b2000200b360200" + "200020073602040c050b000b2004200741f8adc0800010b680808000000b200420" + "074188aec0800010b680808000000b2007200936020c2007200b3602100b200041" + "02360200200020073602040b200341306a2480808080000b5301047f0240200028" + "02082201200028020422024f0d00200028020021030340200320016a2d00002204" + "4122460d01200441dc00460d0120044120490d012000200141016a220136020820" + "022001470d000b0b0b4901017f02402000280200200028020822036b20024f0d00" + "200020032002109080808000200028020821030b200028020420036a2001200210" + "fa808080001a2000200320026a3602080bb10501077f23808080800041106b2204" + "24808080800002402003450d004100200341796a2205200520034b1b2106200241" + "036a417c7120026b21074100210503400240024002400240200220056a2d000022" + "08c022094100480d00200720056b4103710d01200520064f0d020340200220056a" + "2208280204200828020072418081828478710d03200541086a22052006490d000c" + "030b0b0240024002400240024002400240200841808bc080006a2d0000417e6a0e" + "03000102050b200541016a220520034f0d04200220056a2c000041bf7f4a0d040c" + "050b200541016a220a20034f0d032002200a6a2c0000210a02400240200841e001" + "460d00200841ed01460d012009411f6a41ff0171410c490d032009417e71416e47" + "0d05200a4140480d040c050b200a41607141a07f460d030c040b200a419f7f4a0d" + "030c020b200541016a220a20034f0d022002200a6a2c0000210a02400240024002" + "40200841907e6a0e050100000002000b2009410f6a41ff017141024b0d05200a41" + "40480d020c050b200a41f0006a41ff01714130490d010c040b200a418f7f4a0d03" + "0b200541026a220820034f0d02200220086a2c000041bf7f4a0d02200541036a22" + "0520034f0d02200220056a2c000041bf7f4c0d030c020b200a41404e0d010b2005" + "41026a220520034f0d00200220056a2c000041bf7f4c0d010b200441086a200128" + "02002001280204200128020810c7808080004100210241002d00e0dbc080001a20" + "0428020c210520042802082108024041141099808080002203450d002003200836" + "020c2003410f360200200320053602100c060b000b200541016a21050c020b2005" + "41016a21050c010b200520034f0d000340200220056a2c00004100480d01200320" + "0541016a2205470d000c030b0b20052003490d000b0b2000200236020020002003" + "360204200441106a2480808080000be20601057f23808080800041206b22022480" + "80808000200241146a200010cd808080000240024020022f01140d000240024002" + "4002400240024020022f011622034180f803714180b803460d0020034180c8006a" + "41ffff03714180f803490d04200241146a200010ce8080800020022d00140d0620" + "022d0015210420002000280208220541016a360208200441dc00470d0320024114" + "6a200010ce8080800020022d00140d0620022d001521042000200541026a360208" + "200441f500470d02200241146a200010cd8080800020022f01140d0620022f0116" + "22044180c0006a41ffff03714180f803490d0120034180d0006a41ffff0371410a" + "7420044180c8006a41ffff0371722205418080046a210302402001280200200128" + "020822006b41034b0d00200120004104109080808000200128020821000b200120" + "0041046a360208200128020420006a2200200341127641f001723a000020004103" + "6a2004413f71418001723a000020002005410676413f71418001723a0002200020" + "03410c76413f71418001723a0001410021000c070b200220002802002000280204" + "200028020810c78080800041002d00e0dbc080001a200228020421012002280200" + "210341141099808080002200450d042000200336020c2000411436020020002001" + "3602100c060b200241086a20002802002000280204200028020810c78080800041" + "002d00e0dbc080001a200228020c21012002280208210341141099808080002200" + "450d032000200336020c20004114360200200020013602100c050b200241173602" + "142000200241146a10cf8080800021000c040b200241173602142000200241146a" + "10cf8080800021000c030b0240024002402003418001490d000240200128020020" + "0128020822046b41034b0d00200120044104109080808000200128020821040b20" + "0128020420046a210020034180104f0d0120034106764140722106410221050c02" + "0b0240200128020822002001280200470d002001108f808080000b200120004101" + "6a360208200128020420006a20033a0000410021000c040b20002003410676413f" + "71418001723a00012003410c764160722106410321050b200020063a0000200120" + "0420056a360208200020056a417f6a2003413f71418001723a0000410021000c02" + "0b000b200228021821000b200241206a24808080800020000b910301057f238080" + "80800041106b220224808080800002400240024002402001280204220320012802" + "082204490d000240200320046b41034b0d0020012003360208200241086a200128" + "02002003200310c78080800041002d00e0dbc080001a200228020c210320022802" + "08210441141099808080002201450d022001200436020c20014104360200200020" + "01360204200120033602100c030b2001200441046a220536020802402001280200" + "220620046a22012d000141017441b8aec080006a2f010020012d000041017441b8" + "b2c080006a2f010072c141087420012d000241017441b8b2c080006a2e01007220" + "012d000341017441b8aec080006a2e0100722201417f4a0d002002200620032005" + "10c78080800041002d00e0dbc080001a2002280204210320022802002104411410" + "99808080002201450d022001200436020c2001410c360200200020013602042001" + "20033602100c030b200020013b0102410021010c030b2004200341a8aec0800010" + "85808080000b000b410121010b200020013b0100200241106a2480808080000bb2" + "0101037f23808080800041106b2202248080808000024002400240200128020822" + "0320012802042204490d00200241086a20012802002004200310c7808080004100" + "2d00e0dbc080001a200228020c2103200228020821044114109980808000220145" + "0d022001200436020c200141043602002000200136020420012003360210410121" + "010c010b2000200128020020036a2d00003a0001410021010b200020013a000020" + "0241106a2480808080000f0b000b8c0101037f23808080800041106b2202248080" + "808000200241086a20002802002000280204200028020810c78080800041002d00" + "e0dbc080001a200228020c2103200228020821040240411410998080800022000d" + "00000b2000200436020c2000200129020037020020002003360210200041086a20" + "0141086a280200360200200241106a24808080800020000b1f0002402001280204" + "0e020000000b200041b8b6c08000200110b2808080000b820101017f0240024002" + "4002402003280204450d000240200328020822040d002002450d0341002d00e0db" + "c080001a0c020b20032802002004200210a78080800021030c030b2002450d0141" + "002d00e0dbc080001a0b200210998080800021030c010b200121030b2000200236" + "020820002003200120031b36020420002003453602000b9f0202047f017e238080" + "80800041206b2206248080808000024002400240200220036a220320024f0d0041" + "0021020c010b41002102200420056a417f6a410020046b71ad4108410420054101" + "461b22072001280200220841017422092003200920034b1b2203200720034b1b22" + "07ad7e220a422088a70d00200aa7220941808080807820046b4b0d010240024020" + "080d00410021020c010b2006200820056c36021c20062001280204360214200421" + "020b20062002360218200641086a20042009200641146a10d18080800002402006" + "2802080d00200628020c2102200120073602002001200236020441818080807821" + "020c010b20062802102103200628020c21020c010b0b2000200336020420002002" + "360200200641206a2480808080000b5901017f23808080800041106b2201248080" + "808000200141086a2000200028020041014108411810d280808000024020012802" + "082200418180808078460d002000200128020c109a80808000000b200141106a24" + "80808080000b4701017f23808080800041206b2200248080808000200041003602" + "182000410136020c200041d8bac0800036020820004204370210200041086a41e0" + "bac0800010a480808000000bf90103027f037e017f23808080800041206b220024" + "808080800041002d00e0dbc080001a02400240024041201099808080002201450d" + "0020014102360210200142818080801037030041002903a0dcc080002102034020" + "02427f510d024100200242017c220341002903a0dcc08000220420042002512205" + "1b3703a0dcc08000200421022005450d000b410020033703f8dfc0800020012003" + "3703084100280280e0c08000450d02200041003602182000410136020c200041e0" + "b6c0800036020820004204370210200041086a41b8b7c0800010a4808080000b00" + "0b10d480808000000b41002001360280e0c08000200041206a2480808080000b5b" + "01027f024020002802104101470d002000280214220141003a0000200028021822" + "02450d00200120021082808080000b02402000417f460d00200020002802042201" + "417f6a36020420014101470d00200041201082808080000b0b3a01017f23808080" + "800041106b2202248080808000200241c8b7c0800036020c200220003602082002" + "41086a2002410c6a200110ae80808000000b3000024020002802002d00000d0020" + "01418589c0800041051093808080000f0b2001418a89c080004104109380808000" + "0b14002001200028020420002802081093808080000b7001037f20002802042101" + "0240024020002d0000220041044b0d0020004103470d010b200128020021000240" + "200141046a28020022022802002203450d00200020031182808080008080808000" + "0b024020022802042202450d00200020021082808080000b2001410c1082808080" + "000b0bf10101027f23808080800041206b22002480808080000240024002400240" + "41002d0090dcc080000e0400000301000b410041023a0090dcc0800041002d00e0" + "dbc080001a4180081099808080002201450d01410041033a0090dcc08000410020" + "01360280dcc08000410042808080808080013703f8dbc08000410042003703e8db" + "c08000410041003a0088dcc0800041004100360284dcc08000410041003a00f4db" + "c08000410041003602f0dbc080000b200041206a2480808080000f0b000b200041" + "003602182000410136020c200041d8c5c080003602082000420437021020004108" + "6a41a8c4c0800010a480808000000bb708010a7f23808080800041206b22042480" + "808080000240024002400240024020012802100d002001417f3602102003410020" + "03200241036a417c7120026b22056b41077120032005491b22066b210720032006" + "490d0102402006450d0002400240200220036a2208417f6a22092d0000410a470d" + "002006417f6a21060c010b200220076a220a2009460d0102402008417e6a22092d" + "0000410a470d002006417e6a21060c010b200a2009460d0102402008417d6a2209" + "2d0000410a470d002006417d6a21060c010b200a2009460d0102402008417c6a22" + "092d0000410a470d002006417c6a21060c010b200a2009460d0102402008417b6a" + "22092d0000410a470d002006417b6a21060c010b200a2009460d0102402008417a" + "6a22092d0000410a470d002006417a6a21060c010b200a2009460d010240200841" + "796a22092d0000410a470d00200641796a21060c010b200a2009460d0120064178" + "7221060b200620076a41016a21060c040b20052003200320054b1b210b41002006" + "6b21082002417c6a210c2006417f7320026a210a02400340200a21052008210620" + "072209200b4d0d01200641786a2108200541786a210a4180828408200220094178" + "6a22076a280200220d418a94a8d000736b200d724180828408200c20096a280200" + "220d418a94a8d000736b200d727141808182847871418081828478460d000b0b20" + "0920034b0d0202400340200320066a450d012006417f6a2106200520036a210920" + "05417f6a210520092d0000410a470d000b200320066a41016a21060c040b024002" + "402001411c6a28020022060d00410021060c010b2006200141186a2802006a417f" + "6a2d0000410a470d0041002106200141003a00202001411c6a41003602000b0240" + "200128021420066b20034b0d002000200141146a2002200310dd808080000c050b" + "200128021820066a2002200310fa808080001a200041043a00002001411c6a2006" + "20036a3602000c040b10b580808000000b2007200341c889c08000108580808000" + "000b2009200341d889c0800010ad80808000000b0240200320064f0d0020044100" + "3602182004410136020c200441a8bbc0800036020820044204370210200441086a" + "41b0bbc0800010a480808000000b02402001411c6a2802002205450d0002400240" + "200128021420056b20064d0d00200141186a28020020056a2002200610fa808080" + "001a2001411c6a200520066a22053602000c010b200441086a200141146a200220" + "0610dd80808000024020042d00084104460d00200020042903083702000c030b20" + "01411c6a28020021050b2005450d00200141003a00202001411c6a41003602000b" + "200220066a210502402001280214200320066b22064b0d002000200141146a2005" + "200610dd808080000c010b200141186a2802002005200610fa808080001a200041" + "043a00002001411c6a20063602000b2001200128021041016a360210200441206a" + "2480808080000b7101027f20012802002104024020012802082205450d00200420" + "056b20034f0d004100210520014100360208200141003a000c0b0240200420034d" + "0d00200128020420056a2002200310fa808080001a200041043a00002001200520" + "036a3602080f0b20004204370200200141003a000c0bc90103027f017e027f2380" + "8080800041106b2203248080808000200341086a20002802082802002001200210" + "dc80808000024020032d000822024104460d002000280204210420032903082105" + "0240024020002d0000220141044b0d0020014103470d010b200428020021010240" + "200441046a28020022062802002207450d00200120071182808080008080808000" + "0b024020062802042206450d00200120061082808080000b2004410c1082808080" + "000b200020053702000b200341106a24808080800020024104470b9c0303027f01" + "7e037f23808080800041106b220224808080800020024100360204024002400240" + "02402001418001490d002001418010490d012001418080044f0d0220022001413f" + "71418001723a000620022001410c7641e001723a000420022001410676413f7141" + "8001723a0005410321010c030b200220013a0004410121010c020b20022001413f" + "71418001723a00052002200141067641c001723a0004410221010c010b20022001" + "413f71418001723a00072002200141127641f001723a000420022001410676413f" + "71418001723a000620022001410c76413f71418001723a0005410421010b200241" + "086a2000280208280200200241046a200110dc80808000024020022d0008220141" + "04460d0020002802042103200229030821040240024020002d0000220541044b0d" + "0020054103470d010b200328020021050240200341046a28020022062802002207" + "450d002005200711828080800080808080000b024020062802042206450d002005" + "20061082808080000b2003410c1082808080000b200020043702000b200241106a" + "24808080800020014104470b1200200041dcb7c08000200110b2808080000b0300" + "000b0900200041003602000bc30201047f411f21020240200141ffffff074b0d00" + "2001410620014108766722026b7641017120024101746b413e6a21020b20004200" + "3702102000200236021c200241027441a8dcc080006a2103024041002802c4dfc0" + "800041012002742204710d0020032000360200200020033602182000200036020c" + "20002000360208410041002802c4dfc080002004723602c4dfc080000f0b024002" + "400240200328020022042802044178712001470d00200421020c010b2001410041" + "1920024101766b2002411f461b742103034020042003411d764104716a41106a22" + "052802002202450d02200341017421032002210420022802044178712001470d00" + "0b0b20022802082203200036020c20022000360208200041003602182000200236" + "020c200020033602080f0b20052000360200200020043602182000200036020c20" + "0020003602080b0b00200010e580808000000bb50101037f23808080800041106b" + "2201248080808000200028020c2102024002400240024020002802040e02000102" + "0b20020d0141012102410021030c020b20020d0020002802002202280204210320" + "0228020021020c010b20014180808080783602002001200036020c2001418f8080" + "8000200028021c22002d001c20002d001d10e680808000000b2001200336020420" + "0120023602002001419080808000200028021c22002d001c20002d001d10e68080" + "8000000b990101027f23808080800041106b22042480808080004100410028029c" + "dcc08000220541016a36029cdcc08000024020054100480d000240024041002d00" + "f0dfc080000d00410041002802ecdfc0800041016a3602ecdfc080004100280298" + "dcc08000417f4a0d010c020b200441086a20002001118380808000808080800000" + "0b410041003a00f0dfc080002002450d0010e180808000000b000b0c0020002001" + "2902003703000bf726020c7f017e2380808080004190036b220224808080800020" + "0128020c2103024002400240024002400240024002400240024002400240024002" + "400240024002400240024002400240024002400240024002400240200128021422" + "04200128021022054f0d002001410c6a21060340200320046a2d0000220741776a" + "220841174b0d024101200874419380800471450d022001200441016a2204360214" + "20052004470d000b200521040b200241f8006a200320052005200441016a220420" + "052004491b10c78080800041002d00e0dbc080001a200228027c21082002280278" + "2101411410998080800022040d010c190b200741e5004a0d0820074122460d0620" + "07412d460d07200741db00470d09200120012d0018417f6a22083a001820044101" + "6a2104200841ff0171450d0520012004360214200241003602b002200242808080" + "8080013702a80241082109200420054f0d02200241b8016a41086a210a200241b8" + "016a410172210b410821094100210c4101210d0340200628020021030240034020" + "0320046a2d0000220741776a220841174b0d014101200874419380800471450d01" + "2001200441016a220436021420052004470d000b200521040c040b024002400240" + "200741dd00460d00200d4101710d02200441016a210402402007412c470d002001" + "20043602140240200420054f0d000340200320046a2d0000220741776a22084117" + "4b0d044101200874419380800471450d042001200441016a220436021420052004" + "470d000b200521040b200241c0006a200320052005200441016a22042005200449" + "1b10c78080800041002d00e0dbc080001a20022802442104200228024021084114" + "1099808080002206450d1d2006200836020c20064105360200200620043602100c" + "080b200241d0006a200320052005200420052004491b10c78080800041002d00e0" + "dbc080001a200228025421042002280250210841141099808080002206450d1c20" + "06200836020c20064107360200200620043602100c070b20022902ac02210e2002" + "2802a802210641042107410021090c070b200741dd00470d00200241c8006a2003" + "20052005200441016a220420052004491b10c78080800041002d00e0dbc080001a" + "200228024c21042002280248210841141099808080002206450d1a200620083602" + "0c20064115360200200620043602100c050b200241b8016a200110e88080800002" + "4020022d00b80122084106470d0020022802bc0121060c050b200241ec016a4102" + "6a2205200b41026a2d00003a0000200241d8016a41086a2203200a41086a290300" + "3703002002200b2f00003b01ec012002200a2903003703d80120022802bc012107" + "0240200c20022802a802470d00200241a8026a10d3808080000b20022802ac0222" + "09200c41186c6a220420022903d801370308200420083a0000200420022f01ec01" + "3b000120042007360204200441106a2003290300370300200441036a20052d0000" + "3a00002002200c41016a220c3602b0024100210d20012802142204200128021022" + "054f0d020c000b0b2004200136020c200441053602002000200436020420004106" + "3a0000200420083602100c160b200628020021030b200241386a20032005200520" + "0441016a220420052004491b10c78080800041002d00e0dbc080001a200228023c" + "21042002280238210841141099808080002206450d152006200836020c20064102" + "360200200620043602100b200241a8026a108c80808000024020022802a8022204" + "450d002009200441186c1082808080000b200128020c2103200128021421042001" + "280210210541062107410121090b200120012d001841016a3a0018024002402004" + "20054f0d0003400240024002400240024002400240200320046a2d00002208410c" + "4a0d00200841776a4102490d060c010b02402008411f4a0d002008410d470d010c" + "060b20084120460d052008412c460d01200841dd00460d020b200241186a200320" + "052005200441016a220420052004491b10c78080800041002d00e0dbc080001a20" + "0228021c21082002280218210541141099808080002204450d1b20044116360200" + "0c070b2001200441016a2204360214200420054f0d020340200320046a2d000022" + "0c41776a220841174b0d024101200874419380800471450d022001200441016a22" + "0436021420052004470d000b200521040c020b2001200441016a3602142002200e" + "3703c001200220063602bc01200220073a00b80102402009450d00410621072002" + "41063a00800120022006360284010c160b20024180016a41106a200241b8016a41" + "106a29030037030020024180016a41086a200241b8016a41086a29030037030020" + "0220022903b801220e37038001200ea721070c150b200c41dd00470d0020024130" + "6a200320052005200441016a220420052004491b10c78080800041002d00e0dbc0" + "80001a200228023421082002280230210541141099808080002204450d18200441" + "153602000c040b200241286a200320052005200441016a220420052004491b10c7" + "8080800041002d00e0dbc080001a200228022c2108200228022821054114109980" + "8080002204450d17200441163602000c030b2001200441016a2204360214200520" + "04470d000b200521040b200241206a200320052005200441016a22042005200449" + "1b10c78080800041002d00e0dbc080001a20022802242108200228022021054114" + "1099808080002204450d14200441023602000b2004200536020c20042008360210" + "200220043602d0012002200e3703c001200220063602bc01200220073a00b80102" + "4020090d0041062107200241063a0080012002200436028401200241b8016a108a" + "808080000c100b41062107200241063a0080012002200636028401200410e98080" + "80000c0f0b200241106a200320052005200420052004491b10c78080800041002d" + "00e0dbc080001a200228021421082002280210210141141099808080002204450d" + "122004200136020c2004411836020020002004360204200041063a000020042008" + "3602100c110b200141003602082001200441016a360214200241b8016a20062001" + "10c88080800020022802bc0121080240024020022802b80122054102460d002002" + "2802c0012104024020050d0020024180016a2008200410ea8080800020022d0080" + "014106460d112000200229038001370300200041106a20024180016a41106a2903" + "00370300200041086a20024180016a41086a2903003703000c130b410021010240" + "20044100480d00024020040d0041012101410021050c030b41002d00e0dbc08000" + "1a20042105200410998080800022010d02410121010b20012004109a8080800000" + "0b200041063a0000200020083602040c110b20024180016a41086a220320012008" + "200410fa808080003602002002200536028401200241033a008001200220043602" + "8c01200041106a20024180016a41106a290300370300200041086a200329030037" + "030020002002290380013703000c100b2001200441016a36021420024198016a20" + "01410010eb8080800002402002290398014203510d0020024180016a2002419801" + "6a10c580808000024020022d0080014106460d0020002002290380013703002000" + "41106a20024180016a41106a290300370300200041086a20024180016a41086a29" + "03003703000c110b20022802840120011080808080002104200041063a00002000" + "20043602040c100b200020022802a001360204200041063a00000c0f0b02402007" + "41f3004a0d00200741e600460d04200741ee00470d012001200441016a36021420" + "0141d0dbc08000410310ec808080002204450d02200041063a0000200020043602" + "040c0f0b200741f400460d02200741fb00460d040b200741506a41ff0171410a49" + "0d04200241086a200320052005200441016a220420052004491b10c78080800041" + "002d00e0dbc080001a200228020c21082002280208210541141099808080002204" + "450d0e2004200536020c2004410a3602002004200836021020022004360284010c" + "0b0b200241003a0080012000200229038001370300200041086a20024180016a41" + "086a290300370300200041106a20024180016a41106a2903003703000c0c0b2001" + "200441016a3602140240200141d3dbc08000410310ec808080002204450d002000" + "41063a0000200020043602040c0c0b20024181023b018001200020022903800137" + "0300200041086a20024180016a41086a290300370300200041106a20024180016a" + "41106a2903003703000c0b0b2001200441016a3602140240200141d6dbc0800041" + "0410ec808080002204450d00200041063a0000200020043602040c0b0b20024101" + "3b0180012000200229038001370300200041086a20024180016a41086a29030037" + "0300200041106a20024180016a41106a2903003703000c0a0b200120012d001841" + "7f6a22083a0018200441016a2104200841ff0171450d0520012004360214200220" + "013602f001200241013a00f401200241f8016a200241f0016a10ed808080004100" + "210d410021064100210c024002400240024020022802f80122044180808080786a" + "0e020200010b20022802fc0121060c060b20022902fc01210e2002410036028c02" + "20024100360284022002200e3702ac02200220043602a80220024190026a200241" + "f0016a10ee8080800020022d0090024106460d03200241b8016a20024184026a20" + "0241a8026a20024190026a10c680808000024020022d00b8014106460d00200241" + "b8016a108a808080000b200241a8026a41046a2104200241b8016a41046a210802" + "400340200241ec026a200241f0016a10ed80808000024020022802ec0222054180" + "808080786a0e020204000b20022902f002210e20022802f0022103200241f8026a" + "200241f0016a10ee80808000024020022d00f8024106470d0020022802fc022106" + "2005450d07200320051082808080000c070b200820022903f80237020020084110" + "6a200241f8026a41106a290300370200200841086a200241f8026a41086a290300" + "370200200241a8026a41086a200241b8016a41086a290200370300200241a8026a" + "41106a200241b8016a41106a290200370300200241a8026a41186a200241b8016a" + "41186a280200360200200220022902b8013703a802200220053602c4022002200e" + "3e02c8022002200e4220883e02cc02200241d0026a41106a200441106a29020037" + "0300200241d0026a41086a200441086a290200370300200220042902003703d002" + "200241b8016a20024184026a200241c4026a200241d0026a10c68080800020022d" + "00b8014106460d00200241b8016a108a808080000c000b0b200228028402210620" + "02280288022109200228028c02210c0b410521070c050b20022802f00221060c02" + "0b200241a8016a2001410110eb80808000024020022903a8014203510d00200241" + "80016a200241a8016a10c580808000024020022d0080014106460d002000200229" + "038001370300200041106a20024180016a41106a290300370300200041086a2002" + "4180016a41086a2903003703000c0a0b2002280284012001108080808000210420" + "0041063a0000200020043602040c090b200020022802b001360204200041063a00" + "000c080b20022802940221062004450d00200ea720041082808080000b20024184" + "026a108b808080000b410621074101210d0b200120012d001841016a3a00182001" + "28020c21030240024020012802142204200128021022054f0d0003400240024002" + "4002400240200320046a2d00002208410c4a0d00200841776a4102490d040c010b" + "02402008411f4a0d002008410d470d010c040b20084120460d032008412c460d01" + "200841fd00460d020b200241e0006a200320052005200441016a22042005200449" + "1b10c78080800041002d00e0dbc080001a20022802642108200228026021054114" + "1099808080002204450d0b200441163602000c050b200241f0006a200320052005" + "200441016a220420052004491b10c78080800041002d00e0dbc080001a20022802" + "7421082002280270210541141099808080002204450d0a200441153602000c040b" + "2001200441016a3602140240200d450d0041062107200241063a00800120022006" + "360284010c060b200220073a008001200220022f00a8023b0081012002200c3602" + "8c01200220093602880120022006360284012002200241aa026a2d00003a008301" + "0c050b2001200441016a220436021420052004470d000b200521040b200241e800" + "6a200320052005200441016a220420052004491b10c78080800041002d00e0dbc0" + "80001a200228026c21082002280268210541141099808080002204450d06200441" + "033602000b2004200536020c20042008360210200220073a00b801200220022f00" + "a8023b00b901200220043602d0012002200c3602c401200220093602c001200220" + "063602bc012002200241aa026a2d00003a00bb010240200d0d0041062107200241" + "063a0080012002200436028401200241b8016a108a808080000c020b4106210720" + "0241063a0080012002200636028401200410e9808080000c010b200241d8006a20" + "0320052005200420052004491b10c78080800041002d00e0dbc080001a20022802" + "5c21082002280258210141141099808080002204450d042004200136020c200441" + "1836020020002004360204200041063a0000200420083602100c030b200741ff01" + "714106470d010b20022802840120011080808080002104200041063a0000200020" + "043602040c010b2000200229038001370300200041106a20024180016a41106a29" + "0300370300200041086a20024180016a41086a2903003703000b20024190036a24" + "80808080000f0b000b920101047f02400240024020002802000e020001020b2000" + "2802082201450d01200028020420011082808080000c010b20002d00044103470d" + "002000280208220128020021020240200128020422032802002204450d00200220" + "0411828080800080808080000b024020032802042203450d002002200310828080" + "80000b2001410c1082808080000b200041141082808080000b7901027f41002103" + "0240024020024100480d00024020020d0041002103410121040c020b41002d00e0" + "dbc080001a20022103200210998080800022040d01410121030b20032002109a80" + "808000000b20042001200210fa8080800021012000200236020c20002001360208" + "20002003360204200041033a00000b950502067f017e23808080800041306b2203" + "248080808000200128020c21040240024002400240024002402001280214220520" + "0128021022064f0d002001200541016a2207360214200420056a2d000022084130" + "470d020240200720064f0d00200420076a2d000041506a41ff0171410a490d020b" + "200020012002420010ef808080000c050b200341186a20042006200510c7808080" + "0041002d00e0dbc080001a200328021c2107200328021821044114109980808000" + "2201450d022001200436020c200141053602002000200136020820004203370300" + "200120073602100c040b200341086a200420062006200541026a22012006200149" + "1b10c78080800041002d00e0dbc080001a200328020c2107200328020821044114" + "1099808080002201450d012001200436020c2001410d3602002000200136020820" + "004203370300200120073602100c030b02402008414f6a41ff01714109490d0020" + "0341106a20042006200710c78080800041002d00e0dbc080001a20032802142107" + "2003280210210441141099808080002201450d012001200436020c2001410d3602" + "002000200136020820004203370300200120073602100c030b200841506aad42ff" + "01832109200720064f0d010340200420076a2d000041506a220541ff0171220841" + "0a4f0d020240024020094299b3e6cc99b3e6cc19540d0020094299b3e6cc99b3e6" + "cc19520d01200841054b0d010b2001200741016a22073602142009420a7e2005ad" + "42ff01837c210920062007470d010c030b0b200341206a20012002200910f08080" + "80000240024020032802200d00200020032b0328390308420021090c010b200020" + "03280224360208420321090b200020093703000c020b000b200020012002200910" + "ef808080000b200341306a2480808080000ba20201087f23808080800041106b22" + "032480808080002000280214220420002802102205200420054b1b210620002802" + "0c210702400240024002400340024020020d00410021040c050b20062004460d01" + "2000200441016a22083602142002417f6a2102200720046a210920012d0000210a" + "20082104200141016a2101200a20092d0000460d000b200341086a200720052008" + "10c78080800041002d00e0dbc080001a200328020c210120032802082102411410" + "99808080002204450d01200441093602000c020b200320072005200610c7808080" + "0041002d00e0dbc080001a20032802042101200328020021024114109980808000" + "2204450d00200441053602000c010b000b2004200236020c200420013602100b20" + "0341106a24808080800020040bae0201047f23808080800041106b220224808080" + "8000200241046a200110f680808000024002400240024020022d00040d00024020" + "022d00050d0020004180808080783602000c040b41002103200128020022014100" + "3602082001200128021441016a360214200241046a2001410c6a200110c8808080" + "002002280208210420022802044102460d010240200228020c22014100480d0002" + "4020010d0041012103410021050c040b41002d00e0dbc080001a20012105200110" + "998080800022030d03410121030b20032001109a80808000000b20002002280208" + "36020420004181808080783602000c020b20004181808080783602002000200436" + "02040c010b20032004200110fa8080800021042000200136020820002004360204" + "200020053602000b200241106a2480808080000bdc0201067f2380808080004110" + "6b22022480808080002001280200220328020c2104024002400240024002402003" + "2802142201200341106a28020022054f0d000340200420016a2d0000220641776a" + "220741174b0d024101200774419380800471450d022003200141016a2201360214" + "20052001470d000b200521010b200241086a200420052005200141016a22012005" + "2001491b10c78080800041002d00e0dbc080001a200228020c2107200228020821" + "0541141099808080002201450d03200141033602000c010b02402006413a470d00" + "2003200141016a3602142000200310e8808080000c020b20022004200520052001" + "41016a220120052001491b10c78080800041002d00e0dbc080001a200228020421" + "072002280200210541141099808080002201450d02200141063602000b20012005" + "36020c20002001360204200041063a0000200120073602100b200241106a248080" + "8080000f0b000b970202027f027e23808080800041106b22042480808080000240" + "02400240024002400240024002402001280214220520012802104f0d0020012802" + "0c20056a2d00002205412e460d01200541c500460d02200541e500460d020b2002" + "450d02420121060c050b2004200120022003410010f18080800020042802000d02" + "0c030b2004200120022003410010f2808080002004280200450d02200020042802" + "04360208200042033703000c040b420021060240420020037d22074200590d0042" + "022106200721030c030b2003babd428080808080808080807f8421030c020b2000" + "2004280204360208200042033703000c020b20042903082103420021060b200020" + "03370308200020063703000b200441106a2480808080000bbd0101057f41002104" + "0240024020012802102205200128021422064d0d00200641016a2107200520066b" + "2108200128020c20066a21054100210403400240200520046a2d0000220641506a" + "41ff0171410a490d002006412e460d030240200641c500460d00200641e500470d" + "030b2000200120022003200410f2808080000f0b2001200720046a360214200820" + "0441016a2204470d000b200821040b2000200120022003200410f3808080000f0b" + "2000200120022003200410f1808080000bfa0301097f23808080800041106b2205" + "24808080800020012001280214220641016a220736021402400240024020072001" + "28021022084f0d00200720086b2109200128020c210a4100210602400240034002" + "40200a20076a2d0000220b41506a220c41ff0171220d410a490d00024020060d00" + "2005200a20082008200741016a220720082007491b10c78080800041002d00e0db" + "c080001a200528020421062005280200210c41141099808080002207450d072007" + "200c36020c2007410d360200200020073602042000410136020020072006360210" + "0c060b200620046a2107200b41207241e500470d032000200120022003200710f2" + "808080000c050b024020034298b3e6cc99b3e6cc19580d0020034299b3e6cc99b3" + "e6cc19520d02200d41054b0d020b2001200741016a22073602142006417f6a2106" + "2003420a7e200cad42ff01837c210320072008470d000b200920046a21070c010b" + "2000200120022003200620046a10f4808080000c020b2000200120022003200710" + "f3808080000c010b200541086a200128020c20082008200641026a220720082007" + "491b10c78080800041002d00e0dbc080001a200528020c21062005280208210c41" + "141099808080002207450d012007200c36020c2007410536020020002007360204" + "20004101360200200720063602100b200541106a2480808080000f0b000bb80401" + "077f23808080800041106b22052480808080004101210620012001280214220741" + "016a220836021402402008200128021022094f0d00410121060240024020012802" + "0c20086a2d000041556a0e03010200020b410021060b2001200741026a22083602" + "140b200128020c210a0240024002400240024002400240200820094f0d00200120" + "0841016a2207360214200a20086a2d000041506a41ff01712208410a4f0d010240" + "200720094f0d000340200a20076a2d000041506a41ff0171220b410a4f0d012001" + "200741016a22073602140240200841cb99b3e6004c0d00200841cc99b3e600470d" + "07200b41074b0d070b2008410a6c200b6a210820092007470d000b0b20060d0220" + "0420086b2207411f75418080808078732007200841004a2007200448731b21070c" + "030b200541086a200a2009200810c78080800041002d00e0dbc080001a20052802" + "0c21012005280208210841141099808080002207450d042007200836020c200741" + "053602002000200736020420004101360200200720013602100c050b2005200a20" + "09200710c78080800041002d00e0dbc080001a2005280204210120052802002108" + "41141099808080002207450d032007200836020c2007410d360200200020073602" + "0420004101360200200720013602100c040b200420086a2207411f754180808080" + "7873200720084100482007200448731b21070b2000200120022003200710f38080" + "80000c020b200020012002200350200610f5808080000c010b000b200541106a24" + "80808080000b9f0304017f017c017f017c23808080800041106b22052480808080" + "002003ba2106024002400240024002400240024020042004411f7522077320076b" + "220741b502490d0003402006440000000000000000610d062004417f4a0d022006" + "44a0c8eb85f3cce17fa32106200441b4026a22042004411f7522077320076b2207" + "41b4024b0d000b0b200741037441a8c8c080006a2b030021082004417f4a0d0120" + "062008a321060c040b2005200128020c2001280210200128021410c78080800041" + "002d00e0dbc080001a200528020421072005280200210141141099808080002204" + "450d022004200136020c2004410e36020020002004360204200420073602100c01" + "0b20062008a222069944000000000000f07f620d02200541086a200128020c2001" + "280210200128021410c78080800041002d00e0dbc080001a200528020c21072005" + "280208210141141099808080002204450d012004200136020c2004410e36020020" + "002004360204200420073602100b410121040c020b000b2000200620069a20021b" + "390308410021040b20002004360200200541106a2480808080000b7f01047f0240" + "024020012802142205200128021022064f0d00200128020c210702400340200720" + "056a2d0000220841506a41ff017141094b0d012001200541016a22053602142006" + "2005470d000c020b0b200841207241e500460d010b2000200120022003200410f3" + "808080000f0b2000200120022003200410f2808080000b840201027f2380808080" + "0041106b220524808080800002400240024002402004450d002003450d010b2001" + "2802142204200128021022034f0d01200128020c21060340200620046a2d000041" + "506a41ff0171410a4f0d022001200441016a220436021420032004470d000c020b" + "0b200541086a200128020c2001280210200128021410c78080800041002d00e0db" + "c080001a200528020c210120052802082103024041141099808080002204450d00" + "2004200336020c2004410e3602002000200436020420042001360210410121040c" + "020b000b200044000000000000000044000000000000008020021b390308410021" + "040b20002004360200200541106a2480808080000bb40701077f23808080800041" + "306b22022480808080002001280200220328020c21040240024002400240200328" + "02142205200341106a28020022064f0d000340200420056a2d0000220741776a22" + "0841174b0d024101200874419380800471450d022003200541016a220536021420" + "062005470d000b200621050b41012108200241286a200420062006200541016a22" + "0520062005491b10c78080800041002d00e0dbc080001a200228022c2106200228" + "0228210341141099808080002205450d022005200336020c200541033602002000" + "2005360204200520063602100c010b0240200741fd00470d004100210820004100" + "3a00010c010b02400240024020012d00040d00200541016a21052007412c470d01" + "200320053602140240200520064f0d00034002400240024002400240200420056a" + "2d00002208410c4a0d00200841776a41024f0d010c040b0240200841606a0e0304" + "0102000b2008410d460d03200841fd00460d020b41012108200241086a20042006" + "2006200541016a220520062005491b10c78080800041002d00e0dbc080001a2002" + "28020c21062002280208210341141099808080002205450d092005200336020c20" + "05411136020020002005360204200520063602100c080b200041013a0001410021" + "080c070b41012108200241186a200420062006200541016a220520062005491b10" + "c78080800041002d00e0dbc080001a200228021c21062002280218210341141099" + "808080002205450d072005200336020c2005411536020020002005360204200520" + "063602100c060b2003200541016a220536021420062005470d000b200621050b41" + "012108200241106a200420062006200541016a220520062005491b10c780808000" + "41002d00e0dbc080001a2002280214210620022802102103411410998080800022" + "05450d042005200336020c2005410536020020002005360204200520063602100c" + "030b41002108200141003a0004024020074122460d002002200420062006200541" + "016a220520062005491b10c78080800041002d00e0dbc080001a20022802042108" + "2002280200210641141099808080002205450d042005200636020c200541113602" + "0020002005360204200520083602100c020b200041013a00010c020b200241206a" + "200420062006200520062005491b10c78080800041002d00e0dbc080001a200228" + "022421082002280220210641141099808080002205450d022005200636020c2005" + "410836020020002005360204200520083602100b410121080b200020083a000020" + "0241306a2480808080000f0b000b4a01037f4100210302402002450d0002400340" + "20002d0000220420012d00002205470d01200041016a2100200141016a21012002" + "417f6a2202450d020c000b0b200420056b21030b20030bac0501087f0240024002" + "400240200020016b20024f0d00200120026a2103200020026a2104024020024110" + "4f0d00200021050c030b2004417c7121054100200441037122066b210702402006" + "450d00200120026a417f6a210803402004417f6a220420082d00003a0000200841" + "7f6a210820052004490d000b0b2005200220066b2209417c7122066b2104024020" + "0320076a2207410371450d0020064101480d022007410374220841187121022007" + "417c71220a417c6a2101410020086b4118712103200a280200210803402005417c" + "6a2205200820037420012802002208200276723602002001417c6a210120042005" + "490d000c030b0b20064101480d01200920016a417c6a210103402005417c6a2205" + "20012802003602002001417c6a210120042005490d000c020b0b02400240200241" + "104f0d00200021040c010b2000410020006b41037122036a210502402003450d00" + "20002104200121080340200420082d00003a0000200841016a2108200441016a22" + "042005490d000b0b2005200220036b2209417c7122076a21040240024020012003" + "6a2206410371450d0020074101480d012006410374220841187121022006417c71" + "220a41046a2101410020086b4118712103200a2802002108034020052008200276" + "2001280200220820037472360200200141046a2101200541046a22052004490d00" + "0c020b0b20074101480d0020062101034020052001280200360200200141046a21" + "01200541046a22052004490d000b0b20094103712102200620076a21010b200245" + "0d02200420026a21050340200420012d00003a0000200141016a2101200441016a" + "22042005490d000c030b0b20094103712201450d012007410020066b6a21032004" + "20016b21050b2003417f6a210103402004417f6a220420012d00003a0000200141" + "7f6a210120052004490d000b0b20000b0e0020002001200210f8808080000bc102" + "01087f02400240200241104f0d00200021030c010b2000410020006b4103712204" + "6a210502402004450d0020002103200121060340200320062d00003a0000200641" + "016a2106200341016a22032005490d000b0b2005200220046b2207417c7122086a" + "210302400240200120046a2209410371450d0020084101480d0120094103742206" + "41187121022009417c71220a41046a2101410020066b4118712104200a28020021" + "060340200520062002762001280200220620047472360200200141046a21012005" + "41046a22052003490d000c020b0b20084101480d00200921010340200520012802" + "00360200200141046a2101200541046a22052003490d000b0b2007410371210220" + "0920086a21010b02402002450d00200320026a21050340200320012d00003a0000" + "200141016a2101200341016a22032005490d000b0b20000b0be45b0100418080c0" + "000bda5b110000000c000000040000001200000013000000140000000000000000" + "00000001000000150000000000000001000000010000001600000063616c6c6564" + "2060526573756c743a3a756e77726170282960206f6e20616e2060457272602076" + "616c75650017000000040000000400000018000000456d707479496e76616c6964" + "4469676974506f734f766572666c6f774e65674f766572666c6f775a65726f5061" + "727365496e744572726f726b696e647372632f6c69622e72730000b00010000a00" + "0000200000004b000000b00010000a000000210000004b0000004163636f756e74" + "00b00010000a0000002200000033000000b00010000a0000002300000033000000" + "44617461b00010000a0000002500000030000000b00010000a0000002600000024" + "000000b00010000a00000027000000350000007465737420676f6f64203d202c20" + "636f756e746572203d200a000000380110000c000000440110000c000000500110" + "0001000000746573742064617461202c20706f696e746572203d202c20706f696e" + "7465725f7533325f6c656e203d202c206c656e203d2000006c0110000a00000076" + "0110000c0000008201100014000000960110000800000050011000010000000500" + "00000c0000000b0000000b00000004000000740010007900100085001000900010" + "009b0010006361706163697479206f766572666c6f77000000f001100011000000" + "616c6c6f632f7372632f7261775f7665632e72730c021000140000001800000005" + "0000002e2e30313233343536373839616263646566426f72726f774d7574457272" + "6f72616c726561647920626f72726f7765643a200000500210001200000063616c" + "6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65" + "602076616c7565696e646578206f7574206f6620626f756e64733a20746865206c" + "656e20697320206275742074686520696e64657820697320000000970210002000" + "0000b7021000120000003d3d617373657274696f6e20606c656674202072696768" + "7460206661696c65640a20206c6566743a200a2072696768743a200000de021000" + "10000000ee02100017000000050310000900000020726967687460206661696c65" + "643a200a20206c6566743a20000000de0210001000000028031000100000003803" + "100009000000050310000900000001000000000000000b21100002000000202020" + "20207b20207b0a2c0a7d207d636f72652f7372632f666d742f6e756d2e72730000" + "830310001300000066000000170000003078303030313032303330343035303630" + "373038303931303131313231333134313531363137313831393230323132323233" + "323432353236323732383239333033313332333333343335333633373338333934" + "303431343234333434343534363437343834393530353135323533353435353536" + "353735383539363036313632363336343635363636373638363937303731373237" + "333734373537363737373837393830383138323833383438353836383738383839" + "3930393139323933393439353936393739383939636f72652f7372632f666d742f" + "6d6f642e727366616c736574727565000072041000130000009b09000026000000" + "7204100013000000a40900001a000000636f72652f7372632f736c6963652f6d65" + "6d6368722e7273b004100018000000830000001e000000b0041000180000009f00" + "00000900000072616e676520737461727420696e64657820206f7574206f662072" + "616e676520666f7220736c696365206f66206c656e67746820e804100012000000" + "fa0410002200000072616e676520656e6420696e646578202c05100010000000fa" + "04100022000000736c69636520696e646578207374617274732061742020627574" + "20656e647320617420004c05100016000000620510000d00000001010101010101" + "010101010101010101010101010101010101010101010101010101010101010101" + "010101010101010101010101010101010101010101010101010101010101010101" + "010101010101010101010101010101010101010101010101010101010101010101" + "010101010101010101010101010101010101010101010000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000202020202020202020202" + "020202020202020202020202020202020202020303030303030303030303030303" + "0303040404040400000000000000000000005b2e2e2e5d626567696e203c3d2065" + "6e642028203c3d2029207768656e20736c6963696e67206060850610000e000000" + "93061000040000009706100010000000a7061000010000006279746520696e6465" + "7820206973206e6f742061206368617220626f756e646172793b20697420697320" + "696e7369646520202862797465732029206f66206000c80610000b000000d30610" + "0026000000f9061000080000000107100006000000a70610000100000020697320" + "6f7574206f6620626f756e6473206f6620600000c80610000b0000003007100016" + "000000a706100001000000636f72652f7372632f7374722f6d6f642e7273006007" + "100013000000f00000002c000000636f72652f7372632f756e69636f64652f7072" + "696e7461626c652e7273000000840710001d0000001a0000003600000084071000" + "1d0000000a0000002b000000000601010301040205070702080809020a050b020e" + "041001110212051311140115021702190d1c051d081f0124016a046b02af03b102" + "bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004f802fa03fb" + "010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3d0d1041418" + "363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f6465" + "5cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f92116f" + "5fbfeeef5a62f4fcff53549a9b2e2f2728559da0a1a3a4a7a8adbabcc4060b0c15" + "1d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c604202325262833383a48" + "4a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf6e6fbe935e" + "227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06" + "240424042808340b4e43813709160a08183b45390363080930160521031b050140" + "38044b052f040a070907402027040c0936033a051a07040c07504937330d33072e" + "080a8126524b2b082a161a261c1417094e042409440d19070a0648082709750b42" + "3e2a063b050a0651060105100305808b621e48080a80a65e22450b0a060d133a06" + "0a362c041780b93c64530c48090a46451b4808530d49070a80f6460a1d03474937" + "030e080a0639070a813619073b031c56010f320d839b66750b80c48a4c630d8430" + "10168faa8247a1b98239072a045c06260a460a28051382b05b654b043907114005" + "0b020e97f80884d62a09a2e781330f011d060e0408818c89046b050d0309071092" + "604709743c80f60a73087015467a140c140c570919808781470385420f1584501f" + "060680d52b053e2101702d031a040281401f113a050181d02a82e680f7294c040a" + "04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c04" + "0907020e06809a83d80411030d0377045f060c04010f0c0438080a062808224e81" + "540c1d03090736080e040907090780cb250a840600010305050606020706080709" + "110a1c0b190c1a0d100e0c0f0410031212130916011704180119031a071b011c02" + "1f1620032b032d0b2e01300431023201a702a902aa04ab08fa02fb05fd02fe03ff" + "09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2848d8e9192" + "a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4ba" + "bbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d" + "11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d11454964658084" + "b2bcbebfd5d7f0f183858ba4a6bebfc5c7cfdadb4898bdcdc6cecf494e4f57595e" + "5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f6e6f1c1d5f" + "7d7eaeaf7fbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f74" + "7596262e2fa7afb7bfc7cfd7df9a00409798308f1fd2d4ceff4e4f5a5b07080f10" + "272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f2282df0482" + "44081b04061181ac0e80ab051f09811b03190801042f043404070301070607110a" + "500f1207550703041c0a090308030703020303030c0405030b06010e15054e071b" + "0757070206170c500443032d03010411060f0c3a041d255f206d046a2580c80582" + "b0031a0682fd03590716091809140c140c6a060a061a0659072b05460a2c040c04" + "0103310b2c041a060b0380ac060a062f314d0380a4083c030f033c0738082b0582" + "ff1118082f112d03210f210f808c048297190b158894052f053b07020e180980be" + "22740c80d61a81100580df0bf29e033709815c1480b80880cb050a183b030a0638" + "0846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a104" + "81da26070c050580a61081f50701202a064c04808d0480be031b030f0d636f7265" + "2f7372632f756e69636f64652f756e69636f64655f646174612e7273003f0d1000" + "2000000050000000280000003f0d1000200000005c000000160000000003000083" + "042000910560005d13a0001217201f0c20601fef2ca02b2a30202c6fa6e02c02a8" + "602d1efb602e00fe20369eff6036fd01e136010a2137240de137ab0e61392f18a1" + "39301c6148f31ea14c40346150f06aa1514f6f21529dbca15200cf615365d1a153" + "00da215400e0e155aee26157ece42159d0e8a1592000ee59f0017f5a0070000700" + "2d0101010201020101480b30151001650702060202010423011e1b5b0b3a090901" + "18040109010301052b033c082a180120370101010408040103070a021d013a0101" + "010204080109010a021a010202390104020402020303011e0203010b0239010405" + "010204011402160601013a0101020104080107030a021e013b0101010c01090128" + "010301370101030503010407020b021d013a01020102010301050207020b021c02" + "390201010204080109010a021d0148010401020301010801510102070c08620102" + "090b0749021b0101010101370e01050102050b0124090166040106010202021902" + "040310040d01020206010f01000300031d021e021e02400201070801020b09012d" + "030101750222017603040209010603db0202013a010107010101010208060a0201" + "301f310430070101050128090c0220040202010338010102030101033a08020298" + "03010d0107040106010302c6400001c32100038d016020000669020004010a2002" + "50020001030104011902050197021a120d012608190b2e03300102040202270143" + "06020202020c0108012f01330101030202050201012a020801ee01020104010001" + "0010101000020001e201950500030102050428030401a502000400025003460b31" + "047b01360f290102020a033104020207013d03240501083e010c0234090a040201" + "5f0302010102060102019d010308150239020101010116010e070305c308020301" + "011701510102060101020101020102eb010204060201021b025508020101026a01" + "01010206010165030204010500090102f5010a0201010401900402020401200a28" + "0602040801090602032e0d010200070106010152160207010201027a0603010102" + "0107010148020301010100020b023405050101010001060f00053b0700013f0451" + "010002002e0217000101030405080802071e0494030037043208010e011605010f" + "000701110207010201056401a00700013d04000400076d07006080f0002f727573" + "74632f633266373463336639323861656235303366313562346539656635373738" + "653737663330353862382f6c6962726172792f616c6c6f632f7372632f636f6c6c" + "656374696f6e732f62747265652f6d61702f656e7472792e727300db1010006000" + "000071010000360000002f72757374632f63326637346333663932386165623530" + "3366313562346539656635373738653737663330353862382f6c6962726172792f" + "616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6e6f64652e" + "7273617373657274696f6e206661696c65643a20656467652e686569676874203d" + "3d2073656c662e686569676874202d2031004c1110005b000000af020000090000" + "00617373657274696f6e206661696c65643a207372632e6c656e2829203d3d2064" + "73742e6c656e28294c1110005b0000002f070000050000004c1110005b000000af" + "040000230000004c1110005b000000ef04000024000000617373657274696f6e20" + "6661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e" + "686569676874202d20310000004c1110005b000000f003000009000000c8151000" + "5f0000005802000030000000110000000c00000004000000120000001300000014" + "000000000000000000000001000000150000006120446973706c617920696d706c" + "656d656e746174696f6e2072657475726e656420616e206572726f7220756e6578" + "7065637465646c792f72757374632f633266373463336639323861656235303366" + "313562346539656635373738653737663330353862382f6c6962726172792f616c" + "6c6f632f7372632f737472696e672e72730000f71210004b000000060a00000e00" + "00004572726f72454f46207768696c652070617273696e672061206c697374454f" + "46207768696c652070617273696e6720616e206f626a656374454f46207768696c" + "652070617273696e67206120737472696e67454f46207768696c65207061727369" + "6e6720612076616c7565657870656374656420603a60657870656374656420602c" + "60206f7220605d60657870656374656420602c60206f7220607d60657870656374" + "6564206964656e7465787065637465642076616c75656578706563746564206022" + "60696e76616c696420657363617065696e76616c6964206e756d6265726e756d62" + "6572206f7574206f662072616e6765696e76616c696420756e69636f646520636f" + "646520706f696e74636f6e74726f6c2063686172616374657220285c7530303030" + "2d5c75303031462920666f756e64207768696c652070617273696e672061207374" + "72696e676b6579206d757374206265206120737472696e67696e76616c69642076" + "616c75653a206578706563746564206b657920746f2062652061206e756d626572" + "20696e2071756f746573666c6f6174206b6579206d7573742062652066696e6974" + "652028676f74204e614e206f72202b2f2d696e66296c6f6e65206c656164696e67" + "20737572726f6761746520696e2068657820657363617065747261696c696e6720" + "636f6d6d61747261696c696e672063686172616374657273756e65787065637465" + "6420656e64206f662068657820657363617065726563757273696f6e206c696d69" + "742065786365656465644572726f72282c206c696e653a202c20636f6c756d6e3a" + "200000008d1510000600000093151000080000009b1510000a000000b820100001" + "0000002f72757374632f6332663734633366393238616562353033663135623465" + "39656635373738653737663330353862382f6c6962726172792f616c6c6f632f73" + "72632f636f6c6c656374696f6e732f62747265652f6e617669676174652e727300" + "c81510005f000000c600000027000000c81510005f000000160200002f000000c8" + "1510005f000000a1000000240000002f686f6d652f7077616e672f2e636172676f" + "2f72656769737472792f7372632f696e6465782e6372617465732e696f2d366631" + "376432326262613135303031662f73657264655f6a736f6e2d312e302e3133352f" + "7372632f726561642e727300581610005f000000a001000045000000581610005f" + "000000a50100003d000000581610005f000000ad0100001a000000581610005f00" + "0000fa01000013000000581610005f000000030200003e000000581610005f0000" + "00ff01000033000000581610005f000000090200003a000000581610005f000000" + "6802000019000000ffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffff0000010002000300040005000600070008000900ffffffffffffffff" + "ffffffffffff0a000b000c000d000e000f00ffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffff0a000b000c000d000e000f00ffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffff0000100020003000400050" + "006000700080009000ffffffffffffffffffffffffffffa000b000c000d000e000" + "f000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffa000b000c000d000e000f000" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffff110000000c00000004000000120000001300000014000000" + "7265656e7472616e7420696e69740000501b10000e0000002f72757374632f6332" + "663734633366393238616562353033663135623465396566353737386537376633" + "30353862382f6c6962726172792f636f72652f7372632f63656c6c2f6f6e63652e" + "7273000000681b10004d0000002301000042000000000000000000000004000000" + "04000000190000001a0000000c000000040000001b0000001c0000001d0000002f" + "727573742f646570732f646c6d616c6c6f632d302e322e362f7372632f646c6d61" + "6c6c6f632e7273617373657274696f6e206661696c65643a207073697a65203e3d" + "2073697a65202b206d696e5f6f7665726865616400f41b100029000000a8040000" + "09000000617373657274696f6e206661696c65643a207073697a65203c3d207369" + "7a65202b206d61785f6f766572686561640000f41b100029000000ae0400000d00" + "0000757365206f66207374643a3a7468726561643a3a63757272656e7428292069" + "73206e6f7420706f737369626c6520616674657220746865207468726561642773" + "206c6f63616c206461746120686173206265656e2064657374726f796564737464" + "2f7372632f7468726561642f6d6f642e727300fa1c100015000000f10200001300" + "00006661696c656420746f2067656e657261746520756e69717565207468726561" + "642049443a2062697473706163652065786861757374656400201d100037000000" + "fa1c100015000000c40400000d00000001000000000000007374642f7372632f69" + "6f2f62756666657265642f6c696e657772697465727368696d2e72736d6964203e" + "206c656e00009d1d100009000000781d1000250000000f01000029000000656e74" + "697479206e6f7420666f756e647065726d697373696f6e2064656e696564636f6e" + "6e656374696f6e2072656675736564636f6e6e656374696f6e207265736574686f" + "737420756e726561636861626c656e6574776f726b20756e726561636861626c65" + "636f6e6e656374696f6e2061626f727465646e6f7420636f6e6e65637465646164" + "647265737320696e2075736561646472657373206e6f7420617661696c61626c65" + "6e6574776f726b20646f776e62726f6b656e2070697065656e7469747920616c72" + "65616479206578697374736f7065726174696f6e20776f756c6420626c6f636b6e" + "6f742061206469726563746f727969732061206469726563746f72796469726563" + "746f7279206e6f7420656d707479726561642d6f6e6c792066696c657379737465" + "6d206f722073746f72616765206d656469756d66696c6573797374656d206c6f6f" + "70206f7220696e646972656374696f6e206c696d69742028652e672e2073796d6c" + "696e6b206c6f6f70297374616c65206e6574776f726b2066696c652068616e646c" + "65696e76616c696420696e70757420706172616d65746572696e76616c69642064" + "61746174696d6564206f75747772697465207a65726f6e6f2073746f7261676520" + "73706163657365656b206f6e20756e7365656b61626c652066696c6566696c6573" + "797374656d2071756f746120657863656564656466696c6520746f6f206c617267" + "657265736f75726365206275737965786563757461626c652066696c6520627573" + "79646561646c6f636b63726f73732d646576696365206c696e6b206f722072656e" + "616d65746f6f206d616e79206c696e6b73696e76616c69642066696c656e616d65" + "617267756d656e74206c69737420746f6f206c6f6e676f7065726174696f6e2069" + "6e746572727570746564756e737570706f72746564756e65787065637465642065" + "6e64206f662066696c656f7574206f66206d656d6f72796f74686572206572726f" + "72756e63617465676f72697a6564206572726f7220286f73206572726f72202900" + "00000100000000000000ad2010000b000000b8201000010000007374642f737263" + "2f696f2f737464696f2e727300d4201000130000002c030000140000006661696c" + "6564207072696e74696e6720746f203a20000000f8201000130000000b21100002" + "000000d4201000130000005d040000090000007374646f75747374642f7372632f" + "696f2f6d6f642e72736120666f726d617474696e6720747261697420696d706c65" + "6d656e746174696f6e2072657475726e656420616e206572726f72207768656e20" + "74686520756e6465726c79696e672073747265616d20646964206e6f7400000047" + "211000560000003621100011000000280700001500000063616e6e6f7420726563" + "7572736976656c792061637175697265206d75746578b821100020000000737464" + "2f7372632f7379732f73796e632f6d757465782f6e6f5f746872656164732e7273" + "e02110002400000014000000090000007374642f7372632f73796e632f6f6e6365" + "2e72731422100014000000d9000000140000006c6f636b20636f756e74206f7665" + "72666c6f7720696e207265656e7472616e74206d757465787374642f7372632f73" + "796e632f7265656e7472616e745f6c6f636b2e72735e2210001e00000022010000" + "2d0000006f7065726174696f6e207375636365737366756c6f6e652d74696d6520" + "696e697469616c697a6174696f6e206d6179206e6f7420626520706572666f726d" + "6564207265637572736976656c79a0221000380000001000000011000000120000" + "00100000001000000013000000120000000d0000000e000000150000000c000000" + "0b00000015000000150000000f0000000e00000013000000260000003800000019" + "000000170000000c000000090000000a0000001000000017000000190000000e00" + "00000d00000014000000080000001b0000000e0000001000000016000000150000" + "000b000000160000000d0000000b00000013000000c01d1000d01d1000e11d1000" + "f31d1000031e1000131e1000261e1000381e1000451e1000531e1000681e100074" + "1e10007f1e1000941e1000a91e1000b81e1000c61e1000d91e1000ff1e1000371f" + "1000501f1000671f1000731f10007c1f1000861f1000961f1000ad1f1000c61f10" + "00d41f1000e11f1000f51f1000fd1f10001820100026201000362010004c201000" + "612010006c201000822010008f2010009a201000000000000000f03f0000000000" + "00244000000000000059400000000000408f40000000000088c34000000000006a" + "f8400000000080842e4100000000d01263410000000084d797410000000065cdcd" + "41000000205fa00242000000e876483742000000a2941a6d42000040e59c30a242" + "0000901ec4bcd64200003426f56b0c430080e03779c3414300a0d8855734764300" + "c84e676dc1ab43003d9160e458e143408cb5781daf154450efe2d6e41a4b4492d5" + "4d06cff08044f64ae1c7022db544b49dd9794378ea449102282c2a8b2045350332" + "b7f4ad54450284fee471d9894581121f2fe727c04521d7e6fae031f445ea8ca039" + "593e294624b00888ef8d5f46176e05b5b5b893469cc94622e3a6c846037cd8ea9b" + "d0fe46824dc77261423347e32079cff91268471b695743b8179e47b1a1162ad3ce" + "d2471d4a9cf487820748a55cc3f129633d48e7191a37fa5d724861a0e0c478f5a6" + "4879c818f6d6b2dc484c7dcf59c6ef11499e5c43f0b76b4649c63354eca5067c49" + "5ca0b4b32784b14973c8a1a031e5e5498f3aca087e5e1b4a9a647ec50e1b514ac0" + "fddd76d261854a307d951447baba4a3e6edd6c6cb4f04acec9148887e1244b41fc" + "196ae9195a4ba93d50e23150904b134de45a3e64c44b57609df14d7df94b6db804" + "6ea1dc2f4c44f3c2e4e4e9634c15b0f31d5ee4984c1b9c70a5751dcf4c91616687" + "6972034df5f93fe9034f384d72f88fe3c4626e4d47fb390ebbfda24d197ac8d129" + "bdd74d9f983a4674ac0d4e649fe4abc88b424e3dc7ddd6ba2e774e0c39958c69fa" + "ac4ea743ddf7811ce24e9194d475a2a3164fb5b949138b4c4c4f11140eecd6af81" + "4f169911a7cc1bb64f5bffd5d0bfa2eb4f99bf85e2b74521507f2f27db25975550" + "5ffbf051effc8a501b9d369315dec050624404f89a15f5507b5505b6015b2a516d" + "55c311e1786051c82a3456199794517a35c1abdfbcc9516cc158cb0b160052c7f1" + "2ebe8e1b345239aeba6d72226952c75929090f6b9f521dd8b965e9a2d352244e28" + "bfa38b0853ad61f2ae8cae3e530c7d57ed172d73534f5cade85df8a75363b3d862" + "75f6dd531e70c75d09ba1254254c39b58b6847542e9f87a2ae427d547dc39425ad" + "49b2545cf4f96e18dce6547371b88a1e931c55e846b316f3db5155a21860dcef52" + "8655ca1e78d3abe7bb553f132b64cb70f1550ed8353dfecc2556124e83cc3d405b" + "56cb10d29f26089156fe94c647304ac5563d3ab859bc9cfa56662413b8f5a13057" + "80ed172673ca6457e0e89def0ffd99578cb1c2f5293ed057ef5d3373b44d04586b" + "35009021613958c54200f469b96f58bb298038e2d3a3582a34a0c6dac8d8583541" + "487811fb0e59c1282debea5c4359f172f8a525347859ad8f760f2f41ae59cc19aa" + "69bde8e2593fa014c4eca2175a4fc819f5a78b4d5a321d30f94877825a7e247c37" + "1b15b75a9e2d5b0562daec5a82fc58437d08225ba33b2f949c8a565b8c0a3bb943" + "2d8c5b97e6c4534a9cc15b3d20b6e85c03f65b4da8e32234842b5c3049ce95a032" + "615c7cdb41bb487f955c5b5212ea1adfca5c79734bd270cb005d5750de064dfe34" + "5d6de49548e03d6a5dc4ae5d2dac66a05d751ab5385780d45d1261e2066da0095e" + "ab7c4d244404405ed6db602d5505745ecc12b978aa06a95e7f57e7165548df5eaf" + "96502e358d135f5bbce4798270485f72eb5d18a38c7e5f27b33aefe517b35ff15f" + "096bdfdde75fedb7cb4557d51d60f4529f8b56a55260b127872eac4e87609df128" + "3a5722bd60029759847635f260c3fc6f25d4c22661f4fbcb2e89735c61787d3fbd" + "35c89161d65c8f2c433ac6610c34b3f7d3c8fb618700d07a845d3162a9008499e5" + "b46562d400e5ff1e229b628420ef5f53f5d062a5e8ea37a8320563cfa2e545527f" + "3a63c185af6b938f706332679b4678b3a463fe40425856e0d9639f6829f7352c10" + "64c6c2f3744337446478b330521445796456e0bc665996af64360c36e0f7bde364" + "438f43d875ad18651473544ed3d84e65ecc7f41084478365e8f931156519b86561" + "787e5abe1fee653d0b8ff8d6d322660cceb2b6cc8857668f815fe4ff6a8d66f9b0" + "bbeedf62c266389d6aea97fbf666864405e57dba2c67d44a23af8ef46167891dec" + "5ab2719667eb24a7f11e0ecc6713770857d3880168d794ca2c08eb35680d3afd37" + "ca656b684844fe629e1fa1685ad5bdfb8567d568b14aad7a67c10a69af4eacace0" + "b840695a62d7d718e77469f13acd0ddf20aa69d644a0688b54e0690c56c842ae69" + "146a8f6b7ad31984496a7306594820e57f6a08a4372d34efb36a0a8d853801ebe8" + "6a4cf0a686c1251f6b305628f49877536bbb6b32317f55886baa067ffdde6abe6b" + "2a646f5ecb02f36b353d0b367ec3276c820c8ec35db45d6cd1c7389aba90926cc6" + "f9c640e934c76c37b8f8902302fd6c23739b3a5621326deb4f42c9aba9666de6e3" + "92bb16549c6d70ce3b358eb4d16d0cc28ac2b121066e8f722d331eaa3b6e9967fc" + "df524a716e7f81fb97e79ca56edf61fa7d2104db6e2c7dbcee94e2106f769c6b2a" + "3a1b456f948306b508627a6f3d122471457db06fcc166dcd969ce46f7f5cc880bc" + "c31970cf397dd0551a507043889c44eb20847054aac3152629b970e994349b6f73" + "ef7011dd00c125a82371561441312f9258716b5991fdbab68e71e3d77ade3432c3" + "71dc8d1916c2fef77153f19f9b72fe2d72d4f643a107bf627289f49489c96e9772" + "ab31faeb7b4acd720b5f7c738d4e0273cd765bd030e2367381547204bd9a6c73d0" + "74c722b6e0a173045279abe358d67386a657961cef0b7414c8f6dd71754174187a" + "7455ced275749e98d1ea8147ab7463ffc232b10ce1743cbf737fdd4f15750baf50" + "dfd4a34a75676d920b65a68075c008774efecfb475f1ca14e2fd03ea75d6fe4cad" + "7e4220768c3ea0581e5354762f4ec8eee5678976bb617a6adfc1bf76157d8ca22b" + "d9f3765a9c2f8b76cf28777083fb2d54035f772632bd9c14629377b07eecc3993a" + "c8775c9ee7344049fe77f9c21021c8ed3278b8f354293aa96778a530aab388939d" + "78675e4a70357cd27801f65ccc421b07798233747f13e23c7931a0a82f4c0d7279" + "3dc8923b9f90a6794d7a770ac734dc7970ac8a66fca0117a8c572d803b09467a6f" + "ad38608a8b7b7a656c237c3637b17a7f472c1b0485e57a5e59f72145e61a7bdb97" + "3a35ebcf507bd23d8902e603857b468d2b83df44ba7b4c38fbb10b6bf07b5f067a" + "9ece85247cf687184642a7597cfa54cf6b8908907c382ac3c6ab0ac47cc7f473b8" + "560df97cf8f19066ac502f7d3b971ac06b92637d0a3d21b00677987d4c8c295cc8" + "94ce7db0f79939fd1c037e9c7500883ce4377e039300aa4bdd6d7ee25b404a4faa" + "a27eda72d01ce354d77e908f04e41b2a0d7fbad9826e513a427f299023cae5c876" + "7f3374ac3c1f7bac7fa0c8eb85f3cce17f756c6c727565616c736500c04a046e61" + "6d65000e0d7761736d5f6c69622e7761736d01884a7b003d5f5a4e313073657264" + "655f6a736f6e356572726f72354572726f7231326669785f706f736974696f6e31" + "3768386631666565323432343761346639634501435f5a4e313073657264655f6a" + "736f6e3264653231446573657269616c697a6572244c5424522447542435657272" + "6f723137683438663764306565626231623836343145020e5f5f727573745f6465" + "616c6c6f63035b5f5a4e34636f726533666d74336e756d34395f244c5424696d70" + "6c2475323024636f72652e2e666d742e2e44656275672475323024666f72247532" + "302475382447542433666d74313768346234323333323664643863616231354504" + "305f5a4e34636f726533666d74336e756d33696d7037666d745f75363431376864" + "3532316661366566366130363732614505445f5a4e34636f726535736c69636535" + "696e6465783236736c6963655f73746172745f696e6465785f6c656e5f6661696c" + "313768663931613361666538376231643434334506385f5a4e34636f726533666d" + "7439466f726d617474657231327061645f696e74656772616c3137686334656130" + "376130626331333536633445075c5f5a4e34636f726533666d74336e756d35305f" + "244c5424696d706c2475323024636f72652e2e666d742e2e446562756724753230" + "24666f7224753230247533322447542433666d7431376835353339386231363535" + "30643532376545084c5f5a4e34636f726533707472343264726f705f696e5f706c" + "616365244c5424616c6c6f632e2e737472696e672e2e537472696e672447542431" + "37683738323934613239653363373833306445094f5f5a4e34636f726533707472" + "343564726f705f696e5f706c616365244c542473657264655f6a736f6e2e2e6572" + "726f722e2e4572726f722447542431376866383763386436646339616234626335" + "450a4f5f5a4e34636f726533707472343564726f705f696e5f706c616365244c54" + "2473657264655f6a736f6e2e2e76616c75652e2e56616c75652447542431376835" + "333262653330333764613162376564450b81015f5a4e39395f244c5424616c6c6f" + "632e2e636f6c6c656374696f6e732e2e62747265652e2e6d61702e2e4254726565" + "4d6170244c54244b24432456244324412447542424753230246173247532302463" + "6f72652e2e6f70732e2e64726f702e2e44726f70244754243464726f7031376835" + "346633306630323133646334313362450c645f5a4e37305f244c5424616c6c6f63" + "2e2e7665632e2e566563244c542454244324412447542424753230246173247532" + "3024636f72652e2e6f70732e2e64726f702e2e44726f70244754243464726f7031" + "376864313538343863353832316334666665450d525f5a4e35335f244c5424636f" + "72652e2e666d742e2e4572726f72247532302461732475323024636f72652e2e66" + "6d742e2e44656275672447542433666d7431376866376165323835356232343964" + "626335450e5f5f5a4e35385f244c5424616c6c6f632e2e737472696e672e2e5374" + "72696e67247532302461732475323024636f72652e2e666d742e2e577269746524" + "475424313077726974655f63686172313768323134333931636238656231353263" + "36450f435f5a4e35616c6c6f63377261775f7665633139526177566563244c5424" + "5424432441244754243867726f775f6f6e65313768363666383634616630346265" + "6432623245105a5f5a4e35616c6c6f63377261775f766563323052617756656349" + "6e6e6572244c5424412447542437726573657276653231646f5f72657365727665" + "5f616e645f68616e646c653137683766656665376563326164336435616245115d" + "5f5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e672475" + "32302461732475323024636f72652e2e666d742e2e577269746524475424397772" + "6974655f737472313768353939643965353738393436646439384512595f5a4e36" + "305f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532302461" + "732475323024636f72652e2e666d742e2e446973706c61792447542433666d7431" + "37686365343232366161316637323663316345132e5f5a4e34636f726533666d74" + "39466f726d61747465723370616431376834373639616533383933373463633531" + "45145d5f5a4e36355f244c542473657264655f6a736f6e2e2e76616c75652e2e56" + "616c7565247532302461732475323024636f72652e2e636d702e2e506172746961" + "6c4571244754243265713137683162323138393234373831393663383045158b01" + "5f5a4e3130385f244c5424616c6c6f632e2e636f6c6c656374696f6e732e2e6274" + "7265652e2e6d61702e2e49746572244c54244b2443245624475424247532302461" + "732475323024636f72652e2e697465722e2e7472616974732e2e6974657261746f" + "722e2e4974657261746f7224475424346e65787431376835363664323036316535" + "6139376461644516615f5a4e36385f244c5424636f72652e2e6e756d2e2e657272" + "6f722e2e5061727365496e744572726f72247532302461732475323024636f7265" + "2e2e666d742e2e44656275672447542433666d7431376863383736363338616561" + "6230633031664517675f5a4e36385f244c5424636f72652e2e666d742e2e627569" + "6c646572732e2e50616441646170746572247532302461732475323024636f7265" + "2e2e666d742e2e5772697465244754243977726974655f73747231376838313862" + "343965376536396132366664451808616c6c6f6361746519435f5a4e38646c6d61" + "6c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c5424412447542436" + "6d616c6c6f6331376865363539333961346338393763633135451a335f5a4e3561" + "6c6c6f63377261775f766563313268616e646c655f6572726f7231376839376237" + "646264306637326464373838451b0a6465616c6c6f636174651c11636f6d706172" + "655f6163636f756e7449441d325f5a4e313073657264655f6a736f6e3264653130" + "66726f6d5f736c69636531376831316365303837373634633961376230451e5c5f" + "5a4e35355f244c542473747224753230246173247532302473657264655f6a736f" + "6e2e2e76616c75652e2e696e6465782e2e496e646578244754243130696e646578" + "5f696e746f31376864333238633634636161396431376163451f325f5a4e34636f" + "726536726573756c743133756e777261705f6661696c6564313768663839396364" + "303037373637303035314520325f5a4e34636f7265366f7074696f6e3133756e77" + "7261705f6661696c6564313768333535313964653938613737363134664521625f" + "5a4e34636f726533666d74336e756d33696d7035325f244c5424696d706c247532" + "3024636f72652e2e666d742e2e446973706c61792475323024666f722475323024" + "7533322447542433666d743137686266336530323238343833653337356145222b" + "5f5a4e3373746432696f35737464696f365f7072696e7431376838316334373231" + "3636303436663066634523385f5a4e35616c6c6f63377261775f76656331376361" + "7061636974795f6f766572666c6f77313768343939643438326139656435373135" + "614524305f5a4e34636f72653970616e69636b696e673970616e69635f666d7431" + "3768363534306363623264356664633361624525415f5a4e38646c6d616c6c6f63" + "38646c6d616c6c6f633137446c6d616c6c6f63244c542441244754243466726565" + "3137683339383334616161616533653839343645262c5f5a4e34636f7265397061" + "6e69636b696e673570616e69633137683034656562393137646439336332323945" + "270e5f5f727573745f7265616c6c6f63284a5f5a4e38646c6d616c6c6f6338646c" + "6d616c6c6f633137446c6d616c6c6f63244c542441244754243132756e6c696e6b" + "5f6368756e6b3137683933346533646333383362623538613345294b5f5a4e3864" + "6c6d616c6c6f6338646c6d616c6c6f633137446c6d616c6c6f63244c5424412447" + "54243133646973706f73655f6368756e6b31376836653063636364343538363537" + "343633452a3a5f5a4e34636f72653970616e69636b696e67313870616e69635f62" + "6f756e64735f636865636b31376833643662386161346338303439363632452b11" + "727573745f626567696e5f756e77696e642c465f5a4e34636f726533666d743946" + "6f726d617474657231327061645f696e74656772616c313277726974655f707265" + "66697831376861396134333238306236303036643132452d425f5a4e34636f7265" + "35736c69636535696e6465783234736c6963655f656e645f696e6465785f6c656e" + "5f6661696c31376830383862353665323939626561616166452e3b5f5a4e34636f" + "72653970616e69636b696e6731396173736572745f6661696c65645f696e6e6572" + "31376836663765333235376438346135303432452f475f5a4e34325f244c542424" + "52462454247532302461732475323024636f72652e2e666d742e2e446562756724" + "47542433666d74313768336136626161316262343761643230344530495f5a4e34" + "345f244c54242452462454247532302461732475323024636f72652e2e666d742e" + "2e446973706c61792447542433666d743137683766663464306238363039633234" + "37324531585f5a4e35395f244c5424636f72652e2e666d742e2e417267756d656e" + "7473247532302461732475323024636f72652e2e666d742e2e446973706c617924" + "47542433666d74313768363861336538653530396361666336344532265f5a4e34" + "636f726533666d7435777269746531376839333535346534626537316632633761" + "45335f5f5a4e34636f726533666d74336e756d35305f244c5424696d706c247532" + "3024636f72652e2e666d742e2e44656275672475323024666f7224753230247533" + "322447542433666d7431376835353339386231363535306435323765452e323534" + "5c5f5a4e36335f244c5424636f72652e2e63656c6c2e2e426f72726f774d757445" + "72726f72247532302461732475323024636f72652e2e666d742e2e446562756724" + "47542433666d74313768313564336433343334626464636363384535395f5a4e34" + "636f72653463656c6c323270616e69635f616c72656164795f626f72726f776564" + "313768333134623532613162633436626665344536405f5a4e34636f726535736c" + "69636535696e6465783232736c6963655f696e6465785f6f726465725f6661696c" + "313768353862336536383666653333373030654537325f5a4e34636f7265366f70" + "74696f6e31336578706563745f6661696c65643137686630386139396532643733" + "33366336614538535f5a4e34636f72653463686172376d6574686f647332325f24" + "4c5424696d706c2475323024636861722447542431366573636170655f64656275" + "675f657874313768656366613566303431373437393039384539345f5a4e34636f" + "726537756e69636f6465397072696e7461626c6535636865636b31376836646136" + "346638306663313630633761453a325f5a4e34636f7265337374723136736c6963" + "655f6572726f725f6661696c31376862303364323439386438646362363433453b" + "355f5a4e34636f7265337374723139736c6963655f6572726f725f6661696c5f72" + "7431376832616462643139306563313832373933453c645f5a4e37315f244c5424" + "636f72652e2e6f70732e2e72616e67652e2e52616e6765244c5424496478244754" + "24247532302461732475323024636f72652e2e666d742e2e446562756724475424" + "33666d7431376836636632383632303536616535653233453d465f5a4e34315f24" + "4c542463686172247532302461732475323024636f72652e2e666d742e2e446562" + "75672447542433666d7431376865613566643964626339343936626665453e625f" + "5a4e34636f726533666d74336e756d33696d7035325f244c5424696d706c247532" + "3024636f72652e2e666d742e2e446973706c61792475323024666f722475323024" + "6933322447542433666d7431376863656439306337613633396330316464453fce" + "015f5a4e35616c6c6f633131636f6c6c656374696f6e73356274726565346e6f64" + "653132374e6f6465526566244c5424616c6c6f632e2e636f6c6c656374696f6e73" + "2e2e62747265652e2e6e6f64652e2e6d61726b65722e2e4479696e672443244b24" + "432456244324616c6c6f632e2e636f6c6c656374696f6e732e2e62747265652e2e" + "6e6f64652e2e6d61726b65722e2e4c6561664f72496e7465726e616c2447542432" + "316465616c6c6f636174655f616e645f617363656e643137683538396137326639" + "343233626663656245409a025f5a4e35616c6c6f633131636f6c6c656374696f6e" + "73356274726565346e6f646532313448616e646c65244c5424616c6c6f632e2e63" + "6f6c6c656374696f6e732e2e62747265652e2e6e6f64652e2e4e6f646552656624" + "4c5424616c6c6f632e2e636f6c6c656374696f6e732e2e62747265652e2e6e6f64" + "652e2e6d61726b65722e2e4d75742443244b24432456244324616c6c6f632e2e63" + "6f6c6c656374696f6e732e2e62747265652e2e6e6f64652e2e6d61726b65722e2e" + "496e7465726e616c24475424244324616c6c6f632e2e636f6c6c656374696f6e73" + "2e2e62747265652e2e6e6f64652e2e6d61726b65722e2e45646765244754243130" + "696e736572745f6669743137686338613063663533396566663031313145419202" + "5f5a4e35616c6c6f633131636f6c6c656374696f6e73356274726565346e6f6465" + "32313248616e646c65244c5424616c6c6f632e2e636f6c6c656374696f6e732e2e" + "62747265652e2e6e6f64652e2e4e6f6465526566244c5424616c6c6f632e2e636f" + "6c6c656374696f6e732e2e62747265652e2e6e6f64652e2e6d61726b65722e2e4d" + "75742443244b24432456244324616c6c6f632e2e636f6c6c656374696f6e732e2e" + "62747265652e2e6e6f64652e2e6d61726b65722e2e496e7465726e616c24475424" + "244324616c6c6f632e2e636f6c6c656374696f6e732e2e62747265652e2e6e6f64" + "652e2e6d61726b65722e2e4b56244754243573706c697431376864303961343862" + "37613831363331616145425a5f5a4e36315f244c542473657264655f6a736f6e2e" + "2e6572726f722e2e4572726f72247532302461732475323024636f72652e2e666d" + "742e2e44656275672447542433666d743137683430323537643666343265323962" + "37344543595f5a4e36305f244c54247374642e2e696f2e2e6572726f722e2e4572" + "726f72247532302461732475323024636f72652e2e666d742e2e446973706c6179" + "2447542433666d74313768393032373163376232613663653833394544575f5a4e" + "35385f244c5424616c6c6f632e2e737472696e672e2e537472696e672475323024" + "61732475323024636f72652e2e666d742e2e44656275672447542433666d743137" + "686236373265623139396333356431383645453a5f5a4e313073657264655f6a73" + "6f6e32646531325061727365724e756d6265723576697369743137683836623839" + "36383136626131306137654546565f5a4e35616c6c6f633131636f6c6c65637469" + "6f6e73356274726565336d6170323542547265654d6170244c54244b2443245624" + "4324412447542436696e7365727431376834643164623464613838343264346665" + "4547455f5a4e313073657264655f6a736f6e347265616439536c69636552656164" + "3137706f736974696f6e5f6f665f696e6465783137683236623431383938353234" + "38333239364548695f5a4e37305f244c542473657264655f6a736f6e2e2e726561" + "642e2e536c6963655265616424753230246173247532302473657264655f6a736f" + "6e2e2e726561642e2e52656164244754243970617273655f737472313768616265" + "386335353563386263643335354549475f5a4e313073657264655f6a736f6e3472" + "65616439536c696365526561643139736b69705f746f5f6573636170655f736c6f" + "7731376834373836633665323234666132336632454a465f5a4e35616c6c6f6333" + "7665633136566563244c54245424432441244754243137657874656e645f66726f" + "6d5f736c69636531376864626131346637346638653232366463454b2f5f5a4e31" + "3073657264655f6a736f6e34726561643661735f73747231376866636436626234" + "313731373865366635454c3e5f5a4e313073657264655f6a736f6e347265616432" + "3070617273655f756e69636f64655f657363617065313768393634306663636162" + "64303034613064454d725f5a4e37305f244c542473657264655f6a736f6e2e2e72" + "6561642e2e536c6963655265616424753230246173247532302473657264655f6a" + "736f6e2e2e726561642e2e526561642447542431376465636f64655f6865785f65" + "736361706531376834376265353936383535663830346461454e355f5a4e313073" + "657264655f6a736f6e347265616431317065656b5f6f725f656f66313768373363" + "62313436306531616339386135454f2e5f5a4e313073657264655f6a736f6e3472" + "656164356572726f72313768656635353237643333336339633236664550305f5a" + "4e34636f726533666d743557726974653977726974655f666d7431376861333165" + "6164363637646336373865304551325f5a4e35616c6c6f63377261775f76656331" + "3166696e6973685f67726f77313768353338353962613338396237316433354552" + "4b5f5a4e35616c6c6f63377261775f7665633230526177566563496e6e6572244c" + "54244124475424313467726f775f616d6f7274697a656431376839386333363466" + "6334356633643132344553435f5a4e35616c6c6f63377261775f76656331395261" + "77566563244c54245424432441244754243867726f775f6f6e6531376866373333" + "3137633566643665626336364554395f5a4e337374643674687265616438546872" + "6561644964336e6577396578686175737465643137683333366266376131343838" + "30343463384555425f5a4e34636f72653463656c6c346f6e636531374f6e636543" + "656c6c244c54245424475424387472795f696e6974313768636536336266323238" + "3531393165373145563e5f5a4e35616c6c6f633473796e633136417263244c5424" + "5424432441244754243964726f705f736c6f773137686565396163636361643963" + "63313036394557355f5a4e34636f72653970616e69636b696e6731336173736572" + "745f6661696c6564313768323332363266326333633738623661624558475f5a4e" + "34325f244c54242452462454247532302461732475323024636f72652e2e666d74" + "2e2e44656275672447542433666d74313768653138373433383865303762666532" + "3545595d5f5a4e36305f244c5424616c6c6f632e2e737472696e672e2e53747269" + "6e67247532302461732475323024636f72652e2e666d742e2e446973706c617924" + "47542433666d7431376863653432323661613166373236633163452e3238335a7a" + "5f5a4e34636f726533707472383864726f705f696e5f706c616365244c54247374" + "642e2e696f2e2e57726974652e2e77726974655f666d742e2e4164617074657224" + "4c5424616c6c6f632e2e7665632e2e566563244c54247538244754242447542424" + "47542431376831363664633631616230333334633165455b495f5a4e3373746434" + "73796e63396f6e63655f6c6f636b31374f6e63654c6f636b244c54245424475424" + "3130696e697469616c697a6531376837663563353038646139653162303962455c" + "605f5a4e36315f244c54247374642e2e696f2e2e737464696f2e2e5374646f7574" + "4c6f636b2475323024617324753230247374642e2e696f2e2e5772697465244754" + "243977726974655f616c6c31376832346238323631303436316432353666455d55" + "5f5a4e3373746432696f3862756666657265643962756677726974657231384275" + "66577269746572244c54245724475424313477726974655f616c6c5f636f6c6431" + "376835383462646262616562306662316262455e735f5a4e38305f244c54247374" + "642e2e696f2e2e57726974652e2e77726974655f666d742e2e4164617074657224" + "4c54245424475424247532302461732475323024636f72652e2e666d742e2e5772" + "697465244754243977726974655f73747231376837666163663562633065666364" + "383038455f325f5a4e34636f726533666d74355772697465313077726974655f63" + "686172313768663062336265316563313964653565374560305f5a4e34636f7265" + "33666d743557726974653977726974655f666d7431376866383830386630646630" + "65343531336445610a727573745f70616e696362375f5a4e34636f72653570616e" + "6963313250616e69635061796c6f61643661735f73747231376836313439663134" + "3264396132653032654563505f5a4e38646c6d616c6c6f6338646c6d616c6c6f63" + "3137446c6d616c6c6f63244c542441244754243138696e736572745f6c61726765" + "5f6368756e6b313768656665383531613237353832646137624564455f5a4e3373" + "746433737973396261636b747261636532365f5f727573745f656e645f73686f72" + "745f6261636b747261636531376834646333646534376432323032316239456558" + "5f5a4e337374643970616e69636b696e673139626567696e5f70616e69635f6861" + "6e646c657232385f24753762242475376224636c6f737572652475376424247537" + "64243137686531376133393737663839633131373845663b5f5a4e337374643970" + "616e69636b696e673230727573745f70616e69635f776974685f686f6f6b313768" + "37373665373963396636353931626535456783015f5a4e39395f244c5424737464" + "2e2e70616e69636b696e672e2e626567696e5f70616e69635f68616e646c65722e" + "2e5374617469635374725061796c6f6164247532302461732475323024636f7265" + "2e2e70616e69632e2e50616e69635061796c6f6164244754243661735f73747231" + "376865623366373232643232346534326638456888015f5a4e313073657264655f" + "6a736f6e3576616c756532646537375f244c5424696d706c247532302473657264" + "652e2e64652e2e446573657269616c697a652475323024666f7224753230247365" + "7264655f6a736f6e2e2e76616c75652e2e56616c75652447542431316465736572" + "69616c697a65313768333165353137383163383336383735394569535f5a4e3463" + "6f726533707472343564726f705f696e5f706c616365244c542473657264655f6a" + "736f6e2e2e6572726f722e2e4572726f7224475424313768663837633864366463" + "39616234626335452e3331316a3c5f5a4e3573657264653264653756697369746f" + "72313876697369745f626f72726f7765645f737472313768343564373131633837" + "31363863326636456b4f5f5a4e313073657264655f6a736f6e3264653231446573" + "657269616c697a6572244c54245224475424313670617273655f616e795f6e756d" + "62657231376839316435333034653561396363663531456c4a5f5a4e3130736572" + "64655f6a736f6e3264653231446573657269616c697a6572244c54245224475424" + "313170617273655f6964656e743137683663353964643731393635353139313045" + "6d735f5a4e37355f244c542473657264655f6a736f6e2e2e64652e2e4d61704163" + "63657373244c5424522447542424753230246173247532302473657264652e2e64" + "652e2e4d61704163636573732447542431336e6578745f6b65795f736565643137" + "6865363235636133323138363233653036456e755f5a4e37355f244c5424736572" + "64655f6a736f6e2e2e64652e2e4d6170416363657373244c542452244754242475" + "3230246173247532302473657264652e2e64652e2e4d6170416363657373244754" + "2431356e6578745f76616c75655f73656564313768656338353637376538303165" + "39393133456f4b5f5a4e313073657264655f6a736f6e3264653231446573657269" + "616c697a6572244c54245224475424313270617273655f6e756d62657231376837" + "3833613431613462393130646432304570515f5a4e313073657264655f6a736f6e" + "3264653231446573657269616c697a6572244c5424522447542431387061727365" + "5f6c6f6e675f696e74656765723137686438313037386634613331633262653245" + "714c5f5a4e313073657264655f6a736f6e3264653231446573657269616c697a65" + "72244c54245224475424313370617273655f646563696d616c3137683661306333" + "363832326663336530306145724d5f5a4e313073657264655f6a736f6e32646532" + "31446573657269616c697a6572244c54245224475424313470617273655f657870" + "6f6e656e743137683336646437646264323365346134656245734d5f5a4e313073" + "657264655f6a736f6e3264653231446573657269616c697a6572244c5424522447" + "542431346636345f66726f6d5f7061727473313768633863316239626161613836" + "666637334574555f5a4e313073657264655f6a736f6e3264653231446573657269" + "616c697a6572244c54245224475424323270617273655f646563696d616c5f6f76" + "6572666c6f77313768336130306563656466383630313864334575565f5a4e3130" + "73657264655f6a736f6e3264653231446573657269616c697a6572244c54245224" + "475424323370617273655f6578706f6e656e745f6f766572666c6f773137683034" + "3762396637333562616463666138457681015f5a4e37355f244c54247365726465" + "5f6a736f6e2e2e64652e2e4d6170416363657373244c5424522447542424753230" + "246173247532302473657264652e2e64652e2e4d61704163636573732447542431" + "336e6578745f6b65795f7365656431326861735f6e6578745f6b65793137683564" + "61326634303536653538313464394577066d656d636d7078365f5a4e3137636f6d" + "70696c65725f6275696c74696e73336d656d376d656d6d6f766531376863383366" + "3931363866353238616565364579076d656d6d6f76657a066d656d637079071201" + "000f5f5f737461636b5f706f696e746572090a0100072e726f6461746100550970" + "726f64756365727302086c616e6775616765010452757374000c70726f63657373" + "65642d62790105727573746325312e38332e302d6e696768746c79202863326637" + "346333663920323032342d30392d30392900490f7461726765745f666561747572" + "6573042b0a6d756c746976616c75652b0f6d757461626c652d676c6f62616c732b" + "0f7265666572656e63652d74797065732b087369676e2d657874"; + +extern std::string const p5Hex = + "0061736d010000000105016000017f021b0108686f73745f6c69620e6765745f6c" + "65646765725f73716e0000030201000405017001010105030100100619037f0141" + "8080c0000b7f00418080c0000b7f00418080c0000b072d04066d656d6f72790200" + "05726561647900010a5f5f646174615f656e6403010b5f5f686561705f62617365" + "03020a0d010b0010808080800041044a0b006e046e616d65000e0d7761736d5f6c" + "69622e7761736d01430200395f5a4e387761736d5f6c696238686f73745f6c6962" + "31346765745f6c65646765725f73716e3137686663383539386237646539633036" + "64624501057265616479071201000f5f5f737461636b5f706f696e746572005509" + "70726f64756365727302086c616e6775616765010452757374000c70726f636573" + "7365642d62790105727573746325312e38332e302d6e696768746c792028633266" + "37346333663920323032342d30392d30392900490f7461726765745f6665617475" + "726573042b0a6d756c746976616c75652b0f6d757461626c652d676c6f62616c73" + "2b0f7265666572656e63652d74797065732b087369676e2d657874"; + +extern std::string const zkProofHex = + "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 zkAotHex = +"00616f740400000000000000300000000200000001003e00010000000000" +"0000000000000000000000000000000000007838365f3634000000000000" +"00000000010000004c0c0000000000000100000000000000000001001100" +"000000000100020000000000000000000000410000000000100065000000" +"2f72757374632f3465623136313235306533343063386634386636366532" +"62393239656634613562656437633138312f6c6962726172792f636f7265" +"2f7372632f697465722f7472616974732f6974657261746f722e72730000" +"100058000000b30700000900000000000000000000004100000070001000" +"75090000010000000800000063616c6c65642060526573756c743a3a756e" +"77726170282960206f6e20616e2060457272602076616c75652f72757374" +"632f34656231363132353065333430633866343866363665326239323965" +"6634613562656437633138312f6c6962726172792f616c6c6f632f737263" +"2f736c6963652e7273000000a30010004a000000a1000000190000005472" +"7946726f6d536c6963654572726f720000000100000000000000d8021000" +"5e000000b4020000090000002f72757374632f3465623136313235306533" +"34306338663438663636653262393239656634613562656437633138312f" +"6c6962726172792f636f72652f7372632f736c6963652f697465722e7273" +"00002c0110004e000000f6050000150000007372632f6c69622e72730000" +"8c0110000a0000001f000000160000008c0110000a000000280000003100" +"00008c0110000a00000028000000440000004661696c656420746f206465" +"73657269616c697a6520766b8c0110000a0000002f000000310000008c01" +"10000a0000002f000000440000008c0110000a000000620000001f000000" +"8c0110000a000000630000000a0000008c0110000a000000640000001700" +"00008c0110000a000000650000000a0000008c0110000a00000066000000" +"170000008c0110000a000000670000000a0000004661696c656420746f20" +"646573657269616c697a6520614661696c656420746f2064657365726961" +"6c697a6520624661696c656420746f20646573657269616c697a65206349" +"6e76616c696420627974657320666f72205363616c617263617061636974" +"79206f766572666c6f770000bd021000110000002f686f6d652f6f706964" +"736b6f706e79692f2e636172676f2f72656769737472792f7372632f696e" +"6465782e6372617465732e696f2d31393439636638633662356235353766" +"2f737562746c652d322e362e312f7372632f6c69622e7273000000000000" +"04000000040000000900000001000000d80210005e000000bd0200000900" +"000000000000fdff02000000097602000cc40b00f4ebba58c7535798485f" +"455752705358ce776dec56a2971a075c93e480fac35ef6154617341c341f" +"dff4f104d109a6e6760ad5b6954c6c47e58dc0839d93a988eb672d9519b5" +"853e799aaae3ca92e58f9811abeaffffffbf7feeffff54acffffaa07893d" +"ac3da834ccd9af44e13ce1d21dd935ebd290ede9c692a6f95f8e7a448006" +"a9aafffffffffeb9ffff53b1feffab1e24f6b0f6a0d23067bf1285f3844b" +"7764d7ac4b43b6a71b4b9ae67f39ea11011aaaeaffffffbf7feeffff54ac" +"ffffaa07893dac3da834ccd9af44e13ce1d21dd935ebd290ede9c692a6f9" +"5f8e7a44800655d5ffffff7fffdcffffa958ffff550f127b587b506998b3" +"5f89c279c2a53bb26bd6a521dbd38d254df3bf1cf588000df3ff0c000000" +"27aa0a0034fc3200cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf" +"3b73c98e7ede833d5145d609e8648a791b36f1302a5ace7eabddb8f3f777" +"15c63acaa8169b02fd74f82f6ac26e1c706066b7363660611b24aba41b05" +"f3ff0c00000027aa0a0034fc3200cc537f800a6b7ae98f47d724bae6be7e" +"d3b12fab78bf3b73c98e7ede833d5145d609f3ff0c00000027aa0a0034fc" +"3200cc537f800a6b7ae98f47d724bae6be7ed3b12fab78bf3b73c98e7ede" +"833d5145d6092e55270000007644200048439a00b8dc598b6e4acee97e6f" +"c65ba9c0b73003b1b7541efbfcb14061e1b40b7f09be81032e5527000000" +"7644200048439a00b8dc598b6e4acee97e6fc65ba9c0b73003b1b7541efb" +"fcb14061e1b40b7f09be81032f686f6d652f6f706964736b6f706e79692f" +"2e636172676f2f72656769737472792f7372632f696e6465782e63726174" +"65732e696f2d313934396366386336623562353537662f626c7331325f33" +"38312d302e382e302f7372632f70616972696e67732e72730000a0051000" +"66000000160200001500000044000000a0051000660000001b0200000900" +"0000a005100066000000050200001d000000a00510006600000009020000" +"1d000000a0051000660000003802000032000000a0051000660000004402" +"00003200000029696e646578206f7574206f6620626f756e64733a207468" +"65206c656e20697320206275742074686520696e64657820697320006d06" +"1000200000008d061000120000000000000004000000040000000a000000" +"3d3d617373657274696f6e20606c6566742020726967687460206661696c" +"65640a20206c6566743a200a2072696768743a200000c206100010000000" +"d206100017000000e90610000900000020726967687460206661696c6564" +"3a200a20206c6566743a20000000c2061000100000000c07100010000000" +"1c07100009000000e9061000090000003a20000001000000000000004807" +"100002000000000000000c000000040000000b0000000c0000000d000000" +"202020202c0a28280a307830303031303230333034303530363037303830" +"393130313131323133313431353136313731383139323032313232323332" +"343235323632373238323933303331333233333334333533363337333833" +"393430343134323433343434353436343734383439353035313532353335" +"343535353635373538353936303631363236333634363536363637363836" +"393730373137323733373437353736373737383739383038313832383338" +"343835383638373838383939303931393239333934393539363937393839" +"39617474656d707420746f20646976696465206279207a65726f47081000" +"19000000206f7574206f662072616e676520666f7220736c696365206f66" +"206c656e6774682072616e676520656e6420696e6465782000008a081000" +"100000006808100022000000736c69636520696e64657820737461727473" +"206174202062757420656e64732061742000ac08100016000000c2081000" +"0d00000028292f72757374632f3465623136313235306533343063386634" +"38663636653262393239656634613562656437633138312f6c6962726172" +"792f616c6c6f632f7372632f7261775f7665632e72730000e20810004c00" +"000028020000110000002f727573742f646570732f646c6d616c6c6f632d" +"302e322e372f7372632f646c6d616c6c6f632e7273617373657274696f6e" +"206661696c65643a207073697a65203e3d2073697a65202b206d696e5f6f" +"76657268656164004009100029000000a804000009000000617373657274" +"696f6e206661696c65643a207073697a65203c3d2073697a65202b206d61" +"785f6f7665726865616400004009100029000000ae0400000d0000000000" +"000001000000700100000e0000000e000000010000000000000064000000" +"0000000041000000010000004f62000064000000000000000d000000d200" +"000012000000d20000006a000000d200000012000000d20000006b000000" +"d200000067000000d200000070000000d200000072000000d20000000e00" +"0000d20000004d000000d20000006f000000d200000010000000d2000000" +"6d000000d20000006e0000000e0000000000020000007f7f000003000000" +"7f7f7f0000000000020001007f7f7f0000000000030001007f7f7f7f0000" +"0000040000007f7f7f7f00000000010001007f7f0000010000007f000000" +"050000007f7f7f7f7f000000060000007f7f7f7f7f7f0000050001007f7f" +"7f7f7f7f0000000001007f000000040001007f7f7f7f7f00000002000100" +"7e7e7f0000000000030000007f7e7e00000000000000030000007f010000" +"41000000000010007f00000041000000bd0b10007f00000041000000c00b" +"10000000000078000000ffffffff01000000c00b10000000000002000000" +"c00b10000000000000000000000010000000000000001000040000000e00" +"2e726f646174612e63737431360010000000bfbfbfbfbfbfbfbf00000000" +"000000000d002e726f646174612e63737434000004000000010101010800" +"2e726f6461746100000001000000bf000e002e726f646174612e63737433" +"32000000200000000100ac4e010054e1dc094f095f2dcf9841ed7a0c7bb4" +"889b2953b4bc4958e4b4020000004479020000000000488b4710488b8078" +"01000089f1c74408080200000048ba020000000100000048891408c36666" +"662e0f1f840000000000b968000000e900000000660f1f4400005385f60f" +"84bd000000488b5f108d42fc4c8b8378010000458b0c004489c883e0f80f" +"afce31f641f6c103400f94c68d34b183c60439f00f838c0000008b8bd001" +"00008d71e0b80d000000483977300f8315010000b80e000000483977380f" +"820601000089b3d001000041c744301000000000488b8378010000c74430" +"0401000000488b837801000048c744300804000000488b8378010000c744" +"301c2e000000488b8378010000c74430186909100083c1f8488b83780100" +"00890c30ba98091000e99c0000005bc341f6c103400f95c683c12739c80f" +"97c04084f0750889d65be9000000008b8bd00100008d71e0b80d00000048" +"3977307370b80e00000048397738726589b3d001000041c7443010000000" +"00488b8378010000c744300401000000488b837801000048c74430080400" +"0000488b8378010000c744301c2e000000488b8378010000c7443018a809" +"100083c1f8488b8378010000890c30bad8091000e80000000031c04889df" +"89c6e8000000004889df31f65be9000000006690b901000000e900000000" +"660f1f440000b920010000e900000000660f1f440000b920000000e90000" +"0000660f1f440000554157415641554154534883ec18488b5f104c8b8378" +"0100004189f6478b7c3008473b3c300f85a80000004c8b6f30448ba3d001" +"0000418d6c24f0b80d0000004939ed0f834e010000488b47384839e8730a" +"b80e000000e93b010000488944241089542404890c2489abd0010000418d" +"4424f8438b0c3048897c240889f289c641b80100000041b968000000e800" +"0000004c8b8378010000418b54280881fa01000080755f4d39e5b80d0000" +"000f83e4000000b80e0000004c396424100f82d40000004489a3d0010000" +"488b7c24088b542404416bf7684303743004b968000000e80000000041ff" +"c7488b837801000046897c30084883c4185b415c415d415e415f5dc3488b" +"442408488b7810b90000000085d275788bb7d00100008d56e0b90d000000" +"483950307364b90e0000004839503872598997d0010000488b8f78010000" +"c744111800000000488b8f78010000c744110c01000000488b8f78010000" +"c7441108d0021000488b8f7801000048c74411100400000083c6e84989fe" +"4889c78b1424e8000000004c89f731c989cee80000000031c04889df89c6" +"4883c4185b415c415d415e415f5de9000000009055415741564155415453" +"4883ec1889f04889fb488b7f104c8b6b30448ba7d0010000458d7c24f0be" +"0d0000004d39fd0f83b7000000488b73384c39fe730abe0e000000e9a400" +"000048897424104489bfd0010000418d7424f84889fd4889df8944240c89" +"54240489ca4189ceb90100000041b80100000041b9f0001000e800000000" +"488b8578010000428b4c3808894c2408468b7c380c4889df4489fe8b5424" +"044489f1e800000000be0d0000004889ef488b85780100008b4c240c4489" +"740808488b857801000044897c0804488b85780100008b5424088914084d" +"39e5730cbe0e0000004c3964241073134883c4185b415c415d415e415f5d" +"e9000000004489a7d00100004883c4185b415c415d415e415f5dc366662e" +"0f1f840000000000554157415641554154535089f0488b5f104c8b7f3044" +"8bb3d0010000458d6ef0be0d0000004d39ef0f83010100004c8b67384d39" +"ec730abe0e000000e9ee0000008944240444890c244489abd0010000418d" +"76f44889fde800000000488b8378010000428b54280842837c2804000f84" +"90000000488b7d10b90000000085d275788bb7d00100008d56e0b90d0000" +"00483955307364b90e0000004839553872598997d0010000488b8f780100" +"00c744111800000000488b8f78010000c744110c01000000488b8f780100" +"00c7441108d0021000488b8f7801000048c74411100400000083c6e84989" +"fe4889ef8b1424e8000000004c89f731c989cee80000000031f6eb2b428b" +"4c280c8b742404894c3004488b83780100008914304d39f7be0d00000073" +"0abe0e0000004d39f473164889df4883c4085b415c415d415e415f5de900" +"0000004489b3d00100004883c4085b415c415d415e415f5dc30f1f440000" +"554157415641554154534883ec4889cb4989ff488b7f104d8b6f308bafd0" +"010000448d75f0b90d0000004d39f50f83f10200004d8b67384d39f4730a" +"b90e000000e9de0200004489b7d00100004531db4c8b97780100004101d8" +"0f82a30200004c89642418418d410783e0f889d24889542438458b241243" +"8d14244439c2440f47c24183f805ba04000000410f43d08954242cf7e271" +"0d4489c34c8b642418e95f02000089c33df8ffff7f760a4c8b642418e94c" +"0200004585e4745e4585c90f8485000000488b442438458b5c0204418d53" +"fc458b04124589c64183e6f8450fafe131c041f6c0030f94c0418d048483" +"c0044139c60f838b0000004889fb4c89ffbe69091000ba98091000e80000" +"00004889df31c9e90a0200004d8b671085db0f842801000048897c24084c" +"89ff4189f789dee8000000004489feb90d000000488b7c2408e909010000" +"448d45f84d8b671085db0f843d01000048897c24084c89ff8974241489de" +"4589c7e8000000004589f88b742414b90d000000488b7c2408e916010000" +"488954242048897c240841f6c0030f95c04183c4274539e60f97c284c20f" +"85d00000008d430b83e0f883fb0b41b910000000440f43c841f6c0030f84" +"88010000418d7bf8438d041e83c0f84489f24429ca4c8b6424180f83a701" +"0000413b82a00b10000f850a0200004503b2980b10004529ce0f86720200" +"004183e001438d040183c002488b542420418904124401cf4489f083c801" +"4989f8488b7c2408488b97780100004289440204488b87780100004489b0" +"980b1000488b8778010000448980a00b1000eb7bb808000000498b942478" +"01000042895c3204498b94247801000042890432488b8778010000468b1c" +"30eb4b4c89ffbea8091000bad8091000e80000000031c9488b7c2408e98d" +"000000b808000000498b9424780100004589c042895c0204498b94247801" +"000042890402488b8778010000468b5c30084c8b6424184c8b9778010000" +"4585db7428488b5424388b44242c41890412488b877801000044895c1004" +"4c8b977801000041bb01000080eb0641bb0800000089f041895c0204488b" +"977801000044891c024939ed730ab90e0000004939ec731589ce4883c448" +"5b415c415d415e415f5de90000000089afd00100004883c4485b415c415d" +"415e415f5dc34181f9000100004c8b6424180f82110100004489c883c804" +"4139c60f82020100004529ce4181fe000002000f87f2000000488b7c2408" +"e940ffffff4989fe83fa10488b7c24080f822fffffff4183e001438d0c01" +"83c1024c8b44242043890c024d89f24501ca89d183c9034c8b8778010000" +"43894c1004488b8f7801000089c0834c0104014c89ff4189f64489d64d89" +"dfe8000000004d89fb4489f6b90d000000488b7c2408e9d0feffff413b82" +"9c0b1000754d4503b2940b10004489f04429c872604183e00183f80f0f87" +"e60000004509f04183c802488b442420458904024401f74889f9488b7c24" +"08488b8778010000834c0804014531c931c0e9fc00000089c1418b540a04" +"f6c202751683e2f84101d64489f14429c9894c24280f83ff0000004d89de" +"897424144c89ff89dee800000000488b7c24084c8b977801000085c0745e" +"488b4c2420418b0c0a31d2f6c1030f95c2c1e20283caf883e1f801d139d9" +"0f43cb4c89ff89c64489f24189c4e8000000004c89ff4489f6e800000000" +"488b7c24084c8b97780100004589e34c8b642418b90d0000008b742414e9" +"e5fdffff41bb08000000b90d0000008b742414e9fffdffff438d0c0183c1" +"02488b54242041890c124101f989c183c9014989f8488b7c2408488b9778" +"01000042894c0a044501c6488b8f7801000042890431488b8f7801000042" +"83643104fe488b8f780100004489899c0b1000488b8f780100008981940b" +"1000b90d000000e954fdffff4989fc4c894c24404c895c2430897424144c" +"89ff89c6e800000000488b442408488b8078010000488b4c24208b0c0883" +"e101837c24281073254401f183c102488b542420890c104501f4488b7c24" +"08488b877801000042834c200401eb4d488b74244001f183c102488b5424" +"20890c104c89e701fe8b54242889d083c8034c8b642408498b8c24780100" +"00894431044101fe498b84247801000042834c3004014c89ffe800000000" +"4c89e7b90d0000008b7424144c8b6424184c8b5c2430e996fcffff666666" +"662e0f1f8400000000004889f8488b7f1031c985f6740789cee900000000" +"8bb7d0010000448d46e0b90d0000004c39403073e4b90e0000004c394038" +"72d953448987d0010000488b8f7801000042c744011800000000488b8f78" +"01000042c744010c01000000488b8f7801000042c7440108d0021000488b" +"8f780100004ac74401100400000083c6e84889fb4889c7e8000000004889" +"df31c95b89cee900000000660f1f84000000000055415741564155415453" +"4883ec2889cb89f54889f9488b7f104c8b7930448bb7d0010000458d6ef0" +"be0d0000004d39ef0f83330100004c8b61384d39ec730abe0e000000e920" +"0100004489afd00100004101d841ffc889d8f7d84421c08954240cf7e20f" +"90c241b8000000804129d84439c0410f97c04108d0741989e8488b8f7801" +"00004801c1ba010000004531c0e9b800000085c0747b418d56f848895424" +"18488b5110488954241048897c24204889cf89c689442408e80000000048" +"8b7c24208b4c24084c8b442410498b9078010000488b742418894c320449" +"8b9078010000890432488b9778010000428b742a0889e885f6743a897402" +"08488b8f780100004801c131d2be0d000000448b44240ceb39488b8f7801" +"000089e8895c0108488b8f780100004801c14531c031d2eb1b894c020848" +"8b8f780100004801c1ba010000004189d8be0d00000044894104488b8f78" +"0100008914014d39f7730abe0e0000004d39f473134883c4285b415c415d" +"415e415f5de9000000004489b7d00100004883c4285b415c415d415e415f" +"5dc366666666662e0f1f840000000000554157415641554154534883ec38" +"4189f04889f8488b7f104c8b5030448b8fd0010000418d49d0be0d000000" +"4939ca0f83c7020000488b70384839ce730abe0e000000e9b40200004889" +"742410898fd00100004c894c24184c8b8f7801000089d64c895424304d8b" +"643130498b5c31388954240c49baabaafffffffffeb94d29e2bd00000000" +"4819ed4d8b5c31584c895c24204d8b6c31504d8b7c31484909dc4d09eb4d" +"09e34d09fb4989ec4929dc4d8b7431404883dd0048ba0000ac4e010054e1" +"31db4939d40f97c34801eb48c1fb3f4889dd4c29f54883db004c89442428" +"49b8db094f095f2dcf9831d24c39c50f97c24801da48c1fa3f4889d34c29" +"fb4883da0049b840ed7a0c7bb4889b4531ff4c39c3410f97c74901d749c1" +"ff3f4c89fa4c29ea4983df0049b82853b4bc4958e4b44531ed4c39c2410f" +"97c54d01fd49c1fd3f4c2b6c242049b89ae67f39ea11011a4d01e84d09f3" +"49bbffff53b1feffab1e4f8d1c1c41bf000000004d0f44df4d895c09084d" +"0f44d74c8b8f780100004d89140949b924f6b0f6a0d230674e8d4c0d004d" +"0f44cf4c8b97780100004d894c0a1049b9bf1285f3844b77644e8d0c0b4d" +"0f44cf4c8b97780100004d894c0a1849b9d7ac4b43b6a71b4b4a8d140a49" +"0f44d741ba000000004c8b8f7801000049895409204d0f44c2488b977801" +"00004c89440a284c8b7c2428458d4730488b9778010000440fb66c326048" +"8b5010488b92780100004c89ee48f7de4d89e949ffc94c8b540a284d21ca" +"4c8b9a880310004921f34d09d34e895c02284c8b540a204d21ca4c8b9a80" +"0310004921f34d09d34e895c02204c8b540a184d21ca4c8b9a7803100049" +"21f34d09d34e895c02184c8b540a104d21ca4c8b9a700310004921f34d09" +"d34e895c02104c8b540a084d21ca4c8b9a680310004921f34d09d34e895c" +"02084c230c0a4823b2600310004c09ce4a8934024889fb4889c74489fe8b" +"54240cb930000000e800000000488b542418be0d0000004889df488b8378" +"0100004489f944886c08604839542430730cbe0e00000048395424107313" +"4883c4385b415c415d415e415f5de9000000008997d00100004883c4385b" +"415c415d415e415f5dc36666662e0f1f840000000000488b4710488b8078" +"010000410fb6f84989f849f7d889d289c948ffcf4c8b4c10284921f94c8b" +"5408284d21c24d09ca89f64c895430284c8b4c10204921f94c8b5408204d" +"21c24d09ca4c895430204c8b4c10184921f94c8b5408184d21c24d09ca4c" +"895430184c8b4c10104921f94c8b5408104d21c24d09ca4c895430104c8b" +"4c10084921f94c8b5408084d21c24d09ca4c8954300848233c104c230408" +"4909f84c890430c3662e0f1f840000000000554157415641554154534883" +"ec384889f8488b7f104c8b6830448ba7d0010000418d5c24c0be0d000000" +"4939dd0f83e60200004c8b4838be0e0000004939d90f82d40200004189d7" +"4c8b57284c8b5f30899fd0010000488b8f780100004189d6428b6c312048" +"6354290cbe080000003b97ec0100000f839e0200004889542430448b84d7" +"f4010000baffffffff4939d0750abe09000000e97d02000049c1e0204c89" +"c248c1fa1e41833c13030f85620200004c895c24284c894c240848893c24" +"428b74311c49c1f81d48894424104889c78974241cba00011000b9110000" +"004c8954242043ff140289c1b80100000085c97431488b3c24488b4c2408" +"be0d0000004d39e50f830f020000be0e0000004c39e10f82010200004489" +"a7d0010000e9fc010000448b54241c488b3c24488b877801000042f64430" +"14048b87ec010000be080000000f8586000000488b54243039c2488b4c24" +"104c8b4424204c8b4c24280f83b20100008b84d7f4010000baffffffff48" +"39d00f8416ffffff48c1e0204889c248c1fa1e41833c11030f8582010000" +"48c1f81d4889cf4489d34489d6ba7a071000b90100000041ff140085c00f" +"8551010000488b7c24104489febae0081000b902000000e800000000e977" +"010000488b54243039c2488b4c24104c8b4424204c8b4c24280f832c0100" +"008b84d7f4010000baffffffff4839d00f8490feffff48c1e0204889c248" +"c1fa1e41833c11030f85fc00000048c1f81d4889cf4489d6ba7b071000b9" +"0200000041ff140085c00f85ce000000488b0424488b8878010000c64419" +"1701418d4c24e0418d5708488bb078010000488b14164889140e418d4c24" +"e8418d5710488bb078010000488b14164889140e418d4c24f04183c71848" +"8b9078010000428b343a89340a488b8878010000896c190c488b88780100" +"008b6c241c896c1908488b8878010000c74419385c071000488b88780100" +"004a8b14314889541918418d4c24d7488b9078010000894c1a10458d7c24" +"c8488b807801000044897c1834418d7424d8488b7c2410bae0081000b902" +"000000e80000000085c07429488b3c24b801000000e9e3fdffffbe060000" +"00e80000000031c04883c4385b415c415d415e415f5dc389eb488b7c2410" +"4489feba78071000b902000000e80000000085c0488b3c24b80100000048" +"8b4c24080f859efdffff488b4424303b87ec010000be0800000073a98b84" +"c7f4010000b9ffffffffbe090000004839c8749348c1e0204889c148c1f9" +"1e488b542428833c0a03be060000000f8574ffffff48c1f81d488b7c2410" +"89deba6c061000b9010000004c8b44242041ff1400488b4c2408488b3c24" +"e92bfdffff6666666666662e0f1f84000000000055415741564155415453" +"4883ec384189d44989fd4c8b57104d8b7a28498b42304889442428498b82" +"7801000089f58b14288b74280889f709d70f842b0a000040f6c6010f8482" +"0000008b7c280c85ff74564c89d3468d042131f64589e2eb1690458d5101" +"4589d34529cb4401deffcf0f84de0200004539c2744e4589d14589d2460f" +"b614104584d279d64180fae07306458d5102ebce4180faf04589ca4183da" +"004183c204ebbd85c90f84c503000031ff89fe4489e785ff0f45ce440f45" +"e785d27510e9a20900004989da85d20f84970900008b5c280483f9100f82" +"0001000048896c24104c897c24204c89542408418d7c240383e7fc4489e2" +"29fa48894c243001ca4189d04183e00331f64c896424184589e141ba0000" +"00004129f90f842d05000089d94c89eb4531d24183f9fc777d4531d241bb" +"040000004c8b74241841bc0400000066662e0f1f8400000000004589f731" +"ed42803c38c0400f9dc54401d5458d56014531ff42803c10c0410f9dc745" +"8d56024531ed42803c10c0410f9dc54501fd4101ed458d7e034531d24280" +"3c38c0410f9dc24501ea4183c6044983c40441f7c3fcffffff4d89e375a2" +"89fd4c8b7c24184429fd83fd08410f92c3448d77ff4539fe410f92c64508" +"de0f84bd0100004589fb4989dd89cbe95203000085c90f849402000089ce" +"83e6034531c0ba0000000083f9040f82fc0000004d89d389ca83e20c4489" +"e74531c0803c38c0410f9dc0418d7c24014531c9803c38c0410f9dc14501" +"c1418d7c24024531d2803c38c0410f9dc2418d7c24034531c0803c38c041" +"0f9dc04501d04501c883fa040f84a1000000418d7c24044531c9803c38c0" +"410f9dc1418d7c24054531d2803c38c0410f9dc24501ca418d7c24064531" +"c9803c38c0410f9dc14501d14489c74401cf458d4c24074531c042803c08" +"c0410f9dc04101f883fa08744c418d7c24084531c9803c38c0410f9dc141" +"8d7c24094531d2803c38c0410f9dc24501ca418d7c240a4531c9803c38c0" +"410f9dc14501d1418d7c240b4531d2803c38c0410f9dc24501ca4501d04d" +"89da85f60f84ae0500004401e231ff803c10c0400f9dc74101f883fe010f" +"84950500008d7a014531c9803c38c0410f9dc14501c883fe020f847b0500" +"0083c20231f6803c10c0400f9dc64101f04429c30f876b050000e9170700" +"004539c275104989da85d20f8570fdffffe90207000085f64989da0f843c" +"fdffff39f10f861b010000428d3c26803c38c00f8c1501000089f7e921fd" +"ffff4531ed83fd200f82130100004189ed4183e5e0c4c1796ec2c5f1efc9" +"c4e2797815000000004589fa4589ebc5e1efdbc5d9efe4666666662e0f1f" +"8400000000004589d6c4a17a7e2c30c4a17a7e743008c4a17a7e7c3010c4" +"217a7e44301862f1550864c262f14d0864ca62f1450864d262f13d0864da" +"62f27e2838e8c5fdfac562f27e2838e9c5f5facd62f27e2838eac5e5fadd" +"62f27e2838ebc5ddfae54183c2204183c3e07598c5f5fec0c5ddfecbc5f5" +"fec0c4e37d39c101c5f9fec1c5f970c8eec5f9fec1c5f173d020c5f9fec1" +"c4c1797ec24439ed753b4989dd89cbe9dc01000085d274178b5c280431c9" +"4531c04429c30f872f040000e9db05000031c9e9d405000089cf0f8413fc" +"ffff31ffe911fcffff40f6c5180f844c0700004189ee4183e6f8478d1c37" +"4501f1c4c1796ec2478d142f4529f5c4e279780d0000000066666666662e" +"0f1f8400000000004589d7c4a17a7e143862f16d0864c162f27e2838d0c5" +"fdfac24183c2084183c50875ddc4e37d39c101c5f9fec1c5f970c8eec5f9" +"fec1c5f173d020c5f9fec1c4c1797ec24439f54989dd89cb0f841e010000" +"4489cdf7dd83e5077442f7dd4531f66666666666662e0f1f840000000000" +"4589df4531e442803c38c0410f9dc44501e241ffc341ffce4439f575e344" +"89cd4429f54183f9f87612e9d20000004489cd4183f9f80f87c5000000f7" +"dd4531c9478d340b4531ff42803c30c0410f9dc74501d7478d140b41ffc2" +"4531f642803c10c0410f9dc6478d240b4183c4024531d242803c20c0410f" +"9dc24501f24501fa478d340b4183c6034531ff42803c30c0410f9dc7478d" +"340b4183c6044531e442803c30c0410f9dc44501fc478d340b4183c60545" +"31ff42803c30c0410f9dc74501e74501d7478d140b4183c2064531f64280" +"3c10c0410f9dc6478d240b4183c4074531d242803c20c0410f9dc24501f2" +"4501fa4183c1084439cd0f8540ffffff4585c074414189d14183e1fc4101" +"f931f642803c08c0400f9dc64183f80174264531db42807c0801c0410f9d" +"c34401de4183f80274104531c042807c0802c0410f9dc04401c64401d6c1" +"ea02c4e279580500000000eb3d660f1f8400000000004429d24183e20343" +"8d3c1989eec1ee0881e6ff00ff0081e5ff00ff0001f589eec1e61001eec1" +"ee104401c64585d20f85150200004189f085d20f84a80100004189fb81fa" +"c000000041bac0000000440f42d2468d0c950000000031ed83fa04729f45" +"8d71f04489f6c1ee04ffc631ed4489df4183fe300f820e0100004189f441" +"83e4fc31ed4489df0f1f8400000000004189fec4a17a6f0c30c5e972d106" +"62f3f50825c90fc5f172d10762f37d0825d1c8c5f970caeec5e9fec9c5e9" +"73d120c5f1fecac4c1797ece4101ee448d7f10c4a17a6f0c38c5e972d106" +"62f3f50825c90fc5f172d10762f37d0825d1c8c5f970caeec5e9fec9c5e9" +"73d120c5f1fecac5f97ecd448d7f20c4a17a6f0c38c5e972d10662f3f508" +"25c90fc5f172d10762f37d0825d1c8c5f970caeec5e9fec9c5e973d120c5" +"f1fecac4c1797ecf4101ef4501f7448d7730c4a17a6f0c30c5e972d10662" +"f3f50825c90fc5f172d10762f37d0825d1c8c5f970caeec5e9fec9c5e973" +"d120c5f1fecac5f97ecd4401fd83c7404183c4fc0f8506ffffff83e6030f" +"846dfeffff666666662e0f1f8400000000004189fec4a17a6f0c30c5e972" +"d10662f3f50825c90fc5f172d10762f3750825d0a8c5f970caeec5e9fec9" +"c5e973d120c5f1fecac4c1797ece4401f583c710ffce75bee919feffff4c" +"8b5424084c8b7c24204c8b642418488b4c2430488b6c24104429c30f86b1" +"01000048894c24300fb654281831f680fa030f45f2440fb6f6418d76ff83" +"fe02ba020000000f42d683fa014c89642418745985d2755f4189dec74424" +"1000000000eb564181e1f00300004501d9428b140889d7f7d7c1ef07c1ea" +"0609fa81e2010101014183fa01488b4c24300f85c10000004c8b5424084c" +"8b7c24204c8b642418488b6c2410e9fc0000004189de41d1eeffc3d1eb89" +"5c241041ffc68b4c2810894c24208b4c281c894c2408448b642820bbffff" +"ffff0f1f4000498b8a78010000418b82ec01000041ffce0f845e0100004a" +"634c211039c10f8346020000418b84caf40100004839d80f846401000048" +"c1e0204889c148c1f91e488b542428833c0a020f851402000048c1f81d4c" +"89ef8b7424088b5424204c89d5c5f87741ff14074989ea85c07491b80100" +"0000e903020000428b7c08044189f841f7d041c1e807c1ef064409c781e7" +"0101010101fa4183fa024c8b7c24204c8b642418488b6c2410741d428b7c" +"08084189f841f7d041c1e807c1ef064409c781e70101010101fa4c8b5424" +"0889d7c1ef0881e7ff00070081e2ff00ff0001fa4189d041c1e0104101d0" +"41c1e8104101f04429c30f874ffeffff8b542820486354100cbe08000000" +"413b92ec0100000f835a010000418b94d2f4010000be09000000bfffffff" +"ff4839fa0f843f01000048c1e2204889d748c1ff1ebe060000004c8b4424" +"2841833c38030f851f0100008b74281c48c1fa1d498b04174c89ef4489e2" +"4883c4385b415c415d415e415f5dc5f877ffe04a634c210cbe0800000039" +"c10f83e8000000418b84caf4010000b9ffffffff4839c8750abe09000000" +"e9cc00000048c1e0204889c148c1f91e488b542428833c0a030f85a60000" +"004c89fd4d89d648c1f81d4c89ef8b742408488b542418488b4c2430c5f8" +"7741ff140789c1b80100000085c90f858e0000004d89ef8b5c2410ffc341" +"bdffffffff4d89f2ffcb7476498b82780100004a63442010413b82ec0100" +"007351418b84c2f40100004c39e80f846fffffff48c1e0204889c148c1f9" +"1e488b542428833c0a02752348c1f81d4c89ff8b7424088b542420ff5405" +"004d89f289c1b80100000085c9749feb19be06000000eb05be080000004c" +"89d7c5f877e80000000031c04883c4385b415c415d415e415f5dc3478d1c" +"2f4501e9e9cff5ffff660f1f840000000000554157415641554154534883" +"ec484189d448897c2428488b7f10488b47284889442420488b4730488944" +"2430418d4424ff8944241c488b877801000089f68b14308954240c8b5430" +"0448895424388b44300848894424404531ff31ed31db894c240848897c24" +"1085ed0f85e70200004439f90f828b010000478d2c2789ca4429fa83fa07" +"773a4439f90f8471010000488b877801000089d24489ee4531c06690468d" +"0c0642803c080a0f840801000049ffc04c39c275e9e9440100000f1f4000" +"458d45034489c683e6fc4189f34529eb7446488b87780100004183e0fc45" +"89e94529c14531c0662e0f1f840000000000478d142842803c100a0f84b8" +"00000041ffc04589ca4501c275e6448d42f84539c37610e97f000000448d" +"42f8488b87780100004489eff7df0f1f8400000000004189f1468b0c0845" +"89ca4181f2f5f5f5f54181c2010101014509ca448d4e04468b0c084589cb" +"4181f3f5f5f5f54181c3010101014509cb4521d341f7d341f7c380808080" +"75124189f183c6084101f94183c1084539c176a84429ee4189f38b4c2408" +"488b7c24104139d374640f1f4000438d342b803c300a740a41ffc34439da" +"75eeeb4c4589d8438d14384501c741ffc739d10f86a6feffff4501e84280" +"3c000a0f8598feffff4d89e531ed4589fe4589fc488b4c2440803c080075" +"3ee9b200000066666666662e0f1f8400000000004189cf39d90f844b0100" +"004d89e5488b8778010000bd010000004189de4189cc488b4c2440803c08" +"007479488b4c2438486344080c3b87ec0100000f83fd0000008b84c7f401" +"0000b9ffffffff4839c80f84ef00000048c1e0204889c148c1f91e488b54" +"2430833c0a030f85dc00000048c1f81d488b7c24288b74240cba74071000" +"b9040000004c8b44242041ff140085c00f859f000000488b7c2410488b87" +"780100004489e129d9750531d2eb0e90440364241c42803c200a0f94c24d" +"89ec488b742440881430488b8778010000488b542438486344100c3b87ec" +"010000735d8b84c7f4010000baffffffff4839d0745348c1e0204889c248" +"c1fa1e488b742430833c160375444401e348c1f81d488b7c24288b74240c" +"89da4c8b44242041ff1400488b7c24108b4c24084489f385c00f8430fdff" +"ffb801000000eb1abe08000000eb0cbe09000000eb05be06000000e80000" +"000031c04883c4485b415c415d415e415f5dc3660f1f8400000000004157" +"415641545350488b47104c8b77308b98d0010000448d53d041b90d000000" +"4d39d60f836d0100004c8b7f384d39d7730b41b90e000000e95901000044" +"8990d00100004c8b887801000047894411084c8b807801000043894c1004" +"488b88780100004189d0460fb68401c8000000468844110f4180f8017540" +"4989c4b9c8000000e80000000041b90d0000004c89e04939de0f83fd0000" +"0041b90e0000004939df0f82ee0000008998d00100004883c4085b415c41" +"5e415fc3488b88780100004ac744111c01000000488b887801000042c744" +"111401000000488b887801000042c744111014011000488b887801000042" +"c744112c010000008d4bf8488b907801000042894c12188d4bd44989c748" +"8b807801000042894c10284c8b7710418b8ed00100008d41f0be0d000000" +"483947307354be0e0000004839473872498d53df83c3e0418986d0010000" +"498bb678010000c744060c48031000498bb678010000895406088d71f883" +"c1fcc704241c011000ba3803100041b8380310004189d9e80000000031f6" +"4c89f7e8000000004531c94c89f84889c74489ce4883c4085b415c415e41" +"5fe9000000000f1f4000488b4710488b887801000089f68b04318b4c3104" +"89d689c2e9000000000f1f004189d14889fa488b7f108b87d0010000448d" +"50f041b80d0000004c395230736041b80e0000004c3952387254534883ec" +"10448997d00100004c8b877801000043c744100c480310004c8b87780100" +"0043897410088d70f883c0fc890c244889fb4889d7ba3803100089c141b8" +"38031000e8000000004889df4531c04883c4105b4489c6e9000000000f1f" +"8400000000004157415641545350488b47104c8b77308b98d0010000448d" +"53d041b90d0000004d39d60f836a0100004c8b7f384d39d7730b41b90e00" +"0000e956010000448990d00100004c8b887801000047894411084c8b8078" +"01000043894c1004488b88780100004189d0460fb6440168468844110f41" +"80f80175404989c4b968000000e80000000041b90d0000004c89e04939de" +"0f83fd00000041b90e0000004939df0f82ee0000008998d00100004883c4" +"085b415c415e415fc3488b88780100004ac744111c01000000488b887801" +"000042c744111401000000488b887801000042c744111014011000488b88" +"7801000042c744112c010000008d4bf8488b907801000042894c12188d4b" +"d44989c7488b807801000042894c10284c8b7710418b8ed00100008d41f0" +"be0d000000483947307354be0e0000004839473872498d53df83c3e04189" +"86d0010000498bb678010000c744060c48031000498bb678010000895406" +"088d71f883c1fcc704241c011000ba3803100041b8380310004189d9e800" +"00000031f64c89f7e8000000004531c94c89f84889c74489ce4883c4085b" +"415c415e415fe9000000000f1f8000000000415653504189d24889f88b54" +"2420488b7f104c8b7030488b58384589cb4529c3733a8bb7d0010000448d" +"5ed041ba0d0000004d39de0f83f300000041ba0e0000004c39db0f82e400" +"000044899fd001000041bad00810004489c9eb414439c90f83d80000008b" +"b7d0010000448d5ed041ba0d0000004d39de0f83b000000041ba0e000000" +"4c39db0f82a100000044899fd001000041ba9c0810004589c84c8b8f7801" +"000043894c1904488b8f7801000046890419488b8f7801000042c744190c" +"02000000488b8f780100004689541908488b8f780100004ac74419140200" +"00008d4ed449b800000000050000004c09c14c8b8f780100004b894c1928" +"4d09d8488b8f780100004e894419208d4ef04c8b877801000043894c1810" +"83c6d84889fb4889c7e8000000004889df4531d24489d64883c4085b415e" +"e900000000488b877801000089f144895c08044501d0488b877801000044" +"8904084883c4085b415ec36666666666662e0f1f84000000000041574156" +"415541545389f24889f8488b7f104c8b78308b9fd0010000448d73f0be0d" +"0000004d39f7734d4c8b60384d39f47307be0e000000eb3d4489b7d00100" +"008d73f84989fd4889c7b90100000041b80100000041b998011000e80000" +"0000be0d0000004c89ef4939df730abe0e0000004939dc7311e800000000" +"31c05b415c415d415e415fc3488b8778010000428b44300c899fd0010000" +"ebe20f1f4000554157415641554154534883ec18488b5f104c8b7f30448b" +"abd0010000458da550ffffffb80d0000004d39e70f83bb020000488b4738" +"4c39e0730ab80e000000e9a802000048894424104489a3d0010000488b83" +"7801000089d18b5408084c8b771083fa308974240c0f83eb010000418bb6" +"d00100008d4ed0b80d00000048394f304889fd0f83a8000000b80e000000" +"48394f380f829900000041898ed0010000498b867801000089540804498b" +"8678010000c7040830000000498b8678010000c744080c02000000498b86" +"78010000c74408089c081000498b867801000048c7440814020000008d46" +"d448ba00000000050000004809d0498bbe780100004889440f284809ca49" +"8b867801000048895408208d46f0498b967801000089440a1083c6d84889" +"efbaa8011000e80000000031c04c89f789c6e8000000004889ef488b8378" +"01000042837c200c300f843e0100004c8b7710418bb6d00100008d4ec0b8" +"0d00000048394f300f83d9000000b80e00000048394f380f82ca00000041" +"81c560ffffff41898ed0010000498b8678010000c744080c2b000000498b" +"8678010000c744080878001000498b8678010000c744081468001000498b" +"867801000044896c0810498b8678010000c744081c02000000498b867801" +"0000c74408184c071000498b867801000048c7440824020000008d46d048" +"ba00000000020000004809c2498b867801000048895408388d46c848ba00" +"000000030000004809c2498b867801000048895408308d46f0498b967801" +"000089440a2083c6d8bab8011000e80000000031c04c89f789c6e8000000" +"0031c0e9930000008b440804418d8d58ffffff498b9678010000c7440a04" +"30000000498b967801000089040a488b837801000042837c200c300f85c2" +"feffff418d6dd0428b5420084989fe89eeb930000000e800000000458da5" +"60ffffff4c89f74489e689eae8000000004c89f78b74240c4489e2b9c801" +"100041b818000000e800000000b80d0000004d39ef730cb80e0000004c39" +"6c241073184889df89c64883c4185b415c415d415e415f5de90000000044" +"89abd00100004883c4185b415c415d415e415f5dc30f1f44000089f14889" +"f8488b7f108bb7d0010000448d4ec041b80d0000004c3948300f83e00000" +"0041b80e0000004c3948380f82d00000005344898fd00100004c8b877801" +"000043c744080c2b0000004c8b877801000043c7440808780010004c8b87" +"7801000043c7440814680010004c8b877801000043894c0810488b8f7801" +"000042c744091c02000000488b8f7801000042c74409184c071000488b8f" +"780100004ac7440924020000008d4ed049b800000000020000004909c848" +"8b8f780100004e894409388d4ec849b800000000030000004909c8488b8f" +"780100004e894409308d4ef04c8b877801000043894c082083c6d84889fb" +"4889c7e8000000004889df4531c05b4489c6e9000000000f1f4400005541" +"57415641554154534881ec9800000089f04c8b7f10488b4f30458ba7d001" +"0000458dac24c0fbffffbe0d0000004c39e90f83640b00004989fe488b7f" +"38be0e0000004c39ef0f824f0b000048897c247848898c24900000008944" +"24644589afd0010000498b877801000089d10fb63c0889fec1ee07897424" +"08498b4610488b88780100008b80d001000083c0f0408874010f89fec1ee" +"068974241883e601498b4610488b88780100008b80d001000083c0f08974" +"2460408874010fc1ef0583e701897c2428498b4610488b88780100008b80" +"d001000083c0f040887c010f418dac24e0feffff4c89f789eeb930000000" +"e800000000498b87780100004280a428200300001f418d9c2428fcffff4c" +"89f789de896c240489eae800000000418dac2470ffffff4c89f789eeba30" +"000000e800000000418d942400fdffff4c897c2420498b87780100004c89" +"6c2448420fb68c2898000000498b4610488b807801000048898c24800000" +"0048f7d9c5fa6f44182062f2fd287cc962f3f50825442802e2c5fa7f4410" +"2048899c2488000000c5fe6f041848896c247062f3f528250428e2488954" +"2430c5fe7f0410458dac2450feffff4d8b7e104c89f74489eeba30000000" +"c5f877e800000000498b4610488b88780100008b80d001000083c0f0c644" +"010f014c89642438418db42480feffff4c89f7ba60031000b930000000e8" +"00000000498b87780100004c896c241042c6442860018b54241823542408" +"498b4610488b88780100008b80d001000083c0f08854010f8b6c242883f5" +"01498b4610488b88780100008b80d001000083c0f040886c010f21d5498b" +"4610488b88780100008b80d001000083c0f040886c010f498b7e104d8b7e" +"30448ba7d0010000418d5c24d0be0d0000004939df73124d8b6e384939dd" +"0f837f050000be0e000000488b5c2420e80000000031c021e889c2894424" +"5c498b4610488b88780100008b80d001000083c0f08854010f488b837801" +"0000488b4c2448889408f802000083f20189542458498b4610488b887801" +"00008b80d001000083c0f08854010f4c89f7448b7c24044489fe4c8b6c24" +"304489eae8000000004c8b642438418dac24c0fdffff4c89f789ee4489fa" +"4489e9e800000000418d5c24a04c89f789de89eab980041000e800000000" +"4c89f789ee89dab9c0031000e8000000004c89f74489fe89ea896c2418e8" +"000000004c89f74489fe895c244489dae8000000004189c589442454418d" +"9c2430fdffff4c89f789de89eab930000000e800000000488b442420488b" +"8078010000488b7424484488ac30a00100004c89f74989f7ba30000000e8" +"00000000418d6c24d0498b4610488b80780100004489e948f7d948895c24" +"68c5fa6f44182062f2fd287cc962b3f50825443802e2c5fa7f442820c5fe" +"6f041862b3f528250438e2c5fe7f0428498b4610488b80780100004c8b04" +"284c8b4c280831c948baabaafffffffffeb94c29c241ba000000004d19d2" +"488b7c28284c8b5c2820488b5c28184d09c84889fe4c09de4c09c64809de" +"4d89d04d29c84c8b4c28104983da0049bf0000ac4e010054e14531e44d39" +"f8410f97c44d01d449c1fc3f4d89e24d29ca4983dc0049bfdb094f095f2d" +"cf984531ed4d39fa410f97c54d01e549c1fd3f4d89ec4929dc4983dd0048" +"bb40ed7a0c7bb4889b4531ff4939dc410f97c74d01ef49c1ff3f4d89fd4d" +"29dd4983df0049bb2853b4bc4958e4b431db4d39dd0f97c34c01fb48c1fb" +"3f4829fb48bf9ae67f39ea11011a4801df4c09ce48beffff53b1feffab1e" +"498d3430480f44f18b5c24044889741808480f44d14889141848ba24f6b0" +"f6a0d23067498d1412480f44d1488954181048babf1285f3844b7764498d" +"1414480f44d1488954181848bad7ac4b43b6a71b4b498d541500480f44d1" +"4889541820480f44f948897c1828488b442438448db8f0fdffff4c89f789" +"eec5f877e80000000033442428498b4e10488b91780100008b89d0010000" +"83c1f088440a0f498b4e10488b8978010000c5fa6f44192048f7d862f2fd" +"287cc862f3f50825442902e2c4a17a7f443920c5fe6f041948896c242862" +"f3f528250429e2c4a17e7f04394c89f7448b7c24184489fe488b542430b9" +"30000000c5f877e8000000008b6c246089eb83f301498b4610488b887801" +"00008b80d001000083c0f0885c010f235c2408498b4610488b8878010000" +"8b80d001000083c0f0885c010f235c2454498b4610488b88780100008b80" +"d001000083c0f0885c010f4c89f7448b6424044489e64489fab960000000" +"e800000000488b4c2420488b81780100004c8b6c244842889c2888030000" +"488b81780100004288ac28800300004c8b7c2438418db790fcffff897424" +"084c89f7488b5424104489e18b6c24584189e8e80000000089e8f7d8ffcd" +"236c245c21d809e84c89fd498b4e10488b91780100008b89d001000083c1" +"f02284248000000088440a0f4c8b7c2420498b8f78010000428884293801" +"0000498b5e104c89f74c8ba424880000004489e6ba30000000e800000000" +"498b4610488b88780100008b80d001000083c0f0c644010f018db558fcff" +"ff4c89f7ba60031000b930000000e800000000488b837801000042c64420" +"6001498b8778010000420fb684283801000088442430440fb6c04c89f744" +"89ee4489e28b4c2408e8000000004c89f78b5c240489de4489eae8000000" +"004c89f74c8b7c24104489fe89dae8000000004c89f78b5c241889de4489" +"fae8000000004c89f7488b74246889dae8000000004c89f74489fe4489ea" +"b968000000e800000000498b7e104d8b7e30448ba7d0010000418d5c24d0" +"be0d0000004939df0f83c20000004d8b6e384939dd7365be0e000000e9af" +"000000899fd001000048897c24184c89f789deba30000000e8000000004c" +"89f7488b74243089dae800000000be0d000000488b7c24184d39e7488b5c" +"24200f834afaffffbe0e0000004d39e50f823cfaffff4489a7d0010000e9" +"37faffff899fd001000048897c24084c89f789de488b6c241089eab9b004" +"1000e8000000004c89f789ee89dab930000000e800000000be0d00000048" +"8b7c2408488b6c24384d39e7730ebe0e0000004d39e50f8304030000e800" +"0000004c89f78b5c240489de488b542410e800000000448dbd40ffffff4c" +"89f7488b742470488b5424684489f9e800000000448da590fdffff4c89f7" +"8b74244489da4489e1e8000000008d9560fdffff4c89f7488b7424284489" +"7c24044489f9e8000000008d9510ffffff4c89f78b7424184489e1e80000" +"0000498b6e10498b5e30448bbdd0010000458d6fd0be0d0000004c39eb73" +"54498b46384c39e87307be0e000000eb4448894424104489add00100004c" +"89f74489eeba30000000e8000000004c89f74489e64489eae800000000be" +"0d0000004c39fb7310be0e0000004c397c24100f83230200004889efe800" +"0000004531ed4d8b66104d8b7e30418b8424d00100008d58d0be0d000000" +"4939df7360498b4e384839d97307be0e000000eb5048894c240841899c24" +"d00100004c89f789deba300000004889442410e8000000004c89f78b7424" +"0489dae800000000be0d00000089c5488b4424104939c77310be0e000000" +"48394424080f83aa0100004c89e7e80000000031ed4c8b7c24204189ec45" +"21ec498b4610488b88780100008b80d001000083c0f0448864010f4183f5" +"01498b4610488b88780100008b80d001000083c0f044886c010f83f50149" +"8b4610488b88780100008b80d001000083c0f040886c010f4421ed498b46" +"10488b88780100008b80d001000083c0f040886c010f4c89f7488b742470" +"8b542444e80000000089c321eb498b4610488b88780100008b80d0010000" +"83c0f0885c010f4c89f7488b7424288b542418e80000000021d8498b4e10" +"488b91780100008b89d001000083c1f088440a0f4409e0498b4e10488b91" +"780100008b89d001000083c1f088440a0f498b4e10488b91780100008b89" +"d001000083c1f00fb66c24304020c540886c0a0f4c89f78b5c246489de48" +"8b542448b968000000e800000000498b877801000089d940886c0868be0d" +"000000488b4424384839842490000000730cbe0e00000048394424787319" +"4c89ff4881c4980000005b415c415d415e415f5de900000000418987d001" +"00004881c4980000005b415c415d415e415f5dc34489a7d0010000e9f5fc" +"ffff4189c54489bdd0010000e9d9fdffff41898424d0010000e953feffff" +"662e0f1f840000000000554157415641554154534883ec18488b5f104c8b" +"7f30448babd0010000458da5c0feffffb80d0000004d39e70f83aa020000" +"488b47384c39e0730ab80e000000e99702000048894424104489a3d00100" +"004c8b771083f9608974240c0f83eb010000418bb6d00100008d56d0b80d" +"000000483957304889fd0f83a8000000b80e000000483957380f82990000" +"00418996d0010000498b8678010000894c1004498b8678010000c7041060" +"000000498b8678010000c744100c02000000498b8678010000c74410089c" +"081000498b867801000048c7441014020000008d46d448b9000000000500" +"00004809c8498bbe7801000048894417284809d1498b867801000048894c" +"10208d46f0498b8e780100008944111083c6d84889efbae0011000e80000" +"000031c04c89f789c6e8000000004889ef488b837801000042837c200c60" +"0f843a0100004c8b7710418bb6d00100008d4ec0b80d00000048394f300f" +"83d9000000b80e00000048394f380f82ca0000004181c5d0feffff41898e" +"d0010000498b8678010000c744080c2b000000498b8678010000c7440808" +"78001000498b8678010000c744081468001000498b867801000044896c08" +"10498b8678010000c744081c02000000498b8678010000c74408184c0710" +"00498b867801000048c7440824020000008d46d048ba0000000002000000" +"4809c2498b867801000048895408388d46c848ba00000000030000004809" +"c2498b867801000048895408308d46f0498b967801000089440a2083c6d8" +"baf0011000e80000000031c04c89f789c6e80000000031c0e98f00000041" +"8d85c8feffff498b8e78010000c744010460000000498b8e780100008914" +"01488b837801000042837c200c600f85c6feffff418d6da0428b54200849" +"89fe89eeb960000000e800000000458da5d0feffff4c89f74489e689eae8" +"000000004c89f78b74240c4489e2b9c801100041b818000000e800000000" +"b80d0000004d39ef730cb80e0000004c396c241073184889df89c64883c4" +"185b415c415d415e415f5de9000000004489abd00100004883c4185b415c" +"415d415e415f5dc3660f1f440000554157415641554154534881ec380200" +"0089f04889f9488b7f1048894c2428488b4930448ba7d0010000458d9424" +"60ecffffbe0d0000004c39d10f83bf240000488b7424284c8b4e38be0e00" +"00004d39d10f82a82400004c898c24d801000048898c24e0010000898424" +"64010000448997d0010000488b877801000089d1440fb60c084489cec1ee" +"078934244c8b742428498b4610488b88780100008b80d001000083c0f040" +"8874010f4489cec1ee068974243083e601498b4610488b88780100008b80" +"d001000083c0f08974240c408874010f41c1e9054183e10144894c240849" +"8b4610488b88780100008b80d001000083c0f044884c010f418dac2460f4" +"ffff4989ff48897c24504c89f789ee48896c242089d3b9300000004d89d5" +"4c89542410e800000000498b87780100004280a428000800001f458dbc24" +"00fdffff4c89f74489fe89eae800000000418db42460fdffff4889b42420" +"01000083c3304c89f789dae800000000418d9c2440fcffff4c89f789deba" +"30000000e800000000458dac24e0fbffff488b742450488b867801000048" +"8b5424100fb68c10d0100000498b4610488b807801000048898c24180100" +"0048f7d9c4a17a6f44382062f2fd287cc962f3f50825441802e2c4a17a7f" +"4428204c89bc24d0010000c4a17e6f043848899c245001000062f3f52825" +"0418e2c4a17e7f0428488b86780100000fb6ac1030110000418d9c24a0fc" +"ffff4c89f789deba30000000c5f877e800000000458dbc24c0fdffff498b" +"4610488b80780100004889ac249800000048f7dd488b942420010000c5fa" +"6f44102062f2fd287ccd62f3f50825441802e2c4a17a7f443820c5fe6f04" +"1048899c242801000062f3f528250418e2c4a17e7f0438418db424f0fdff" +"ff4c89f789b424040100004c89ac24300100004489eab930000000c5f877" +"e800000000418db42440f3ffff4c89f789742404e8000000008b54243023" +"1424498b4610488b88780100008b80d001000083c0f08854010f8b5c2408" +"83f301498b4610488b88780100008b80d001000083c0f0885c010f21d349" +"8b4610488b88780100008b80d001000083c0f0885c010f4c89f74489fee8" +"0000000021d8498b5610488b8a780100008b92d001000083c2f08844110f" +"488b6c2450488b8d78010000488b542410888411a807000083f001498b56" +"10488b8a780100008b92d001000083c2f0894424708844110f4c89f74c8b" +"6c24204489ee4489fae800000000418d9c2420f2ffff4c89f789de48895c" +"24384489ea4c89bc24480100004489f9e800000000458dac2420feffff4c" +"89f74489ee89dab9e0041000e800000000418db42450feffff89b424c400" +"0000418d942450f2ffff48899424100100004c89f7b910051000e8000000" +"004c89f74489eee8000000004189c74c89f7488b5c241089deba60000000" +"e800000000488b857801000044887c18604183f70144897c2458498b4610" +"488b88780100008b80d001000083c0f044887c010f418d9c2480feffff4c" +"89f789de4489ac248c0000004489eab920041000e8000000004c89f74c8b" +"7c24204489fe89dae800000000418db424e0feffff8974244c4c89f74489" +"fa4489e9e800000000418db42440ffffff897424484c89f7899c24000100" +"0089da4489e9e800000000458d9c2470ffffff4d89e5498b4610488b8078" +"0100004a8b3c184e8b44180831ed48b9abaafffffffffeb94829f941b900" +"0000004d19c94a8b5418284e8b5418204a8b5c18184c09c74889d64c09d6" +"4809fe4809de4c89cf4c29c74c899c24c80100004e8b4418104983d90045" +"31db49bf0000ac4e010054e14c39ff410f97c34d01cb49c1fb3f4d89d94d" +"29c14983db004531ff49bcdb094f095f2dcf984d39e1410f97c74d01df49" +"c1ff3f4d89fb4929db4983df004531e448bb40ed7a0c7bb4889b4939db41" +"0f97c44d01fc49c1fc3f4c89e34c29d34983dc004531d249bf2853b4bc49" +"58e4b44c39fb410f97c24d01e249c1fa3f4929d248ba9ae67f39ea11011a" +"4901d24c09c648baffff53b1feffab1e488d1417480f44d5488b74242048" +"89543008480f44cd48890c3048b924f6b0f6a0d23067498d0c09480f44cd" +"48894c301048b9bf1285f3844b7764498d0c0b480f44cd48894c301848b9" +"d7ac4b43b6a71b4b488d0c0b480f44cd48894c30204c0f44d54c89543028" +"4889f5418db590f4ffff897424184c89f78b542448b930000000e8000000" +"00418db560edffff4c89f7ba30000000e800000000418d9d30edffff4c89" +"f789deba60031000b930000000e800000000458d7da04c89f74489fe899c" +"24a800000089dae8000000004c89f78b74244c44897c24444489fae80000" +"00004189c7418db510ffffff89b424ac000000418d55d04c89f789942488" +"000000e8000000004121c7498b4610488b88780100008b80d001000083c0" +"f044887c010f4c89f7488b7424384889eb89eab960000000e80000000048" +"8b442450488b8078010000488b4c24104488bc08200600004183f701498b" +"4610488b88780100008b80d001000083c0f044887c010f4c89f78b6c2418" +"89eeba30000000e8000000004c89f789deba60031000b930000000e80000" +"00004c89ac2408010000418db5e0efffff4889b424a00000004c89f78b54" +"244c89d9e800000000418db510f0ffff48897424604c89f78b9424ac0000" +"0089e9e8000000004181c5f8edffff4c89f74489ee4c896c2468488bac24" +"a000000089eab950041000e8000000004c89f74989dc4489e64489ea8b4c" +"2448e800000000498b4610488b88780100008b80d001000083c0f0c64401" +"0f01488b5c2450488b83780100004c8b6c241042c6842860080000014c89" +"f789ee488b6c243889ea4489e14589f8e8000000004c89f789eeba600000" +"00e800000000488b8378010000460fb6bc28e0030000498b4610488b8078" +"0100004c89f948f7d9488b9424a0000000c5fa6f44102062f2fd287cc962" +"f3f50825442802e24c8b642468c4a17a7f442020c5fe6f041062f3f52825" +"0428e2c4a17e7f0420488b8424080100008db028eeffff4889742430498b" +"4610488b8078010000488b542460c5fa6f441020488b8c241001000062f3" +"f50825440802e2c5fa7f443020c5fe6f041062f3f528250408e2c5fe7f04" +"304c89f7488b5c242089de4489e2c5f877e8000000004c89f789de8b9424" +"8c000000e8000000004189c54c89f78b7424188b9424c4000000e8000000" +"0089c54421ed498b4610488b88780100008b80d001000083c0f040886c01" +"0f498b4610488b88780100008b80d001000083c0f04420fd40886c010f4c" +"89f789de4489e2b960000000e8000000004c8b6c2450498b85780100004c" +"8b7c24104288ac38600800004c89f7488bac24a000000089ee4489fa89d9" +"448b442458e8000000004c89f74489feba60000000e800000000498b8578" +"010000420fb68c38e0030000498b4610488b807801000048894c245848f7" +"d9c5fa6f44282062f2fd287cc962b3f50825443802e2c4a17a7f442020c5" +"fe6f042862b3f528250438e2c4a17e7f04204c89e24c8bbc240801000041" +"8d8790ecffff498b4e10488b8978010000488b742460c5fa6f44312062f3" +"f50825440102e24c8b642430c4a17a7f442120c5fe6f043162f3f5282504" +"01e2c4a17e7f04214c89f789de4889d3c5f877e800000000418d8780f2ff" +"ff894424604c89f74489e6e8000000008944241c498b7e104d8b6e30448b" +"bfd0010000458d67d0be0d0000004d39e57369488b442428488b68384c39" +"e57307be0e000000eb544489a7d00100004889bc24900000004c8b742428" +"4c89f74489e6ba30000000e8000000004c89f7488b7424304489e2e80000" +"0000be0d000000488bbc24900000004d39fd730ebe0e0000004c39fd0f83" +"331a0000e8000000004531ff4c8b7424284c89f789dee8000000004421f8" +"498b4e10488b91780100008b89d001000083c1f088440a0f0b44241c498b" +"4e10488b91780100008b89d001000083c1f088440a0f33442408498b4e10" +"488b91780100008b89d001000083c1f088440a0f498b4e10488b89780100" +"0048f7d88b5424604c8b642420c4a17a6f44212062f2fd287cc862f3f508" +"25441902e2c5fa7f441120c4a17e6f042162f3f528250419e24889942430" +"020000c5fe7f04114c8bac2408010000418d8db0f2ffff498b4610488b80" +"780100008b54241848899424b0010000c5fa6f441020488b74243062f3f5" +"0825443002e2c5fa7f440820c5fe6f041062f3f528250430e248898c2428" +"020000c5fe7f04084c89f7488b7424384989f7488b942448010000b96000" +"0000c5f877e8000000008b6c240c83f501498b4610488b88780100008b80" +"d001000083c0f040886c010f232c24498b4610488b88780100008b80d001" +"000083c0f040886c010f236c2458498b4610488b88780100008b80d00100" +"0083c0f040886c010f4c89f74489e64d89fe4489f2b9c0000000e8000000" +"004c8b7c2450498b8778010000488b5c24104088ac18c8080000498b8778" +"0100008b4c240c888c18c0080000488b7c24284489f68b5424044489e144" +"8b6424704589e0e8000000004489e0f7d8498b8f780100000fb68c19a807" +"000021e841ffcc4121cc4109c44423a42498000000488b6c2428488b4510" +"488b88780100008b80d001000083c0f0448864010f4889ef89de488b5424" +"38b9c8000000e800000000418d852cedffff418d8decf2ffff498b977801" +"00008b0c0a890c02498b87780100008b8c1889060000898c18c900000044" +"23a42418010000488b4510488b88780100008b80d001000083c0f0448864" +"010f498b87780100004488a418c80000004889ef4c8b7424684489f6e800" +"0000004889ef8bac24a800000089ee4489f289d944896424704589e0e800" +"000000418db5c0eeffff8934244c8b7424284c89f789eae8000000004c89" +"f7488b742438ba30000000e800000000498b877801000048b93a8564153f" +"6de51448898c1818060000498b877801000048b96890dbe24ff0e4144889" +"8c1810060000498b877801000048b92410887e8c1b0da248898c18080600" +"00498b877801000048b92c7e9b306608885048898c1800060000498b8778" +"01000048b9d5a585325322f32a48898c18f8050000498b877801000048b9" +"c3457586e4c90d8948898c18f0050000498b877801000048b9d287fdbbed" +"7e2b0e48898c1838070000498b877801000048b91dbcce966659a22d4889" +"8c1830070000498b877801000048b9a7d474da8720cad148898c18280700" +"00498b877801000048b9f1be4e6bd88d082f48898c1820070000498b8778" +"01000048b97c7e922ac1de17dc48898c1818070000498b877801000048b9" +"da0fa35aa2a7cf7b48898c1810070000498b877801000048b9c85e827dfc" +"92d50b48898c1808070000498b877801000048b9b9f07cac4f4e791d4889" +"8c1800070000498b877801000048b9183e1019fd2aad9248898c18f80600" +"00498b877801000048b93237628bc844283848898c18f0060000498b8778" +"01000048b98381c1863d21944248898c18e8060000498b877801000048b9" +"d19a5ca55d582f3e48898c18e0060000458d9df0eeffff498b4610488b80" +"780100004e8b04184e8b54180831db48baabaafffffffffeb94c29c2b900" +"0000004819c94a8b7418284e8b4c18204e8b6418184d09d04889f74c09cf" +"4c09c74c09e74989c84d29d04c899c24a80100004e8b5418104883d90049" +"bb0000ac4e010054e14d39c34883d10048c1f93f4989cb4d29d34883d900" +"49bfdb094f095f2dcf984d39df4883d10048c1f93f4989cf4d29e74883d9" +"0049bc40ed7a0c7bb4889b4d39fc4883d10048c1f93f4989cc4d29cc4883" +"d90049b92853b4bc4958e4b44d39e14883d10048c1f93f4829f148be9ae6" +"7f39ea11011a4801f14c09d748beffff53b1feffab1e498d3430480f44f3" +"488bac24b00100004889742808480f44d34889142848ba24f6b0f6a0d230" +"67498d1413480f44d3488954281048babf1285f3844b7764498d1417480f" +"44d3488954281848bad7ac4b43b6a71b4b498d1414480f44d34889542820" +"480f44cb48894c28284c89f7488b5c242089de8b1424b930000000e80000" +"00004c89f7488bb424a000000089da488b4c2438e800000000458d9d50ef" +"ffff498b4610488b80780100004e8b04184e8b54180848baabaaffffffff" +"feb94c29c2b9000000004819c94a8b7418284e8b4c18204e8b6418184d09" +"d04889f74c09cf4c09c74c09e74989c84d29d04c899c24f00100004e8b54" +"18104883d90049bb0000ac4e010054e14d39c34883d10048c1f93f4989cb" +"4d29d34883d90048bbdb094f095f2dcf984c39db4883d10048c1f93f4989" +"cf4d29e74883d90048bb40ed7a0c7bb4889b4c39fb4883d10048c1f93f49" +"89cc4d29cc4883d90049b92853b4bc4958e4b44d39e14883d10048c1f93f" +"4829f148be9ae67f39ea11011a4801f14c09d748beffff53b1feffab1e49" +"8d3430bf00000000480f44f74889742808480f44d74889142848ba24f6b0" +"f6a0d23067498d1413480f44d7488954281048babf1285f3844b7764498d" +"1417480f44d7488954281848bad7ac4b43b6a71b4b498d1414480f44d748" +"89542820480f44cf4531e448894c2828418d9520efffff4c89f7488b5c24" +"2089de89542408b930000000e800000000418db540f0ffff4c89f789b424" +"6001000089da8b4c2404e800000000458d95b0efffff498b4610488b8078" +"0100004a8b3c1048bbabaafffffffffeb94829fbb9000000004819c94e8b" +"4410084c09c74a8b7410284e8b4c10204889f24c09ca4809fa4e8b7c1018" +"4c09fa4889cf4c29c74883d90049b80000ac4e010054e14939f84883d100" +"48c1f93f4c899424e80100004e8b5c10104989c84d29d84883d90049badb" +"094f095f2dcf984d39c24883d10048c1f93f4989ca4d29fa4883d90049bf" +"40ed7a0c7bb4889b4d39d74883d10048c1f93f4989cf4d29cf4883d90049" +"b92853b4bc4958e4b44d39f94883d10048c1f93f4829f148be9ae67f39ea" +"11011a4801f14c09da48baffff53b1feffab1e488d1417490f44d4488954" +"2808490f44dc48891c2848ba24f6b0f6a0d23067498d1410490f44d44889" +"54281048babf1285f3844b7764498d1412490f44d4488954281848bad7ac" +"4b43b6a71b4b498d1417490f44d44889542820490f44cc48894c2828418d" +"9580efffff4c89f7488b5c242089de89542410b930000000e80000000041" +"8db5a0f0ffff4c89f789b4245c01000089dab960000000e8000000004c89" +"f78b742418ba30000000e8000000004c89f789deba60031000b930000000" +"e800000000418db500f1ffff4c89f789b42490000000ba60000000e80000" +"0000418db560f1ffff4c89f78974247489dab960000000e800000000418d" +"b5c0f1ffff4c89f78974241cba60000000e800000000418d85c0f4ffff48" +"89842438010000418d85a0f3ffff4889842420020000418d8520f5ffff48" +"89842440010000418d85e0f2ffff4889842418020000418d8500f4ffff48" +"89842418010000418d8540f9ffff89442430418d85a0f9ffff898424fc00" +"0000418d85d0f9ffff898424f8000000418d8570f9ffff8944240c418d85" +"00faffff89442468418d8530faffff898424f4000000418d8560faffff89" +"8424f0000000418d8590faffff898424ec000000418d85c0faffff898424" +"e8000000418d8520fbffff898424e4000000418d8580fbffff898424e000" +"0000418d8570fcffff898424dc000000418d85b0fbffff898424d8000000" +"418d8530fdffff898424d4000000418d8590fdffff898424d0000000418d" +"85b0feffff898424cc000000418d8510fcffff898424c8000000418d8570" +"f3ffff48894424588b4424044889842410020000418d85d0f3ffff488984" +"2408020000418d85f0f4ffff48898424c0010000418d8510f3ffff488984" +"2400020000418d8530f4ffff48898424f8010000418d8550f5ffff488984" +"24b8010000418d8580f5ffff89842484000000418d85e0f5ffff89842498" +"000000418d8540f6ffff89842480000000418d85a0f6ffff898424a40100" +"00418d85d0f6ffff898424a0010000418d8530f1ffff898424c000000041" +"8d8590f1ffff898424bc000000418d8500f7ffff8984249c010000418d85" +"30f7ffff89842498010000418d8560f7ffff89842494010000418d85c0f7" +"ffff89842490010000418d85f0f7ffff8984248c010000418d85b0f5ffff" +"898424b8000000418d8510f6ffff8944247c418d8520f8ffff8944247841" +"8d8550f8ffff89842488010000418d8590f7ffff89842484010000418d85" +"80f8ffff89842480010000418d85b0f8ffff8984247c010000418d85f0f1" +"ffff898424b4000000418d85e0f8ffff89842478010000418d8510f9ffff" +"89842474010000418d8570f6ffff898424b0000000418d85f0faffff8984" +"2470010000418d8550fbffff8984246c010000418d85d0fcffff89842468" +"01000048b80080000000800069eb170f1f80000000004889c848d1e84883" +"f9010f866c0a000048894424604c8b7424284c89f7448b7c24304489fe8b" +"5c240889dae8000000004c89f78bac24fc00000089ee4489fa4489f9e800" +"0000004c89f7448bbc24f80000004489fe8b4c240c89cae8000000004c89" +"f7448b6424684489e689ea89e9e8000000004c89f78bac24f400000089ee" +"4489fa4489f9e8000000004c89f7448bbc24f00000004489fe4489e24489" +"e1e8000000004c89f78bb424ec00000089ea89e9e8000000004c89f78bac" +"24e800000089ee89da8b5c241089d9e8000000004c89f7448ba424e40000" +"004489e689dae8000000004c89f7448bac24e00000004489ee4489e2b940" +"051000e8000000004c89f7488bb424300100004489ea4489f9e800000000" +"4c89f7488bb424500100008b5424304489e9e8000000004c89f78bb424dc" +"0000008b54240c8b9c24d800000089d9e8000000004c89f7488bb4242801" +"000089ea4489f9e8000000004c89f74c8bbc24d00100004489fe4489ea44" +"89e9e8000000004c89f78bac24d400000089ee89da89d9e8000000004c89" +"f74c8ba424200100004489e64489fa4489e9e8000000004c89f7448bbc24" +"d00000004489fe89ea89d9e8000000004c89f7488bac244801000089ee8b" +"5424304489e1e8000000004c89f78bb424040100008b54240c4489f9e800" +"0000004c89f7448ba4248c0000004489e689ea488b8c2450010000e80000" +"00004c89f7448bac24000100004489ee488b9424300100004489e1e80000" +"00004c89f78bb424cc0000008b9424c80000008b8c24c4000000e8000000" +"004c89f7448b7c244c4489fe8b14248b4c2408e8000000004c89f7448b64" +"24484489e689ea4489f9e8000000004c89f78b7424044489e24489e1e800" +"0000004c89f74c8b7c24584489fe488b8c24c801000089cae8000000004c" +"89f7488bac242002000089ee4489eab960000000e8000000004c89f7488b" +"b42418010000488b942428010000b960000000e8000000004c89f78bb424" +"88000000ba30000000e8000000004c89f78b5c244489deba60031000b930" +"000000e8000000004c89f74c8b6c24204489eeba60000000e8000000004c" +"89f74c8ba424380100004489e689dab960000000e8000000004c89f7488b" +"9c244001000089deba60000000e8000000004c89f78b742410e800000000" +"89c048f7d862f2fd287cc0498b4610488b8078010000c4a17a6f4c282048" +"8b8c241002000062f3fd08254c0802e2488b542438c5fa7f4c1020c4a17e" +"6f0c2862f3fd28250c08e2c5fe7f0c10498b4610488b8078010000488b8c" +"24b0010000c5fa6f4c082062b3fd08254c3802e2488bb42410010000c5fa" +"7f4c3020c5fe6f0c0862b3fd28250c38e2c5fe7f0c30498b4610488b8078" +"010000c4a17a6f4c202062f3fd08254c2802e2488b8c2430020000c5fa7f" +"4c0820c4a17e6f0c2062f3fd28250c28e2c5fe7f0c08498b4610488b8078" +"010000488bbc24c0010000c5fa6f4c3820488bb4240802000062f3fd0825" +"4c3002e2488b8c2428020000c5fa7f4c0820c5fe6f0c3862f3fd28250c30" +"e2c5fe7f0c08498b4610488b8078010000c5fa6f4c1820488bb424180100" +"0062f3fd08254c3002e2488b8c2418020000c5fa7f4c0820c5fe6f0c1862" +"f3fd28250c30e2c5fe7f0c08498b4610488b80780100004c8b8424b80100" +"00c4a17a6f4c0020488bb424f801000062f3fd08254c3002e2488b8c2400" +"020000c5fa7f4c0820c4a17e6f0c0062f3fd28250c30e2c5fe7f0c084c89" +"f78b3424b920010000c5f877e800000000488b4c2460f6c1010f84edfaff" +"ff4c8b7424284c89f78bb42484000000448ba424900000004489e2448b2c" +"244489e9e8000000004c89f78bb424980000008b6c247489ea448b7c2408" +"4489f9e8000000004c89f78bb424800000008b54241c8b4c2410e8000000" +"004c89f78b9c24a401000089de4489e289e9e8000000004c89f78bb424a0" +"0100008b9424c00000008b8c24bc000000e8000000004c89f7448ba4249c" +"0100004489e64489ea4489f9e8000000004c89f78bb42498010000488b94" +"24a8010000488bac24f001000089e9e8000000004c89f7448bac24940100" +"004489ee89da4489e1e8000000004c89f78b9c249001000089de8b942484" +"0000008b8c2498000000e8000000004c89f7448ba4248c0100004489e68b" +"9424b80000008b4c247ce8000000004c89f78b7424784489ea89d9e80000" +"00004c89f78bb424880100008b9424840100004489e1e8000000004c89f7" +"8b9c248001000089de8b5424748b4c241ce8000000004c89f78bb4247c01" +"00008b9424bc0000008b8c24b4000000e8000000004c89f7448bbc247801" +"00004489fe8b5424088b4c2410e8000000004c89f78bb4247401000089ea" +"4c8ba424e80100004489e1e8000000004c89f78b6c243089ee89da4489f9" +"e8000000004c89f7448bbc24fc0000004489fe8b942498000000448bac24" +"800000004489e9e8000000004c89f78b9c24f800000089de8b54247c8b8c" +"24b0000000e8000000004c89f78b74246889ea4489f9e8000000004c89f7" +"8bb424f40000008b54240c89d9e8000000004c89f78b9c24f000000089de" +"8b9424900000008b4c241ce8000000004c89f78bb424ec0000008b9424c0" +"0000008b8c24b4000000e8000000004c89f78bac24e800000089ee8b1424" +"8b4c2410e8000000004c89f78bb42470010000488b9424a80100004489e1" +"e8000000004c89f7448ba424e40000004489e689da89e9e8000000004c89" +"f78b9c24e000000089de448bbc24840000004489fa4489e9e8000000004c" +"89f78bac24d800000089ee448bac24b80000004489ea8b8c24b0000000e8" +"000000004c89f7488bb424300100004489e289d9e8000000004c89f78bb4" +"24c80000008b94246c01000089e9e8000000004c89f74c8ba42450010000" +"4489e64489fa4489f9e8000000004c89f78b9c24dc00000089de4489ea44" +"89e9e8000000004c89f7488bb424280100004489e24489f9e8000000004c" +"89f78bb4246801000089da4489e9e8000000004c89f74c8bac24d0010000" +"4489ee8b942480000000b940051000e8000000004c89f7488bb424200100" +"00448ba424980000004489e24489e9e8000000004c89f78bb424d0000000" +"448b7c247c4489fa8bac24d400000089e9e8000000004c89f7488b9c2448" +"01000089de4489e24489e9e8000000004c89f78bb424040100004489fa89" +"e9e8000000004c89f78bac248c00000089ee488b942430010000b9400510" +"00e8000000004c89f7448bbc24000100004489fe8b54246889e9e8000000" +"004c89f7448b6c244c4489ee8b54247889d9e8000000004c89f7488b7424" +"204489ea4489f9e8000000004c89f78b7424188b9424ac0000008b8c24cc" +"000000e8000000004c89f7448b7c24484489fe89ea4c8bac242801000044" +"89e9e8000000004c89f78b6c244489ee89da4c8ba424200100004489e1e8" +"000000004c89f7488bb4243801000089ea4489f9e8000000004c89f7488b" +"b424c00100008b942488000000488b8c24c8010000e8000000004c89f748" +"8b5c243889de4489ea8b4c2478e8000000004c89f7448b7c24044489fe44" +"89e28b4c2468e8000000004c89f7488bb424400100004489fa89d9e80000" +"00004c89f7488bb424b8010000488b542458488b8c2410010000e8000000" +"004c89f78bb42490000000488b542420b920010000e800000000488b4c24" +"60e984f5ffff4c8b7424284c89f7488bb424380100008b6c247489eae800" +"0000004c89f7488bb42440010000448b64241c4489e2b960000000e80000" +"00004c89f74c8b6c24204489ee8b9c249000000089dab960000000e80000" +"00004c89f789de4489eab920010000e8000000004c89f78b742444488b94" +"24a00000004489e1e8000000004c89f74c8b7c24384489fe89da8b9c245c" +"01000089d9e8000000004c89f78b7424048b9424600100004489e1e80000" +"00004c89f74489ee89ea89d9e8000000004c89f789dee80000000089c54c" +"89f74489e6e80000000089c34189c44121ec498b4610488b88780100008b" +"80d001000083c0f0448864010f83f501498b4610488b88780100008b80d0" +"01000083c0f040886c010f83f301498b4610488b88780100008b80d00100" +"0083c0f0885c010f21eb498b4610488b88780100008b80d001000083c0f0" +"885c010f4c89f78b7424444489fae8000000004189c74c89f78bb4248800" +"0000488b942410010000e80000000089c54421fd498b4610488b88780100" +"008b80d001000083c0f040886c010f21dd498b4610488b88780100008b80" +"d001000083c0f040886c010f4c89f78b7424044489eae8000000004189c7" +"4c89f7488b7424588b542418e80000000089c34421fb498b4610488b8878" +"0100008b80d001000083c0f0885c010f21eb498b4610488b88780100008b" +"80d001000083c0f0885c010f4409e3498b4610488b88780100008b80d001" +"000083c0f0885c010f235c2470498b4610488b88780100008b80d0010000" +"83c0f0885c010f4c89f78bac246401000089ee8b9424a8000000b9c80000" +"00e800000000488b7c2450488b877801000089e9889c08c8000000be0d00" +"0000488b84240801000048398424e0010000730fbe0e00000048398424d8" +"01000073164881c4380200005b415c415d415e415f5de9000000008987d0" +"0100004881c4380200005b415c415d415e415f5dc34489bfd00100004189" +"c7e9c6e5ffff0f1f4000554157415641554154534881ec380300004889fd" +"488b7f10488b45308b97d0010000448d82a0c9ffffbe0d0000004c39c00f" +"8355350000488b4d38be0e0000004c39c10f824335000048898c24280300" +"004889842430030000448987d0010000488b877801000048b952da0ecf00" +"491b054a898c0074060000488b877801000048b98da7b7dc0f08770c4a89" +"8c006c060000488b877801000048b92fdff49de507586a4a898c00640600" +"00488b877801000048b903a2313304977f314a898c005c060000488b8778" +"01000048b9064f26a523adcb654a898c0054060000488b877801000048b9" +"8ddf18ec32404fb24a898c004c060000488b877801000048b91002218bd6" +"67f00e4a898c0044060000488b877801000048b98befb9354429c1cf4a89" +"8c003c060000488b877801000048b9d683bc8246e0014d4a898c00340600" +"00488b877801000048b981eed35093439fe34a898c002c060000488b8778" +"01000048b92ef949e58a54594b4a898c0024060000488b877801000048b9" +"eb87efe72a2be9964a898c001c060000488b877801000048b9b999f5f333" +"b0d0bb4a898c0014060000488b877801000048b954bda10a1a4b2da84a89" +"8c000c060000488b877801000048b9c53657120125c7a24a898c00040600" +"00488b877801000048b9058adf09f746a0e44a898c00fc050000488b8778" +"01000048b9095700760df96b534a898c00f4050000488b877801000048b9" +"d4f820a2fee3da2e4a898c00ec050000488b877801000048b90c64d6f8ea" +"4ea54a4a898c00e4050000488b877801000048b93c1284b1252a4bce4a89" +"8c00dc050000488b877801000048b9b9e7f997fdf07ad64a898c00d40500" +"00488b877801000048b9a43b6298f92885464a898c00cc050000488b8778" +"01000048b9b78970c9f30ddd8e4a898c00c4050000488b877801000048b9" +"21844bfd7240749b4a898c00bc050000488b877801000048b9c1bde5335d" +"5e40754a898c00b4050000488b877801000048b97fce19c2ff80f5e84a89" +"8c00ac050000488b877801000048b9322eccf26d9e72294a898c00a40500" +"00488b877801000048b9a9f11c282c3e0b2a4a898c009c050000488b8778" +"01000048b9adcab0d28316d8394a898c0094050000488b877801000048b9" +"4178326caf22c0c54a898c008c050000488b877801000048b9cff0c97fd5" +"c4645a4a898c0084050000488b877801000048b95302a450b27de3fd4a89" +"8c007c050000488b877801000048b95afae91498778e784a898c00740500" +"00488b877801000048b9b8c686d299aa0cf14a898c006c050000488b8778" +"01000048b90698c269a9e2c0c94a898c0064050000488b877801000048b9" +"e2085d7e3527c0c44a898c005c050000488b877801000048b941445f3d6d" +"94af714a898c0054050000488b877801000048b97ea150be2f2c08284a89" +"8c004c050000488b877801000048b97ec7afab7fbdde6c4a898c00440500" +"00488b877801000048b9917ace92b32c91bf4a898c003c050000488b8778" +"01000048b9b4cb13981dcb09044a898c0034050000488b877801000048b9" +"0c4b447ee691d82d4a898c002c050000488b877801000048b907f050e861" +"cea41c4a898c0024050000488b877801000048b9c89dfde184b53c5a4a89" +"8c001c050000488b877801000048b985e2182d21a42e7d4a898c00140500" +"00488b877801000048b9979e23f8f68f26d44a898c000c050000488b8778" +"01000048b96e14be256cfab2bb4a898c0004050000488b877801000048b9" +"f51149b0e86b82ac4a898c00fc040000488b877801000048b9a0c38e8501" +"8b05824a898c00f4040000488b877801000048b91ac3c08c6576af114a89" +"8c00ec040000488b877801000048b9f0704ae04640c63b4a898c00e40400" +"00488b877801000048b906bb5c07f82d86554a898c00dc040000488b8778" +"01000048b997a74aba617990244a898c00d4040000488b877801000048b9" +"c9a94cf2070ac01e4a898c00cc040000488b877801000048b9a9d19f658c" +"f8deea4a898c00c4040000488b877801000048b9a2e85df8a770c5d44a89" +"8c00bc040000488b877801000048b947865f8e53fbf0f14a898c00b40400" +"00488b877801000048b98676ab1bdadb75a34a898c00ac040000488b8778" +"01000048b9fdeeaed38ea6df334a898c00a4040000488b877801000048b9" +"4619569ed2963b9f4a898c009c040000488b877801000048b9b58f0c3a23" +"3fc7234a898c0094040000488b877801000048b945a4d0ff31500e404a89" +"8c008c040000488b877801000048b9eec8fa914c1939514a898c00840400" +"00488b877801000048b9835789d5691b6e254a898c007c040000488b8778" +"01000048b9be1c99b744243f3c4a898c0074040000488b877801000048b9" +"c4eb15b868e4ce754a898c006c040000488b877801000048b93fcae2788d" +"c1f8414a898c0064040000488b877801000048b91a4fd52d920680674a89" +"8c005c040000488b877801000048b9ac7821c639cc865d4a898c00540400" +"00488b877801000048b914debce80d4ad6b64a898c004c040000488b8778" +"01000048b91d5c67fb48b6a23b4a898c0044040000488b877801000048b9" +"e98d0a89d29704814a898c003c040000488b877801000048b95aa6b68508" +"e667db4a898c0034040000488b877801000048b935ea62acd53e16224a89" +"8c002c040000488b877801000048b9bdfe0b0b3abbc8584a898c00240400" +"00488b877801000048b9b953dfbb0629143e4a898c001c040000488b8778" +"01000048b9e84933fadf525e084a898c0014040000488b877801000048b9" +"b5c59b503dfc08294a898c000c040000488b877801000048b9746cf132b4" +"f73eda4a898c0004040000488b877801000048b933663b38ab2e31ff4a89" +"8c00fc030000488b877801000048b9e09163a9cbda70b94a898c00f40300" +"00488b877801000048b91106f2074bdc572f4a898c00ec030000488b8778" +"01000048b95c149e3c17b8c68f4a898c00e4030000488b877801000048b9" +"a39f7053c4b6d74a4a898c00dc030000488b877801000048b98e00391ba8" +"27e2284a898c00d4030000488b877801000048b9163a6090e36b6bb64a89" +"8c00cc030000488b877801000048b9cfc9c0909a5e15024a898c00c40300" +"00488b877801000048b99643fc8d5fb35e6f4a898c00bc030000488b8778" +"01000048b91ef8eb3f94f011164a898c00b4030000488b877801000048b9" +"dba649f945ce0f974a898c00ac030000488b877801000048b94e61305f3b" +"b11df74a898c00a4030000488b877801000048b9a5a0846d6c65de8f4a89" +"8c009c030000488b877801000048b97d48e3de74a857184a898c00940300" +"00488b877801000048b9b142419a0be889f64a898c008c030000488b8778" +"01000048b90afaf949d22389574a898c0084030000488b877801000048b9" +"d6b3bb1524ce2ba04a898c007c030000488b877801000048b9234af506b9" +"38786c4a898c0074030000488b877801000048b9843a5725a9013fe64a89" +"8c006c030000488b877801000048b95c5f97a4283bd6604a898c00640300" +"00488b877801000048b9acc551bd79c19f1b4a898c005c0300008d8234d0" +"ffff488b8f7801000048c70401000000008d822cd0ffff488b8f78010000" +"48c70401000000008d8224d0ffff488b8f7801000048c704010000000048" +"89bc2420020000488b87780100004c894424184ac784007c060000000000" +"0048895424408d9a3cd0ffff488b7d104c8b6530448bb7d0010000458d7e" +"f0be0d0000004d39fc48896c24280f83c50000004c8b6d384d39fd730abe" +"0e000000e9b2000000488b44244005fcccffff894424104489bfd0010000" +"418d76f84889fd488b7c2428ba30000000b90100000041b80100000041b9" +"f0001000e800000000488b8578010000428b4c3808894c2420468b7c380c" +"488b7c24284489fe8b542410b930000000e800000000be0d0000004889ef" +"488b6c2428488b877801000089d9c744080830000000488b877801000044" +"897c0804488b87780100008b5424208914084d39f4730ebe0e0000004d39" +"f50f83112b0000e8000000004c8b742440418db648d0ffff4889ef897424" +"3c89dae800000000418d9eb4d0ffff488b7d104c8b6530448bb7d0010000" +"458d7ef0be0d0000004d39fc0f83c50000004c8b6d384d39fd730abe0e00" +"0000e9b2000000488b442440052ccdffff894424104489bfd0010000418d" +"76f84889fd488b7c2428ba30000000b90100000041b80100000041b9f000" +"1000e800000000488b8578010000428b4c3808894c2420468b7c380c488b" +"7c24284489fe8b542410b930000000e800000000be0d0000004889ef488b" +"6c2428488b877801000089d9c744080830000000488b877801000044897c" +"0804488b87780100008b5424208914084d39f4730ebe0e0000004d39f50f" +"83112a0000e800000000488b842420020000480578010000488944241048" +"8b4424408db0c0d0ffff4889ef8974245889dae800000000488b7d104c8b" +"7d30448bb7d0010000458d6ef0be0d0000004d39ef730e4c8b65384d39ec" +"7374be0e000000488b5c2410e800000000488b4424408db038d1ffff488b" +"03488b4c24188b9408900700008b8c08940700004889ef89742450e80000" +"0000488b7d104c8b7d30448bb7d0010000458d6ef0be0d0000004d39ef0f" +"83a00100004c8b65384d39ec0f83d9000000be0e000000e989010000488b" +"4424408d882cd1ffff894c2420055ccdffff894424304489afd001000041" +"8d76f84889fb4889efba60000000b90100000041b80100000041b9f00010" +"00e800000000488b8378010000428b4c2808894c2448428b6c280c488b7c" +"242889ee8b542430b960000000e800000000be0d0000004889df488b8378" +"0100008b4c2420c744080860000000488b8378010000896c0804488b6c24" +"28488b83780100008b5424488914084d39f7488b5c24100f83e1feffffbe" +"0e0000004d39f40f82d3feffff4489b7d0010000e9ccfeffff488b442440" +"8d8804d2ffff894c242005bccdffff894424304489afd0010000418d76f8" +"4889fb4889efba60000000b90100000041b80100000041b9f0001000e800" +"000000488b8378010000428b4c2808894c2448428b6c280c488b7c242889" +"ee8b542430b960000000e800000000be0d0000004889df488b8378010000" +"8b4c2420c744080860000000488b8378010000896c0804488b6c2428488b" +"83780100008b5424488914084d39f7730ebe0e0000004d39f40f83c92700" +"00e800000000488b442410488b5c24408db310d2ffff488b00488b4c2418" +"8b9408680800008b8c086c0800004889ef89742478e80000000081c3dcd2" +"ffff488b7d104c8b6530448bb7d0010000458d7ef0be0d0000004d39fc0f" +"83c50000004c8b6d384d39fd730abe0e000000e9b2000000488b44244005" +"1cceffff894424204489bfd0010000418d76f84889fd488b7c2428ba3000" +"0000b90100000041b80100000041b9f0001000e800000000488b85780100" +"00428b4c3808894c2430468b7c380c488b7c24284489fe8b542420b93000" +"0000e800000000be0d0000004889ef488b6c2428488b877801000089d9c7" +"44080830000000488b877801000044897c0804488b87780100008b542430" +"8914084d39f4730ebe0e0000004d39f50f83b2260000e800000000488b44" +"24408db0e8d2ffff4889ef8974247089dae800000000488b7d104c8b7d30" +"448bb7d0010000458d6ef0be0d0000004d39ef0f83cd0000004c8b65384d" +"39ec730abe0e000000e9ba000000488b4424408d8854d3ffff894c242005" +"4cceffff894424304489afd0010000418d76f84889fb4889efba60000000" +"b90100000041b80100000041b9f0001000e800000000488b837801000042" +"8b4c2808894c2448428b6c280c488b7c242889ee8b542430b960000000e8" +"00000000be0d0000004889df488b83780100008b4c2420c7440808600000" +"00488b8378010000896c0804488b6c2428488b83780100008b5424488914" +"084d39f7730ebe0e0000004d39f40f83b2250000e800000000488b4c2410" +"488b4424408db060d3ffff488b01488b4c24188b9408b80900008b8c08bc" +"0900004889ef89742468e800000000488b7d104c8b75308b9fd001000044" +"8d7bf0be0d0000004d39fe0f83c60000004c8b65384d39fc730abe0e0000" +"00e9b3000000488b4424408d8828d4ffff894c242005acceffff89442430" +"4489bfd00100008d73f84989fd4889efba90000000b90100000041b80100" +"000041b9f0001000e800000000498b8578010000428b6c3808468b7c380c" +"488b7c24284489fe8b542430b990000000e800000000be0d0000004c89ef" +"498b85780100008b4c2420c744080890000000498b857801000044897c08" +"04498b8578010000892c08488b6c24284939de730ebe0e0000004939dc0f" +"83a1240000e800000000488b4c241048ba00000000080000004c8b742440" +"418db63cd4ffff488b014889742460c7043000000000488b014c8b7c2418" +"49899407940a0000488b01428b94388c0a0000428b8438900a0000488b7d" +"108944243083f83048899424800000000f83d20000008bb7d00100008d4e" +"d0b80d00000048394d300f83b1000000b80e00000048394d380f82a20000" +"00898fd0010000488b87780100008b54243089540804488b8778010000c7" +"040830000000488b8778010000c744080c02000000488b8778010000c744" +"08089c081000488b877801000048c7440814020000008d46d448ba000000" +"00050000004809d04c8b877801000049894408284809ca488b8778010000" +"48895408208d46f0488b977801000089440a1083c6d84889fb4889efba00" +"021000e8000000004889df31c089c6e800000000eb20418d86f0ccffff48" +"8b8f78010000c744010430000000488b8f78010000891401418d8640d4ff" +"ff89442420488b7d104c8b75308b9fd0010000448d6bf0be0d0000004d39" +"ee0f83dc000000488b45384c39e8730abe0e000000e9c900000048898424" +"88000000488b442410488b00428b8c3850030000894c2448488b4c241844" +"8ba408540300004489afd00100008d73f84989ff4889ef4489e2b9010000" +"0041b80100000041b9f0001000e800000000498b8778010000428b4c2808" +"898c2490000000468b6c280c4889ef4489ee8b5424484489e1e800000000" +"be0d0000004c89ff498b87780100008b4c24204489640808498b87780100" +"0044896c0804498b87780100008b9424900000008914084939de7313be0e" +"00000048399c24880000000f8348220000e800000000488b5c24408dab50" +"d4ffff4c8b6c24284c89ef89ee8b542420e8000000008db334d4ffff4c89" +"ef8974244889ac24d001000089eab910021000e8000000004d8b6510837c" +"2430600f83db000000418bb424d00100008d4ed0b80d00000049394d300f" +"83b5000000b80e00000049394d380f82a600000041898c24d0010000498b" +"8424780100008b54243089540804498b842478010000c704086000000049" +"8b842478010000c744080c02000000498b842478010000c74408089c0810" +"00498b84247801000048c7440814020000008d46d448ba00000000050000" +"004809d0498bbc24780100004889440f284809ca498b8424780100004889" +"5408208d46f0498b94247801000089440a1083c6d84c89efba20021000e8" +"0000000031c04c89e789c6e800000000eb2c8d83e8ccffff498b8c247801" +"0000c744010430000000488b8c248000000083c130498b94247801000089" +"0c02498b7d104d8b7d30448bb7d0010000418d5ef0be0d0000004939df4c" +"8b6424180f83df000000498b45384839d8730abe0e000000e9cc00000048" +"898424c8000000488b442410488b00428b8c2048030000898c2490000000" +"428bac204c030000899fd0010000418d76f84989fc4c89ef89eab9010000" +"0041b80100000041b9f0001000e800000000498b8424780100008b4c1808" +"898c24880000008b5c180c4c89ef89de8b94249000000089e9e800000000" +"be0d0000004c89e74c8b642418488b87780100008b8c24d0010000896c08" +"08488b8778010000895c0804488b87780100008b9424880000008914084d" +"39f77313be0e0000004c39b424c80000000f83f51f0000e8000000004c8b" +"742410498b06428bb420a00a0000418b9404a40a0000488b6c24284889ef" +"b901000000e800000000488b5c24408d9348d4ffff8d8b58d4ffff498b06" +"48898c24880000008b0c084889942490000000890c10498b06498b8c04b0" +"0a00004a898c20a00a00004889ef448bb424d00100004489f68b542420e8" +"000000004889ef8b7424484489f2b930021000e800000000488b7d10817c" +"2430900000000f83d20000008bb7d00100008d4ed0b80d00000048394d30" +"0f83b1000000b80e00000048394d380f82a2000000898fd0010000488b87" +"780100008b54243089540804488b8778010000c7040890000000488b8778" +"010000c744080c02000000488b8778010000c74408089c081000488b8778" +"01000048c7440814020000008d46d448ba00000000050000004809d04c8b" +"877801000049894408284809ca488b877801000048895408208d46f0488b" +"977801000089440a1083c6d84889fb4889efba40021000e8000000004889" +"df31c089c6e800000000eb2a8d83e0ccffff488b8f78010000c744010430" +"000000488b94248000000083c260488b8f78010000891401488b7d10488b" +"5d30448bb7d0010000458d6ef0be0d0000004c39eb0f83e10000004c8b7d" +"384d39ef730abe0e000000e9ce000000488b442410488b00428b8c204003" +"0000894c2430488b4c2418448ba408440300004489afd0010000418d76f8" +"4889fd488b7c24284489e2b90100000041b80100000041b9f0001000e800" +"000000488b8578010000428b4c2808898c2480000000468b6c280c488b7c" +"24284489ee8b5424304489e1e800000000be0d0000004889ef488b6c2428" +"488b87780100008b8c24d001000044896408084c8b642418488b87780100" +"0044896c0804488b87780100008b9424800000008914084c39f3730ebe0e" +"0000004d39f70f835a1d0000e8000000004c8b7c2410498b07428bb420a0" +"0a0000428b9420a40a00004889efb901000000e800000000498b07488b8c" +"24880000008b0c08488b942490000000890c10498b074a8b8c20b00a0000" +"4a898c20a00a00004889ef8b9c24d001000089de8b542420e80000000048" +"89ef8b74244889dab950021000e8000000004c8b742440418d86e8d7ffff" +"498b0f488b5424608b1411891401498b074a8b8c20940a00004a898c2040" +"0e00004889ef89de8b54243cb968000000e800000000418db6b8d4ffff48" +"89ef8b542458b968000000e800000000418db620d5ffff4889ef89b4243c" +"0100008b542450b9c8000000e800000000418db6e8d5ffff4889ef89b424" +"1c0300008b542478b9c8000000e800000000418db6b0d6ffff4889ef8b54" +"2470b968000000e800000000418db618d7ffff4889ef89b424180300008b" +"542468b9c8000000e800000000458dae18e3ffff418d963ccfffff4889ef" +"4489eee800000000418db6f0d7ffff897424204889ef4489eab960021000" +"41b817000000e800000000418d966ccfffff4889ef4489eee80000000041" +"8db658d8ffff89b424f40000004889ef4489eab97702100041b817000000" +"e800000000418d96cccfffff4889ef4489eee800000000418d9e20d9ffff" +"4889ef89de44896c243c4489eab98e02100041b817000000e80000000041" +"8db688d9ffff4889ef89b424140300008b542420b968000000e800000000" +"418db6f0d9ffff4889ef8b9424f4000000b9c8000000e800000000418db6" +"b8daffff4889ef899c241003000089dab968000000e800000000418d8ec0" +"fdffff488b4510488b8078010000c74408080200000048bb020000000100" +"000048894c244848891c08498b074183bc0424340000010f85e318000041" +"8db6d8ccffff418b9404283400004889efb90800000041b82000000041b9" +"58001000e800000000498b0741c78404c82d000000000000498b0f428b84" +"213c03000042898421c42d0000498b17428b8c223803000042898c22c02d" +"0000488b5510488b92780100008b7c243c89fec7443208020000004889b4" +"246002000048891c32498b174183bc147c190000010f8591180000458b84" +"148019000031d24139c87645418db6d0ccffff418d9660f7ffff4889ef31" +"c941b920000000e800000000498b0f428bb4213003000081fe010000800f" +"85071a0000428b8421c42d0000428b9421c82d0000418d8efccfffff4189" +"d141c1e1054101c1418d86d0cbffff48898424c0000000418d86e0cbffff" +"4889842468010000418d86f0cbffff4889842460010000418d8600ccffff" +"48898424c8010000418d8690ccffff4889842408020000418d86a0ccffff" +"4889842400020000418d86b0ccffff48898424f8010000418d86c0ccffff" +"4889842420010000418d8650ccffff4889842458020000418d8660ccffff" +"4889842450020000418d8670ccffff4889842448020000418d8680ccffff" +"4889842440020000418d8610ccffff4889842438020000418d8620ccffff" +"48898424e0000000418d8630ccffff48898424c0010000418d8640ccffff" +"4889842458010000418d86c0cbffff4889842498000000418d86b0cbffff" +"4889842450010000418d8660cbffff48898424a8000000418d8610cbffff" +"48898424b8000000418d86a0cbffff48898424b0000000418d86d8cbffff" +"48898424f8000000418d86c8cbffff48898424d8000000418d8690cbffff" +"48898424b8010000418d8680cbffff48898424b0010000418d8670cbffff" +"48898424a8010000418d8650cbffff48898424a0010000418d86b8cbffff" +"4889842498010000418d86e8cbffff4889842490010000418d8698ccffff" +"48898424a0000000418d86a8cbffff4889842410020000418d8640cbffff" +"48898424d0000000418d8630cbffff4889842418010000418d8620cbffff" +"4889842410010000418d8600cbffff4889842470010000418d8698cbffff" +"4889842408010000418d8668cbffff4889842488010000418d86f8cbffff" +"4889842448010000418d86a8ccffff4889842480010000418d8658ccffff" +"48898424f0010000418d8658cbffff48898424e8010000418d86f0caffff" +"4889842498020000418d86e0caffff4889842490020000418d86d0caffff" +"4889842488020000418d8678cbffff4889842430020000418d8628ccffff" +"48898424e0020000418d8678ccffff48898424d8020000418d86c8ccffff" +"48898424d0020000418d8628cbffff48898424c8020000418d8638cbffff" +"4889842480020000418d8638ccffff4889842478020000418d8688ccffff" +"4889842470020000418d86d8caffff4889842468020000418d86e8caffff" +"48898424c0020000418d8608ccffff48898424b8020000418d86b8ccffff" +"48898424b0020000418d8668ccffff48898424a8020000418d8618ccffff" +"48898424a0020000418d8618cbffff4889842400030000418d8688cbffff" +"48898424f8020000418d8648cbffff48898424f0020000418d8608cbffff" +"48898424e8020000418d86f8caffff4889842440010000418d8648ccffff" +"488984242802000048899424200300008d42018984240c030000ba400000" +"0066662e0f1f840000000000899424180200004c898c24d8010000498b07" +"898c24e00100004189c84a8b0c0048894c2430488b4510488b9078010000" +"89c8bbffffffff4c8d8b6e9cf2f34889c6490faff14c8d9391e999c94889" +"c7490faffa48c1e9204989cb4d0fafd94c8d6b014901fbbf00000000490f" +"42fd4c89db48c1e3204989ce4d0faff249c1eb204d01f34801f3488bb424" +"c000000048891c324911fb4c895c3208488b5510488b9278010000beffff" +"ffff488d9e245c92874889c6480faff34869f8cbed6c2b4989cb4c0fafdb" +"4901fb4c89df48c1e7204c69f1cbed6c2b49c1eb204801f7488bb4246801" +"000048893c324d11f34c895c3208488b5510488b92780100004869f08f39" +"54724869f89614d3054c69d98f3954724901fb4c89df48c1e7204c69f196" +"14d30549c1eb204801f7488bb4246001000048893c324d11f34c895c3208" +"488b5510488b9278010000beffffffff4c8d9e12ff599f4869f0d9d94807" +"490fafc34869f9d9d94807490fafcb4801f14889ce48c1e62048c1e92048" +"01c6488b8424c8010000488934024811f948894c0208498b074a8b4c0008" +"48894c245089c84889c2490fafd14889c6490faff248c1e9204889cf490f" +"aff94801f7be00000000490f42f54989fe4989cf4d0faffa48c1ef204c01" +"ff4c8b7d104d8bbf7801000049c1e6204901d6488b9424080200004d8934" +"174811f749897c1708488b5510488b92780100004889c6480faff34869f8" +"cbed6c2b4989ce4c0faff34901fe4c89f748c1e7204c69f9cbed6c2b49c1" +"ee204801f7488bb4240002000048893c324d11fe4c89743208488b551048" +"8b92780100004869f08f3954724869f89614d3054c69f18f3954724901fe" +"4c89f748c1e7204c69f99614d30549c1ee204801f7488bb424f801000048" +"893c324d11fe4c89743208488b5510488b92780100004869f0d9d9480749" +"0fafc34869f9d9d94807490fafcb4801f14889ce48c1e62048c1e9204801" +"c6488b842420010000488934024811f948894c0208488b442410488b004a" +"8b4c001048894c245889c84889c2490fafd14889c6490faff248c1e92048" +"89cf490faff94801f7be00000000490f42f54989ce4d0faff24989ff48c1" +"ef204c01f749c1e7204901d7488b5510488b92780100004c8bb424580200" +"004e893c324811f74a897c32084889c2480fafd34869f0cbed6c2b4889cf" +"480faffb4801f74889fe48c1e6204c69f1cbed6c2b48c1ef204801d6488b" +"5510488b92780100004c8bbc24500200004a89343a4c11f74a897c3a0848" +"69d08f3954724869f09614d3054869f98f3954724801f74889fe48c1e620" +"4c69f19614d30548c1ef204801d6488b5510488b92780100004c8bbc2448" +"0200004a89343a4c11f74a897c3a08488b5510488b92780100004869f0d9" +"d94807490fafc34869f9d9d94807490fafcb4801f14889ce48c1e62048c1" +"e9204801c6488b842440020000488934024811f948894c0208488b442410" +"488b004a8b4c001848894c2478488b4510488b907801000089c84889c649" +"0faff14889c7490faffa48c1e9204c0fafc94901f9bf000000004c896c24" +"70490f42fd4d89c849c1e0204c0fafd149c1e9204d01d14901f0488bb424" +"380200004c8904324911f94c894c3208488b5510488b92780100004889c6" +"480faff34869f8cbed6c2b480fafd94801fb4889df48c1e7204c69c1cbed" +"6c2b48c1eb204801f7488bb424e000000048893c324c11c348895c320848" +"8b5510488b92780100004869f08f3954724869f89614d3054c69c18f3954" +"724901f84c89c748c1e7204c69c99614d30549c1e8204801f7488bb424c0" +"01000048893c324d11c84c89443208488b5510488b92780100004869f0d9" +"d94807490fafc34c0fafd94901f34c89de48c1e6204869c9d9d9480749c1" +"eb204801c6488b842458010000488934024911cb4c895c0208488b442410" +"488b004a8b8420300200004889c148bbfffffffffeffffff480fafcb488b" +"5510488bb27801000089ca4889d741baffffffff490faffa48c1e9204801" +"cf4989f849c1e0204909d04c8b8c24980000004e89040e4989c84d0fafc2" +"48c1ef204c01c74a897c0e08488b7510488bb6780100004d8dbaff5bfeff" +"4889d7490fafff4c69c202a4bd534989c94d0fafcf4d01c141b800000000" +"4d0f42c54d89ca49c1e2204c69d902a4bd5349c1e9204d01d94901fa488b" +"bc24500100004c89143e4d11c14c894c3e08488b7510488bb67801000048" +"69fa05d8a1094c69c208d839334c69c905d8a1094d01c14d89c849c1e020" +"4c69d108d8393349c1e9204901f8488bbc24a80000004c89043e4d11d14c" +"894c3e08488b7510488bb6780100004869fa487d9d294869d253a7ed734c" +"69c1487d9d294901d04c89c248c1e2204869c953a7ed7349c1e8204801fa" +"488bbc24b80000004889143e4911c84c89443e08488b4c2410488b09488b" +"9424f80000004c8b04114a8b9421400200004889542468498d3c104a8b94" +"21f002000048895424204801d74e8bb421100200004e8d0c374a03842120" +"020000488b8424d80000004c8b14014d11ca4c89d0480fafc34189c54d89" +"ebbaffffffff4c0fafda48c1e8204901c34889c1480fafca4c89db49c1eb" +"204901cb48c1e3204c09eb4c89e94c89fa4c897c2460490fafcf4989c74c" +"0faffa4969f502a4bd534901f7be00000000480f427424704d89fc49c1ef" +"204869e802a4bd534901ef49c1e4204901cc4911f74969cd08d839334869" +"e805d8a1094801cd4889e948c1e12048c1ed204969f505d8a1094869d008" +"d839334801f14811d54969d553a7ed734869f0487d9d294801d64d69ed48" +"7d9d294889f248c1e2204869c053a7ed7348c1ee204c01ea4811c64531ed" +"4d39d1410f97c54c01f7488b442428488b4010488b8078010000488bbc24" +"b000000048891c384c895c3808488b442428488b4010488b807801000048" +"8bbc24b80100004c8924384c897c3808488b442428488b4010488b807801" +"0000488bbc24b001000048890c3848896c3808488b442428488b4010488b" +"8078010000488b8c24a8010000488914084889740808488b442410488b00" +"488b8c24980100004c132c084c03442468488b8c2490010000488b1c0848" +"83d3004c03442420488b4c2418488bb408500200004889b4248800000048" +"8b4c2418488b9408000300004889542468488b8c24a0000000488b0c0848" +"83d1004c8d1c334901d331d24901cb488b4c2418488b8c08c00100004889" +"8c24c80000000f92c248899424800000004d8d740d00488b4c2418488b8c" +"08b002000048898c24900000004c01d931d24901ce0f92c2488954242048" +"8b4c24184c03940800020000488b4c2418488b9408f001000048899424e8" +"000000488b8c24100200004c8b3c08498d041648898424000100004911c7" +"4d89fa48b8fffffffffeffffff4c0fafd04589d44c89e5b9ffffffff480f" +"afe949c1ea204c01d54c89d0480fafc14989e848c1ed204801c549c1e020" +"4d09e04c89e0488b4c2460480fafc14d89d14c0fafc94969cc02a4bd5349" +"01c9b900000000480f424c24704c89ce49c1e9204969d202a4bd534901d1" +"48c1e6204801c64911c94969c408d839334969ca05d8a1094801c14889ca" +"48c1e22048c1e9204969c405d8a1094969fa08d839334801c24811f94969" +"fc53a7ed734969c2487d9d294801f84d69e4487d9d294889c748c1e7204d" +"69d253a7ed7348c1e8204c01e74c11d04531e44c3bbc2400010000410f92" +"c44c03b424e80000004c8b5424284d8b52104d8b92780100004c8bb424a0" +"0100004f8904324b896c32084c8b4424284d8b40104d8b80780100004c8b" +"9424d00000004b8934104f894c1008488b742428488b7610488bb6780100" +"004c8b8424180100004a8914064a894c0608488b4c2428488b4910488b89" +"78010000488b94241001000048893c114889441108488b442410488b0048" +"8b8c24080100004c1324084c03ac24c8000000488b8c2488010000488b54" +"242048131408488954242048039c2488000000488b8c2448010000488b2c" +"084883d50048035c2468488b8c24800100004c8b9424800000004c131408" +"4c039c2490000000488b4c2418488bb408600200004889b4242801000048" +"8b4c24184c8b8408100300004c898424c8000000488b8c24f0010000488b" +"3c084883d7004801ee4c01c64531c94c01d6410f92c1488b4c2418488b8c" +"08c002000048898c24e80000004801f14531d24801cf410f92c2488b4c24" +"18488b8c087001000048898c2480000000488d1c0a488b4c2418488b8c08" +"7002000048898c24000100004801f94531ed4801cb410f92c5488b4c2418" +"488b8c08e001000048898c24880000004c01e131d24801cb0f92c2488994" +"2490000000488b4c24184c03bc08b0010000488b4c2418488b9408a00100" +"004889942430010000488b8c24e80100004c8b34084983d600488d041331" +"c94901c64c897424680f92c148898c247801000048b8fffffffffeffffff" +"4c0faff04489f24889d0b9ffffffff480fafc149c1ee204c01f04d89f74c" +"0faff94989c048c1e8204c01f849c1e0204909d0488b4c24284c8b79104d" +"8bbf78010000488b8c24700100004d89040f4989440f084889d1488b4424" +"60480fafc84d89f04c0fafc04c69fa02a4bd534d01f841bf000000004c0f" +"427c24704c89c049c1e8204d69de02a4bd534d01d848c1e0204801c84d11" +"f8488b4c2428488b4910488b89780100004c8b9c24980200004a8904194e" +"894419084869c208d839334969ce05d8a1094801c14889c848c1e02048c1" +"e9204c69c205d8a1094d69de08d839334c01c04c11d94c8b4424284d8b40" +"104d8b80780100004c8b9c24900200004b8904184b894c18084869c253a7" +"ed734969ce487d9d294801c14869c2487d9d294889ca48c1e2204d69c653" +"a7ed7348c1e9204801c24c11c1488b442428488b4010488b80780100004c" +"8b8424880200004a8914004a894c00084803ac2428010000488b4424104c" +"8b38488b8424b80200004d8b34074983d6004803ac24c8000000488b6c24" +"28488b8424b00200004d130c074803b424e8000000488b8424a80200004d" +"1314074803bc2400010000488b8424a0020000498b0c074883d100488b84" +"24800000004801442420488b8424000300004d132c074c03a42488000000" +"488b8424f8020000488bbc249000000049133c0748039c2430010000488b" +"8424f00200004c8b9c24780100004d131c0731c0488b5424184d03b41720" +"0300000f92c04d01ce488b9424d00200004913041731f6488b5424184d03" +"b417d0020000400f92c64d01d6488b9424d8020000491334174531c9488b" +"5424184d03b41780020000410f92c14901ce488b8c24e00200004d130c0f" +"4b8d142e4531c0488b4c24184903940fd0010000410f92c04531d2488b4c" +"24184903840fe0020000410f92c24801f0488b8c24700200004d13140f48" +"01fa488b8c24300200004d13040f31c9488b74241849038437900200000f" +"92c14c89ee4c01f64d89cc4911c431ff488b742418490394379001000040" +"0f92c74d01c431db488b7424184d03a437800100000f92c34c01da488bb4" +"248002000049133c3731f64c8b5c24184f03941fa0020000400f92c64c01" +"c84c8b8c24780200004b130c0f4c01e74c8b6424184c8b8c24c80200004b" +"131c0f4c01d14c8b8c24680200004b13340f4d01ee4c11c04811d9410f92" +"c048b8fffffffffeffffff4c8d48024c898c248800000031c04c394c2430" +"0f92c04989c149f7d9488b5c24504e8d140b4531db49befd5bfeff02a4bd" +"534d39f2410f97c34901d948f7d04c11d84531d24b03942750010000410f" +"92c24c8b4c24684f038c27600100004c8b8c24e80200004b8b1c0f4883d3" +"004531db4b03bc2740010000410f92c34531c94b038c2730010000410f92" +"c14801d3488b9424c0020000498b14174b899c27781900004c8b7c241049" +"8b1f4c8bac24400100004e13142b4901fa4911d3498d140b4e8994238019" +"0000498b3f4a89942788190000498b174180c0ff488bbc24280200004813" +"343a4901cb4911f14e898c2290190000488b4d10488b89780100004c8b9c" +"24600200004a8b341931d2488b9c24880000004839de0f92c24e8b441908" +"4889d748f7df4e8d0c074531d24d39f1410f97c24c01c748f7d24c11d241" +"b8ffffffff4c01c648c1fa3f4e8b4c19104901d14883d2ff49b804d8a109" +"08d839334d39c84883d20048c1fa3f4e8b4419184901d04883d2ff49bd47" +"7d9d2953a7ed734d39c54883d2004989d24921da498d5e014989d348899c" +"24000100004921db48bb04d8a10908d839334c8d73014889d34c89b42478" +"0100004c21f34901f24c8b7424484e89143148be02a40100fd5b42ac488d" +"343748bffb275ef6f727c6cc498d3c394911f34e895c31084889fe4811de" +"4d8d5d014c21da4801fb48bfb88262d6ac58128c498d3c384811d74a8974" +"31104839de4883d7004a897c3118498b3f4a8b8c27203400004a8b942728" +"3400004a8bb427303400004a8bbc273834000048c1f83f4c8b4424584901" +"c04883d0ff49b904d8a10908d839334d39c14883d00048c1f83f4531c04c" +"8b4c24784901c1410f92c04101c031c04d39e90f97c04401c04c8b45104d" +"8b8878010000458b80d00100004183c0f04189c241f6d24180e201478854" +"010f4d8b0743c78420842b0000180000004d8b0743c78420802b0000a502" +"10004d8b074788942040290000a8010f85ce0100004c8b8c24d801000041" +"8d41184d8b0749893c00418d4110498b3f48893407418d4108498b374889" +"1406498b074489ca48890c104183c1208b94241802000083fa20b8200000" +"000f42c28b8c24e001000001c129c20f85bfecffff498b07428b9c20c42d" +"0000428bb420c02d00004c8bac2420030000418d4d0342398c20480e0000" +"0f85a80200004c899c24c801000089b424080300004c8b742440418db620" +"dbffff418b9404440e00004889ef89b4246801000089942460010000e800" +"000000418d8690f7ffff898424a8000000418d86c0f7ffff898424f80000" +"004183fdfe899c24a00200000f8578020000418d8660f7ffff8944245841" +"8d86e0f2ffff89442478418d8620f5ffff89442450418d86a0f0ffff8984" +"24b8000000e90512000042c784208819000000000000498b0742c784207c" +"19000001000000498b0742c7842078190000d0021000498b074ac7842080" +"190000040000004889ef8b74243ceb3e89fe42c784228819000000000000" +"498b0742c784207c19000001000000498b0742c7842078190000d0021000" +"498b074ac7842080190000040000004889efba58001000e80000000031f6" +"488bbc2420020000e80000000031c04881c4380300005b415c415d415e41" +"5f5dc3498b074ac784208419000001000000498b0742c784207c19000001" +"000000498b0742c784207819000014011000498b0742c784202434000001" +"000000498b07488b4c244842898c20801900004c8b442440418d8020f5ff" +"ff498b0f4289842120340000488b7d108b8fd00100008d41f0be0d000000" +"483945307360be0e0000004839453872554181c0e0f2ffff8987d0010000" +"488b9778010000c744020c48031000488b977801000044894402088d71f8" +"83c1fcc704241c0110004889fb4889efba3803100041b838031000448b4c" +"243ce8000000004889df31f6e800000000e9f8feffff4489b7d0010000e9" +"e8d4ffff4489b7d0010000e9e8d5ffff4489b7d0010000e930d8ffff4489" +"b7d0010000e947d9ffff4489b7d0010000e947daffff899fd0010000e959" +"dbffff899fd0010000e9b2ddffff4489b7d0010000e904e0ffff4489b7d0" +"010000e99fe2ffff4889efba30091000e800000000e97cfeffff4889ef89" +"dab920000000e800000000498b07428bb420400e0000428b9420440e0000" +"4889efb968000000e80000000031dbe9be8500008b8c246001000083c168" +"418d86f4f2ffff898424c8000000418d86e8f2ffff89442420418d86c0f0" +"ffff89842408020000418d8620f5ffff89442450418d86c0caffff488984" +"2400020000418d86b0caffff48898424f8010000418d86a0caffff488984" +"2420010000418d8690caffff4889842458020000418d8680caffff488984" +"2450020000418d86c8caffff4889842448020000418d8670caffff488984" +"2440020000418d8620caffff4889842438020000418d86d0c9ffff488984" +"24e0000000418d8660caffff48898424c00100008b84240c030000488984" +"2458010000418d86b8caffff4889842498000000418d8688caffff488984" +"2450010000418d8650caffff48898424b0000000418d8640caffff488984" +"24d8000000418d8630caffff48898424b8010000418d8610caffff488984" +"24b0010000418d86a8caffff48898424a8010000418d8678caffff488984" +"24a0010000418d8668caffff4889842498010000418d8600caffff488984" +"2490010000418d86f0c9ffff48898424a0000000418d86e0c9ffff488984" +"2410020000418d8648caffff48898424d0000000418d86d8c9ffff488984" +"2418010000418d86f8c9ffff4889842410010000418d8698caffff488984" +"2470010000418d8628caffff4889842408010000418d8658caffff488984" +"2488010000418d8618caffff4889842448010000418d8608caffff488984" +"2480010000418d8638caffff48898424f0010000418d86e8c9ffff488984" +"24e8010000418d8660f7ffff89442458418d86a0f0ffff898424b8000000" +"418d86c8c9ffff89842480000000418d86c0c9ffff89442430418d86b8c9" +"ffff898424e8000000418d86b0c9ffff89442468418d86e0f2ffff894424" +"78418d86a8c9ffff898424900000004531f689c8898c2460010000eb6f48" +"89ef4c8b6c24484489ee8b542458b990000000e8000000004889ef8b5c24" +"3c89de448bb424680100004489f24489e9e8000000004889ef4489f689da" +"b990000000e800000000488b8c24e00100004c8d7101483b8c2458010000" +"8b9c24a00200008b8424600100000f84b00c0000416bd66801c24889ef8b" +"742450e8000000004c89b424e001000041c1e6054101de498b074a8b0c30" +"4c89b424280100004889ca48bbfffffffffeffffff480fafd3488b451048" +"8b807801000089d64889f741b8ffffffff490faff841baffffffff48c1ea" +"204801d74989f849c1e0204909f04c8b8c24000200004e8904084989d04d" +"0fafc248c1ef204c01c74a897c0808488b4510488b80780100004889f74c" +"8b642460490faffc4c69c602a4bd534989d14d0fafcc4d01c141b8000000" +"004c0f424424704d89ca49c1e2204c69da02a4bd5349c1e9204d01d94901" +"fa488bbc24f80100004c8914384d11c14c894c3808488b4510488b807801" +"00004869fe05d8a1094c69c608d839334c69ca05d8a1094d01c14d89c849" +"c1e0204c69d208d8393349c1e9204901f8488bbc24200100004c8904384d" +"11d14c894c3808488b4510488b80780100004869fe487d9d294869f653a7" +"ed734c69c2487d9d294901f04c89c648c1e6204869d253a7ed7349c1e820" +"4801fe488bbc2458020000488934384911d04c89443808498b074e8b4430" +"08488b5424184c8bac10100100004f8d0c28488b54241848038c10200100" +"00488b8c2448020000488b3c084c11cf4889fe480faff389f34889d9baff" +"ffffff480fafca48c1ee204801f14989ca49c1e2204909da4889f0480faf" +"c248c1e9204801c14989de4d0faff44869c302a4bd534989f34d0fafdc49" +"01c341bf000000004c8b6424704d0f42fc4c89d848c1e0204869ee02a4bd" +"5349c1eb204901eb4c01f04d11fb4869eb05d8a1094c69fb08d839334c69" +"f605d8a1094d01fe4d89f749c1e7204869d608d8393349c1ee204901ef49" +"11d64869d3487d9d294869eb53a7ed734869de487d9d294801eb4889dd48" +"c1e5204869f653a7ed7348c1eb204801d54811f331f64939f9400f97c64d" +"01e8488b542428488b5210488b92780100004c8b8424500200004e891402" +"4a894c0208488b4c2428488b4910488b8978010000488b94244002000048" +"8904114c895c1108488b442428488b4010488b8078010000488b8c243802" +"00004c893c084c89740808488b442428488b4010488b8078010000488b8c" +"24e000000048892c0848895c0808488b442410488b00488b8c2428010000" +"488b4c0810488b5424184c8b8410000100004c898424d8010000488b9424" +"98000000481334104a8d14014531d24801d6410f92c2488b5424184c8bac" +"10d00000004a8d142e4c8b8424500100004e8b04004c8b4c24184a03bc08" +"e00000004983d00031c04901d00f92c048898424300100004c89c348b8ff" +"fffffffeffffff480fafd84189df4d89fbbaffffffff4c0fafda48c1eb20" +"4901db4d89de49c1e6204d09fe4889d8480fafc249c1eb204901c34c89ff" +"4c8b4c2460490faff94969c702a4bd534889da490fafd14801c241b90000" +"00004d0f42cc4889d048c1ea204c69e302a4bd534c01e248c1e0204801f8" +"4c11ca4969ff08d839334869eb05d8a1094801fd4989e949c1e12048c1ed" +"204969ff05d8a1094c69e308d839334901f94c11e54969ff53a7ed734c69" +"e3487d9d294901fc4969ff487d9d294d89e749c1e7204869db53a7ed7349" +"c1ec204901ff4911dc48038c24d8010000488b4c2428488b4910488b8978" +"010000488bbc24c00100004c8934394c895c3908488b4c2428488b491048" +"8b8978010000488bbc24b0000000488904394889543908488b442428488b" +"4010488b8078010000488b8c24d80000004c890c0848896c0808488b4424" +"28488b4010488b8078010000488b8c24b80100004c893c084c8964080848" +"8b442410488b00488b8c24a80100004c1314084c01ee488b8c2428010000" +"4c8b5c0818488b4c2418488bb408f00000004889b424c0000000488b8c24" +"a0010000488b94243001000048131408498d0c3331ff4901ca4c89942418" +"020000488b4c2418488b8c088000000048898c24d8010000400f92c74c01" +"d14531d24801ca4889942430010000410f92c2488b4c2418488b8c08b000" +"000048898c24280100004801d1488b9424980100004c8b0c10488b542418" +"4c038410c00000004983d1004531ed4901c9410f92c54c89ce48b8ffffff" +"fffeffffff480faff04189f74d89feb9ffffffff4c0faff148c1ee204901" +"f64d89f049c1e0204d09f84889f0480fafc149c1ee204901c64c89f8488b" +"4c2460480fafc14989f44c0fafe14969cf02a4bd534901ccb90000000048" +"0f424c24704c89e549c1ec204869de02a4bd534901dc48c1e5204801c549" +"11cc4969cf08d839334869c605d8a1094801c84889c148c1e12048c1e820" +"4969df05d8a1094869d608d839334801d94811d04969d753a7ed734869de" +"487d9d294801d34969d7487d9d294989df49c1e7204869f653a7ed7348c1" +"eb204901d74811f34c039c24c0000000488b542428488b5210488b927801" +"0000488bb424b00100004c8904324c89743208488b542428488b5210488b" +"9278010000488bb4249001000048892c32488b6c24284c896432084c8b64" +"2418488b5510488b9278010000488bb424a000000048890c324889443208" +"488b4510488b8078010000488b8c24100200004c893c084c8b7c24104889" +"5c08084d8b1f488b84247001000049133c03488b84241802000048038424" +"d8010000488b8424080100004d131403488b842428010000480184243001" +"0000488b8424880100004d132c0331c94b037c23300f92c14c01d7488b84" +"241801000049130c0331c04b03bc23a00000000f92c04c01ef488b9424d0" +"0000004913041331f64b037c2360488b9424480100004d8b0413400f92c6" +"4f034c23704983d00031d24b038c23900000000f92c24c8d0c084f8b5423" +"504d01d14901f8488bbc2410010000498b3c3b4f898423781900004d8b07" +"4c8b9c24800100004b1334184901f14801c14f898c2080190000498b074c" +"8b8424f00100004a1314004c01d14e8b4420404883d7004e8d0c024801f1" +"4c11cf31c94939f90f97c14c01c24a89bc2088190000498b07488b9424e8" +"01000048130c104a898c2090190000488b4510488b80780100004c8b9424" +"600200004a8b141031c9488b9c24880000004839da0f92c14889ce48f7de" +"4a8b7c10084c8d043e4531c949bbfd5bfeff02a4bd534d39d8410f97c148" +"01fe48f7d14c11c9bfffffffff4801fa48c1f93f4a8b7c10104801cf4883" +"d1ff49b804d8a10908d839334939f84883d10048c1f93f4e8b4410184901" +"c84883d1ff49b9477d9d2953a7ed734d39c14883d1004989c94921d94989" +"ca4c239424000100004989cb4c239c24780100004901d1488b5c24484c89" +"0c1848ba02a40100fd5b42ac488d14164911d248bafb275ef6f727c6cc48" +"8d14174c895418084889d64c11de48238c24c80100004901d348bab88262" +"d6ac58128c498d14104811ca4c39de48897418104883d200488954181849" +"8b074a8b8c20383400004a898c2018270000498b074a8b8c20303400004a" +"898c2010270000498b074a8b8c20283400004a898c2008270000498b074a" +"8b8c20203400004a898c20002700004889ef8b742458ba30000000e80000" +"00004889ef8bb424f8000000ba30000000e8000000004889ef8bb424a800" +"0000ba60031000b930000000e800000000498b0742c78420602900000100" +"0000498b0742c784205429000000000000498b0742c78420482900000000" +"0000498b078b8c240802000042898c2044290000498b078b8c24b8000000" +"42898c2040290000ba0100000085d20f844b01000066662e0f1f84000000" +"0000498b0742c784206029000000000000498b074283bc20482900000074" +"274889ef8bb424800000008b4c2420e800000000498b0742837c2028000f" +"85f0000000428b54202c428b9c204029000085db0f8487000000468bb420" +"442900004139de746a41ffce4189df41f7df660f1f44000048b900000000" +"080000004a898c204c2900004c8b6c2410498b45004689b4204829000048" +"89ef8b7424308b4c2420e800000000498b450042837c2020000f85440100" +"00428b542024438d0c37ffc94489f6ffce4189f683f9ff75a542899c2044" +"2900004c8b7c2410498b0742c784204829000000000000498b074283bc20" +"542900000074264889ef8bb424e80000008b8c24c8000000e80000000049" +"8b0742837c2018007519428b54201c42c78420542900000000000085d20f" +"85caf3ffffbb1000000041be110000008b742468eb12bb0800000041be09" +"0000008bb424900000008b5424784889efe800000000498b074c01e0f604" +"03010f848bf3ffff460fb624304889ef448b74243c4489f6448b6c245844" +"89eae8000000004889ef4489ee4489f2b990000000e8000000004889ef44" +"89f64489ea8b4c2450e8000000004889ef488b5c244889de4489ea4489f1" +"4589e04c8b642418e8000000004889ef4489ee89dab990000000e8000000" +"00498b07428b94206029000085d20f850efeffffe949ffffff4689b42044" +"290000bb1000000041be110000008b7424684c8b7c2410e93affffff4c8b" +"742440418d9680dbffff4889ef8b74243ce8000000004889ef488b5c2448" +"89deba30000000e800000000498b07450fb68404a81900004889ef448b6c" +"24584489ee89da8b4c243ce8000000004889ef89de8b9424680100004489" +"e9e800000000418db6f0fdffff418d9650dbffff4889ef4889b424800000" +"004489e944896c2458e800000000488b4510488b88780100008b80d00100" +"0083c0f0c644010f00498b0741c6840480340000004889ef8b5c243c89de" +"e800000000458dbeb0dbffff4889ef4489eee8000000004889ef4489fe48" +"8b54244889d94189c0e800000000418db618dcffff897424204889ef8b94" +"24f4000000e800000000418db628dcffff897424304889ef8b94241c0300" +"00e800000000418db638dcffff897424704889ef8b942418030000e80000" +"00004889eb418db648dcffff897424684889ef8b94243c010000e8000000" +"00458daed8e0ffff4889ef4489ee4489fae800000000418dae60e5ffff48" +"89df89ee8b942410030000e800000000458dbea0e7ffff4889df4489fe8b" +"9424d0010000e800000000488b442410488b008b4c246842898c20141500" +"00488b442410488b004489bc24280200004689bc2010150000488b442410" +"488b008b4c247042898c200c1500004c8b7c2410498b0789ac2440010000" +"4289ac2008150000498b078b4c243042898c2004150000498b074489ac24" +"3c0100004689ac2000150000498b078b4c242042898c20fc140000498b07" +"8b8c241403000042898c20f8140000498b0749c784044432000004000000" +"418d8e98deffff498b07898c24f400000041898c0440320000458dae58dc" +"ffff4889df4489eee800000000418d8638e4ffff89842430010000418d86" +"78ddffff89842430020000418d86e0f5ffff4889442468418d8680f5ffff" +"4889442470418d8640f9ffff4889842458020000418d46a0488984246001" +"0000418d86e0f8ffff4889842450020000418d8640ffffff48898424c801" +"0000418d8680f8ffff4889842468010000418d86e0feffff48898424c000" +"0000418d86a0f3ffff48898424c8000000418d8640f3ffff488984248800" +"00008b44245848894424208b44247848894424608b442450488944245841" +"8d8620f8ffff4889842478010000418d8680feffff488984240001000041" +"8d8620feffff48898424e8000000418d86e0fbffff898424d0000000418d" +"8610f3ffff48898424900000008b8424a800000048898424e00000008b84" +"24f800000048898424c0010000418d8670f3ffff4889842418020000418d" +"8650feffff48898424e0010000418d86f0f7ffff48898424d0010000418d" +"86d0f3ffff48898424d8010000418d86b0feffff4889842428010000418d" +"8650f8ffff4889842460020000418d8650f5ffff4889442430418d8610ff" +"ffff48898424f8010000418d86b0f8ffff4889842438020000418d86b0f5" +"ffff4889442478418d8670ffffff4889842400020000418d8610f9ffff48" +"89842440020000418d8610f6ffff4889442450418d46d048898424080200" +"00418d8670f9ffff4889842448020000418d86e0e9ffff89842498000000" +"418d8620ecffff898424b0000000418d8650ecffff89842470010000418d" +"8688dcffff89842490010000418d86a8ddffff898424b0020000418d8680" +"ecffff89842490020000418d86b8dcffff898424a8010000418d86d8ddff" +"ff89842468020000418d86b0ecffff898424d8020000418d86e8dcffff89" +"842498010000418d8608deffff898424b8020000418d86e0ecffff898424" +"98020000418d8618ddffff898424a8020000418d8638deffff8984247002" +"0000418d8610edffff898424e0020000418d8648ddffff898424a0010000" +"418d8668deffff898424c0020000418d8660eeffff898424a0000000418d" +"86d0f0ffff89842410010000418d8690eeffff89842418010000418d8600" +"f1ffff89842488010000418d86c0eeffff89842448010000418d8630f1ff" +"ff89842400030000418d86f0eeffff898424f8020000418d8660f1ffff89" +"842488020000418d8620efffff89842480010000418d8690f1ffff898424" +"f0020000418d8650efffff898424e8020000418d8610eaffff898424d800" +"0000418d8640eaffff898424b8010000418d8670eaffff898424b0010000" +"418d86a0eaffff898424d0020000418d86d0eaffff898424c8020000418d" +"8648e3ffff89842408010000418d8678e3ffff898424e8010000418d86a8" +"e3ffff89842478020000418daed8e3ffff418d8608e4ffff898424800200" +"0031c0b94000000048ba00800000008000694489ac245001000089ac24f0" +"010000e908040000498b07ffc74c8b6424184289bc20483200004c8b7424" +"284c89f7448bac24500100004489ee488b542420b940020000e800000000" +"4c89f78bb424980000004489ea8b9c243002000089d9e8000000004c89f7" +"8bb424b00000008b94245001000089d9e8000000004c89f78bb424700100" +"008b9424900100008b8c24b0020000e8000000004c89f78bb42490020000" +"8b9424a80100008b8c2468020000e8000000004c89f78bb424d80200008b" +"9424980100008b8c24b8020000e8000000004c89f78bb42498020000448b" +"ac24a80200004489ea8b8c2470020000e8000000004c89f78bb424e00200" +"008b9424a00100008b8c24c0020000e8000000004c89f78bac24a0000000" +"89ee89dae8000000004c89f78b9c24b800000089de89ea8b8c2450010000" +"e8000000004c89f78bb424100100008b9424180100008b8c2490010000e8" +"000000004c89f78bb424880100008b9424480100008b8c24a8010000e800" +"0000004c89f78bb424000300008b9424f80200008b8c2498010000e80000" +"00004c89f78bb424880200008b9424800100004489e9e8000000004c89f7" +"8bb424f00200008b9424e80200008b8c24a0010000e8000000004c89f748" +"8b6c246089ee89da8b8c24b0000000e8000000004c89f7488b74245889ea" +"8b8c2498000000e8000000004c89f7488b742430488b9424900000008b8c" +"24d8000000e8000000004c89f7488b742470488b9424880000008b8c24b8" +"010000e8000000004c89f7488b742478488b9424180200008b8c24b00100" +"00e8000000004c89f7488b742468488b9424c80000008b9c24d002000089" +"d9e8000000004c89f7488b742450488b9424d8010000448bac24c8020000" +"4489e9e8000000004c89f7488b7424208bac249800000089ea89e9e80000" +"00004c89f78bb424a80000008b8c24d800000089cae8000000004c89f78b" +"b424f80000008b8c24b801000089cae8000000004c89f7488bb424d00100" +"008b8c24b001000089cae8000000004c89f7488bb4247801000089da89d9" +"e8000000004c89f7488bb424600200004489ea4489e9448bac2450010000" +"e8000000004c89f7488b5c244889de89eae8000000004c89f78b74243c48" +"8b54245889d9e8000000004c89f78bb42408010000488b542430488b8c24" +"80000000e8000000004c89f78bb424e8010000488b542470488b8c24e800" +"0000e8000000004c89f78bb42478020000488b542478488b8c24e0010000" +"e8000000004c89f78bb424f0010000488b542468488b8c2400010000e800" +"0000004c89f78bb42480020000488b542450488b8c2428010000e8000000" +"004c89f78bb42430010000488b542420b920010000e8000000004c89f744" +"89ee8b54243cb940020000e800000000bb01000000488b8c241002000048" +"ba008000000080006989d84885c90f849606000048ffc9c4e2f3f7daa801" +"74e948898c24100200004c8b7424284c89f78b6c243c89ee4489eab94002" +"0000e8000000004c89f74489ee8b9424d000000089e9e800000000f6c301" +"0f84e0fbffff4c89f7488b7424204489eab940020000e800000000498b07" +"468bac2044320000428bbc204832000041f7c5ffffff1f0f847afbffff42" +"8b84204032000089f9c1e1058d0cc9898c245801000041c1e50341f7dd48" +"8b6c242889bc2420010000e9c2040000660f1f44000083c1048b0c08038c" +"2458010000468b0438488b6c24284889ef488b5c244889de4c8b64242044" +"89e2e800000000488b4510488b90780100004c89f048f7d8498d4eff488b" +"741a284821ce4a8b7c22284821c74809f74c8b4c24604a897c0a28488b74" +"1a204821ce4a8b7c22204821c74809f74a897c0a20488b741a184821ce4a" +"8b7c22184821c74809f74a897c0a18488b741a104821ce4a8b7c22104821" +"c74809f74a897c0a10488b741a084821ce4a8b7c22084821c74809f74a89" +"7c0a08488b341a4821ce4a8b3c224821c74809f74a893c0a488b5510488b" +"92780100004c8b8424e0000000c4a17a6f4c022062f2fd287cc0488bb424" +"8000000062f3fd08254c3202e2488bbc2490000000c5fa7f4c3a20c4a17e" +"6f0c0262f3fd28250c32e2c5fe7f0c3a488b5510488b92780100004c8b84" +"24c0010000c4a17a6f4c0220488bb424e800000062f3fd08254c3202e248" +"8bbc2488000000c5fa7f4c3a20c4a17e6f0c0262f3fd28250c32e2c5fe7f" +"0c3a488b5510488b92780100004c8b8424d0010000c4a17a6f4c0220488b" +"b424e001000062f3fd08254c3202e2488bbc2418020000c5fa7f4c3a20c4" +"a17e6f0c0262f3fd28250c32e2c5fe7f0c3a488b5510488b92780100004c" +"8b842478010000c4a17a6f4c0220488bb4240001000062f3fd08254c3202" +"e2488bbc24c8000000c5fa7f4c3a20c4a17e6f0c0262f3fd28250c32e2c5" +"fe7f0c3a488b5510488b92780100004c8b842460020000c4a17a6f4c0220" +"488bb4242801000062f3fd08254c3202e2488bbc24d8010000c5fa7f4c3a" +"20c4a17e6f0c0262f3fd28250c32e2c5fe7f0c3a488b5510488b92780100" +"004c8b8424c00000004a8b7402284821ce4c8b9424680100004a8b7c1228" +"4821c74809f74c8b7424584a897c32284a8b7402204821ce4a8b7c122048" +"21c74809f74a897c32204a8b7402184821ce4a8b7c12184821c74809f74a" +"897c32184a8b7402104821ce4a8b7c12104821c74809f74a897c32104a8b" +"7402084821ce4a8b7c12084821c74809f74a897c32084a230c024a230412" +"4809c84a890432488b4510488b8078010000488bb42438020000c5fa6f4c" +"3020488b9424f801000062f3fd08254c1002e2488b4c2430c5fa7f4c0820" +"c5fe6f0c3062f3fd28250c10e2c5fe7f0c08488b4510488b807801000048" +"8bb42450020000c5fa6f4c3020488b8c24c801000062f3fd08254c0802e2" +"488b542470c5fa7f4c1020c5fe6f0c3062f3fd28250c08e2c5fe7f0c1048" +"8b4510488b8078010000488b942440020000c5fa6f4c1020488b8c240002" +"000062f3fd08254c0802e2488b742478c5fa7f4c3020c5fe6f0c1062f3fd" +"28250c08e2c5fe7f0c30488b4510488b8078010000488bb42458020000c5" +"fa6f4c3020488b8c246001000062f3fd08254c0802e2488b542468c5fa7f" +"4c1020c5fe6f0c3062f3fd28250c08e2c5fe7f0c10488b4510488b807801" +"0000488b942448020000c5fa6f4c1020488b8c240802000062f3fd08254c" +"0802e2488b742450c5fa7f4c3020c5fe6f0c1062f3fd28250c08e2c5fe7f" +"0c304889ef8b5c243c89de4489cab920010000c5f877e8000000004889ef" +"8bb424300100004489f2b920010000e8000000004889ef4489e689dab940" +"020000e800000000418d47084183c5084c8b7c24108bbc24200100000f84" +"86f6ffff498b174c89fe4189c7428b043a428b4c3a040fb64402600a440a" +"0c440fb6f0488b4510488b90780100008b80d001000083c0f0448874020f" +"488b068d51088b141039fa0f87fbfaffff488b5d108bb3d00100008d4ed0" +"b80d00000048394d300f83a6000000b80e00000048394d380f8297000000" +"898bd0010000488b837801000089540804488b8378010000893c08488b83" +"78010000c744080c02000000488b8378010000c7440808a0061000488b83" +"7801000048c7440814020000004889c848bf00000000050000004809f848" +"8b93780100004889440a288d46d44809f8488b93780100004889440a208d" +"46f0488b937801000089440a1083c6d84889efba5c061000e80000000031" +"c04889df89c6e800000000488b442410488b0031c9e92dfaffff4c8b7424" +"284c89f78b5c243c89de4489eab940020000e8000000004c89f74489ee8b" +"9424d000000089d9e8000000004c89f78bb424300100008b942430020000" +"e8000000004c89f789de4489eab920010000e8000000004c89f74489ee89" +"dab940020000e8000000004c89f78bb424f40000004489eab940020000e8" +"000000004c89f7488bb424900000008b942490010000e8000000004c89f7" +"488b7424604489eab930000000e8000000004c89f78bb424a80000008b94" +"2498010000e8000000004c89f74c8b6c24204489ee8b9424a8010000b930" +"000000e8000000004c89f7488bb424800000008b9424a0010000e8000000" +"004c89f7488b7424488b9424a8020000b930000000e8000000004c89f789" +"deba30000000e800000000498b0748b9418763546520f0184a898c20d019" +"0000498b0748b9d250d0836e7df9034a898c20c8190000498b0748b99ecb" +"ba01be0eb68e4a898c20c0190000498b0748b9951b85d3af4270584a898c" +"20b8190000498b0748b9d2a5cd1f4622ab5d4a898c20b0190000498b0748" +"b971f07186e4c903cd4a898c20a81900004c89f7488b7424704489ea89d9" +"4189dde8000000004c89f78bb42408010000ba30000000e800000000498b" +"0748b93a8564153f6de5144a898c20a0190000498b0748b96890dbe24ff0" +"e4144a898c2098190000498b0748b92410887e8c1b0da24a898c20901900" +"00498b0748b92c7e9b30660888504a898c2088190000498b0748b9d5a585" +"325322f32a4a898c2080190000498b0748b9c3457586e4c90d894a898c20" +"781900004c89f7488b742468488b5c244889da4489e9e8000000004c89f7" +"488b7424584c8b6c24604489eab960000000e8000000004c89f78bb42410" +"0100008b9424b0020000e8000000004c89f78bb424b80000008b94243002" +"0000b930000000e8000000004c89f7488bb424900000008b9424b8020000" +"e8000000004c89f74489ee8b942468020000b930000000e8000000004c89" +"f7488bb424800000008b9424c0020000e8000000004c89f789de8b942470" +"020000b930000000e8000000004c89f78b6c243c89eeba30000000e80000" +"0000488b442410488b0048b9418763546520f0184a898c20d0190000488b" +"442410488b0048b9d250d0836e7df9034a898c20c8190000488b44241048" +"8b0048b99ecbba01be0eb68e4a898c20c0190000488b442410488b0048b9" +"951b85d3af4270584a898c20b8190000488b442410488b0048b9d2a5cd1f" +"4622ab5d4a898c20b0190000488b442410488b0048b971f07186e4c903cd" +"4a898c20a81900004c89f78bb424f80000004489ea89e94189ede8000000" +"004c89f78bb42408010000ba30000000e800000000488b442410488b0048" +"b93a8564153f6de5144a898c20a0190000488b442410488b0048b96890db" +"e24ff0e4144a898c2098190000488b442410488b0048b92410887e8c1b0d" +"a24a898c2090190000488b442410488b0048b92c7e9b30660888504a898c" +"2088190000488b442410488b0048b9d5a585325322f32a4a898c20801900" +"00488b442410488b0048b9c3457586e4c90d894a898c20781900004c89f7" +"488bb4247801000089da4989df89e9e8000000004c89f7488b5c242089de" +"8bac24b800000089eab960000000e800000000488b442410488b0048b9af" +"7f8488daef0e114a898c2078340000488b442410488b0048b989dea0e5cb" +"13382e4a898c2070340000488b442410488b0048b9d0e8a840ba9c1bc14a" +"898c2068340000488b442410488b0048b994d39925d49548cf4a898c2060" +"340000488b442410488b0048b9ec7c49fc6ba042584a898c205834000048" +"8b442410488b0048b946d6e54cad6af6b24a898c2050340000488b442410" +"488b0048b9eb66fbb00f22f2084a898c2048340000488b442410488b0048" +"b94dceaa5dea93e31c4a898c2040340000488b442410488b0048b9ee29dc" +"b2caae5ba34a898c2038340000488b442410488b0048b98f2217d1cc3ce8" +"974a898c2030340000488b442410488b0048b913830ab5925f69c64a898c" +"2028340000488b442410488b0048b965d419b3529508074a898c20203400" +"004c89f7488bb424e8000000bac0000000e8000000004c89f78bb4243001" +"000089da4489f9e8000000004c89f74489ee4c8b7c24584489fab9200100" +"00e8000000004c89f78bb424100100008b942408010000e8000000004c89" +"f789ee4489eab930000000e8000000004c89f7488b7424308b9424780200" +"00e8000000004c89f74489fe8b9424e8010000b930000000e8000000004c" +"89f78bac24a800000089ee8b942480020000e8000000004c89f74c8b6c24" +"204489ee8b9424f0010000b930000000e8000000004c89f7488b5c244889" +"deba30000000e800000000488b442410488b0048b9418763546520f0184a" +"898c2078340000488b442410488b0048b9d250d0836e7df9034a898c2070" +"340000488b442410488b0048b99ecbba01be0eb68e4a898c206834000048" +"8b442410488b0048b9951b85d3af4270584a898c2060340000488b442410" +"488b0048b9d2a5cd1f4622ab5d4a898c2058340000488b442410488b0048" +"b971f07186e4c903cd4a898c20503400004c89f7488bb424880000004489" +"fa89d9e8000000004c89f7488bb42480000000ba30000000e80000000048" +"8b442410488b0048b93a8564153f6de5144a898c2048340000488b442410" +"488b0048b96890dbe24ff0e4144a898c2040340000488b442410488b0048" +"b92410887e8c1b0da24a898c2038340000488b442410488b0048b92c7e9b" +"30660888504a898c2030340000488b442410488b0048b9d5a585325322f3" +"2a4a898c2028340000488b442410488b0048b9c3457586e4c90d894a898c" +"20203400004c89f7488bb424c80000004489ea89d9e8000000004c89f748" +"8b742460448bbc24b80000004489fab960000000e8000000004c8b642440" +"418d942468e4ffff4c89f78bb42418010000e8000000004c89f78bb424a0" +"0000008b942430010000b930000000e800000000418d9424c8e4ffff4c89" +"f78bb42410010000e800000000418d942498e4ffff899424900100004c89" +"f74489feb930000000e800000000418d942428e5ffff4c89f789eee80000" +"0000418d9424f8e4ffff899424100200004c89f74489eeb930000000e800" +"0000004c89f789deba30000000e800000000488b442410488b00488b4c24" +"1848ba418763546520f0184889940878340000488b442410488b00488b4c" +"241848bad250d0836e7df9034889940870340000488b442410488b00488b" +"4c241848ba9ecbba01be0eb68e4889940868340000488b442410488b0048" +"8b4c241848ba951b85d3af4270584889940860340000488b442410488b00" +"488b4c241848bad2a5cd1f4622ab5d4889940858340000488b442410488b" +"00488b4c241848ba71f07186e4c903cd48899408503400004c89f7488b74" +"24704489fa89d9e8000000004c89f74c8bbc24800000004489feba300000" +"00e800000000488b442410488b00488b4c241848ba3a8564153f6de51448" +"89940848340000488b442410488b00488b4c241848ba6890dbe24ff0e414" +"4889940840340000488b442410488b00488b4c241848ba2410887e8c1b0d" +"a24889940838340000488b442410488b00488b4c241848ba2c7e9b306608" +"88504889940830340000488b442410488b00488b4c241848bad5a5853253" +"22f32a4889940828340000488b442410488b00488b4c241848bac3457586" +"e4c90d8948899408203400004c89f7488b7424684489ea89d9e800000000" +"4c89f7488b6c245889ee8b9424a0000000b960000000e800000000488b44" +"2410488b00488b4c241848baaf7f8488daef0e1148899408182e0000488b" +"442410488b00488b4c241848ba89dea0e5cb13382e48899408102e000048" +"8b442410488b00488b4c241848bad0e8a840ba9c1bc148899408082e0000" +"488b442410488b00488b4c241848ba94d39925d49548cf48899408002e00" +"00488b442410488b00488b4c241848baec7c49fc6ba0425848899408f82d" +"0000488b442410488b00488b4c241848ba46d6e54cad6af6b248899408f0" +"2d0000488b442410488b00488b4c241848baeb66fbb00f22f20848899408" +"e82d0000488b442410488b00488b4c241848ba4dceaa5dea93e31c488994" +"08e02d0000488b442410488b00488b4c241848baee29dcb2caae5ba34889" +"9408d82d0000488b442410488b00488b4c241848ba8f2217d1cc3ce89748" +"899408d02d0000488b442410488b00488b4c241848ba13830ab5925f69c6" +"48899408c82d0000488b442410488b00488b4c241848ba65d419b3529508" +"0748899408c02d00004c89f78bb424f8000000bac0000000e8000000004c" +"89f7488bb424c000000089ea4489e9e8000000004c89f789de4c8b642460" +"4489e2b920010000e8000000004c89f78bb424180100004489fae8000000" +"004c89f7448bac24a00000004489ee89dab930000000e8000000004c89f7" +"488bb42490000000488b9424e0010000e8000000004c89f74c89e389de48" +"8b9424e8000000b930000000e8000000004c89f74c8b7c24304489fe488b" +"942428010000e8000000004c89f789ee488b942400010000b930000000e8" +"000000004c89f74c8b6424204489e6ba30000000e800000000488b442410" +"488b00488b4c241848ba418763546520f01848899408182e0000488b4424" +"10488b00488b4c241848bad250d0836e7df90348899408102e0000488b44" +"2410488b00488b4c241848ba9ecbba01be0eb68e48899408082e0000488b" +"442410488b00488b4c241848ba951b85d3af42705848899408002e000048" +"8b442410488b00488b4c241848bad2a5cd1f4622ab5d48899408f82d0000" +"488b442410488b00488b4c241848ba71f07186e4c903cd48899408f02d00" +"004c89f78bb4248801000089da4489e1e8000000004c89f78bb424a80000" +"00ba30000000e800000000488b442410488b00488b4c241848ba3a856415" +"3f6de51448899408e82d0000488b442410488b00488b4c241848ba6890db" +"e24ff0e41448899408e02d0000488b442410488b00488b4c241848ba2410" +"887e8c1b0da248899408d82d0000488b442410488b00488b4c241848ba2c" +"7e9b306608885048899408d02d0000488b442410488b00488b4c241848ba" +"d5a585325322f32a48899408c82d0000488b442410488b00488b4c241848" +"bac3457586e4c90d8948899408c02d00004c89f78bb4248802000089ea44" +"89e1e8000000004c89f78bb424b80000004489eab960000000e800000000" +"4c89f78bb42470010000488b9424f8010000e8000000004c89f78bb424b0" +"000000488b9424c0000000b930000000e8000000004c89f78bb424180100" +"00488b942400020000e8000000004c89f74489ee488b9424c8010000b930" +"000000e8000000004c89f74489fe488b942408020000e8000000004c89f7" +"89ee4989ef488b942460010000b930000000e8000000004c89f74489e6ba" +"30000000e800000000488b442410488b00488b4c241848ba418763546520" +"f01848899408182e0000488b442410488b00488b4c241848bad250d0836e" +"7df90348899408102e0000488b442410488b00488b4c241848ba9ecbba01" +"be0eb68e48899408082e0000488b442410488b00488b4c241848ba951b85" +"d3af42705848899408002e0000488b442410488b00488b4c241848bad2a5" +"cd1f4622ab5d48899408f82d0000488b442410488b00488b4c241848ba71" +"f07186e4c903cd48899408f02d00004c89f7488bb424880000004489ea44" +"89e1e8000000004c89f78bac24a800000089eeba30000000e80000000048" +"8b442410488b00488b4c241848ba3a8564153f6de51448899408e82d0000" +"488b442410488b00488b4c241848ba6890dbe24ff0e41448899408e02d00" +"00488b442410488b00488b4c241848ba2410887e8c1b0da248899408d82d" +"0000488b442410488b00488b4c241848ba2c7e9b306608885048899408d0" +"2d0000488b442410488b00488b4c241848bad5a585325322f32a48899408" +"c82d0000488b442410488b00488b4c241848bac3457586e4c90d89488994" +"08c02d00004c89f7488bb424c80000004489fa4489e1e8000000004c89f7" +"488b5c246089de448bac24b00000004489eab960000000e800000000488b" +"442410488b00488b4c241848baaf7f8488daef0e1148899408d82b000048" +"8b442410488b00488b4c241848ba89dea0e5cb13382e48899408d02b0000" +"488b442410488b00488b4c241848bad0e8a840ba9c1bc148899408c82b00" +"00488b442410488b00488b4c241848ba94d39925d49548cf48899408c02b" +"0000488b442410488b00488b4c241848baec7c49fc6ba0425848899408b8" +"2b0000488b442410488b00488b4c241848ba46d6e54cad6af6b248899408" +"b02b0000488b442410488b00488b4c241848baeb66fbb00f22f208488994" +"08a82b0000488b442410488b00488b4c241848ba4dceaa5dea93e31c4889" +"9408a02b0000488b442410488b00488b4c241848baee29dcb2caae5ba348" +"899408982b0000488b442410488b00488b4c241848ba8f2217d1cc3ce897" +"48899408902b0000488b442410488b00488b4c241848ba13830ab5925f69" +"c648899408882b0000488b442410488b00488b4c241848ba65d419b35295" +"080748899408802b00004c89f7488b742470bac0000000e8000000004c89" +"f7488bb4246801000089da4489f9e8000000004c89f74489e68b9c24b800" +"000089dab920010000e8000000004c89f78bb4247001000089eae8000000" +"004c89f74489ee4489e2b930000000e8000000004c89f78bb42410010000" +"488b9424d0010000e8000000004c89f789de89dd8b9424f8000000b93000" +"0000e8000000004c89f7488b9c249000000089de488b942460020000e800" +"0000004c89f74c8b6c24604489ee488b942478010000b930000000e80000" +"00004c89f74489feba30000000e800000000488b442410488b00488b4c24" +"1848ba418763546520f01848899408d82b0000488b442410488b00488b4c" +"241848bad250d0836e7df90348899408d02b0000488b442410488b00488b" +"4c241848ba9ecbba01be0eb68e48899408c82b0000488b442410488b0048" +"8b4c241848ba951b85d3af42705848899408c02b0000488b442410488b00" +"488b4c241848bad2a5cd1f4622ab5d48899408b82b0000488b442410488b" +"00488b4c241848ba71f07186e4c903cd48899408b02b00004c89f78bb424" +"4801000089ea4489f9e8000000004c89f7488b742430ba30000000e80000" +"0000488b442410488b00488b4c241848ba3a8564153f6de51448899408a8" +"2b0000488b442410488b00488b4c241848ba6890dbe24ff0e41448899408" +"a02b0000488b442410488b00488b4c241848ba2410887e8c1b0da2488994" +"08982b0000488b442410488b00488b4c241848ba2c7e9b30660888504889" +"9408902b0000488b442410488b00488b4c241848bad5a585325322f32a48" +"899408882b0000488b442410488b00488b4c241848bac3457586e4c90d89" +"48899408802b00004c89f78bb424800100004489ea4489f9e8000000004c" +"89f78bb424a0000000448ba424b00000004489e2b960000000e800000000" +"4c89f78bb424d8000000488b942438020000e8000000004c89f78bb42498" +"000000488b942468010000b930000000e8000000004c89f78bb424700100" +"00488b942440020000e8000000004c89f74489e6488b942450020000b930" +"000000e8000000004c89f789de488b942448020000e8000000004c89f744" +"89ee488b942458020000b930000000e8000000004c89f74489feba300000" +"00e800000000488b442410488b00488b4c241848ba418763546520f01848" +"899408d82b0000488b442410488b00488b4c241848bad250d0836e7df903" +"48899408d02b0000488b442410488b00488b4c241848ba9ecbba01be0eb6" +"8e48899408c82b0000488b442410488b00488b4c241848ba951b85d3af42" +"705848899408c02b0000488b442410488b00488b4c241848bad2a5cd1f46" +"22ab5d48899408b82b0000488b442410488b00488b4c241848ba71f07186" +"e4c903cd48899408b02b00004c89f78bb424880100004489e24489f9e800" +"0000004c89f7488b742430ba30000000e800000000488b442410488b0048" +"8b4c241848ba3a8564153f6de51448899408a82b0000488b442410488b00" +"488b4c241848ba6890dbe24ff0e41448899408a02b0000488b442410488b" +"00488b4c241848ba2410887e8c1b0da248899408982b0000488b44241048" +"8b00488b4c241848ba2c7e9b306608885048899408902b0000488b442410" +"488b00488b4c241848bad5a585325322f32a48899408882b0000488b4424" +"10488b00488b4c241848bac3457586e4c90d8948899408802b00004c89f7" +"8bb424880200004489ea4489f9e8000000004c89f789ee8b9c2498000000" +"89dab960000000e800000000488b442410488b00488b4c241848baaf7f84" +"88daef0e114889940898290000488b442410488b00488b4c241848ba89de" +"a0e5cb13382e4889940890290000488b442410488b00488b4c241848bad0" +"e8a840ba9c1bc14889940888290000488b442410488b00488b4c241848ba" +"94d39925d49548cf4889940880290000488b442410488b00488b4c241848" +"baec7c49fc6ba042584889940878290000488b442410488b00488b4c2418" +"48ba46d6e54cad6af6b24889940870290000488b442410488b00488b4c24" +"1848baeb66fbb00f22f2084889940868290000488b442410488b00488b4c" +"241848ba4dceaa5dea93e31c4889940860290000488b442410488b00488b" +"4c241848baee29dcb2caae5ba34889940858290000488b442410488b0048" +"8b4c241848ba8f2217d1cc3ce8974889940850290000488b442410488b00" +"488b4c241848ba13830ab5925f69c64889940848290000488b442410488b" +"00488b4c241848ba65d419b35295080748899408402900004c89f7488bb4" +"2488000000bac0000000e800000000488b4424408db040f6ffff89b424a8" +"0100004c89f789ea4489e9e8000000004c89f74489fe448ba424a0000000" +"4489e2b920010000e8000000004c89f78bb424d8000000488b542430e800" +"0000004c89f789de4489fab930000000e8000000004c89f78bb424180100" +"00488b542478e8000000004c89f74489e6488b542470b930000000e80000" +"00004c89f78b9c241001000089de488b542450e8000000004c89f789ac24" +"b800000089ee488b542468b930000000e8000000004c89f74489eeba3000" +"0000e800000000488b442410488b00488b4c241848ba418763546520f018" +"4889940898290000488b442410488b00488b4c241848bad250d0836e7df9" +"034889940890290000488b442410488b00488b4c241848ba9ecbba01be0e" +"b68e4889940888290000488b442410488b00488b4c241848ba951b85d3af" +"4270584889940880290000488b442410488b00488b4c241848bad2a5cd1f" +"4622ab5d4889940878290000488b442410488b00488b4c241848ba71f071" +"86e4c903cd48899408702900004c89f78bb424900200004489e24489e9e8" +"000000004c89f7488bb42490000000ba30000000e800000000488b442410" +"488b00488b4c241848ba3a8564153f6de5144889940868290000488b4424" +"10488b00488b4c241848ba6890dbe24ff0e4144889940860290000488b44" +"2410488b00488b4c241848ba2410887e8c1b0da24889940858290000488b" +"442410488b00488b4c241848ba2c7e9b3066088850488994085029000048" +"8b442410488b00488b4c241848bad5a585325322f32a4889940848290000" +"488b442410488b00488b4c241848bac3457586e4c90d8948899408402900" +"004c89f78bb4249802000089ea4489e9e8000000004c89f78bb424b00000" +"00448bbc24980000004489fab960000000e8000000004c8b642440418db4" +"24d0e7ffff89742450418d942470f6ffff4c89f7e8000000004c89f78bb4" +"24280200008b9424a8010000b930000000e800000000418d9424d0f6ffff" +"4c89f78bb424d8000000e800000000418d9424a0f6ffff4c89f74489feb9" +"30000000e800000000418d942430f7ffff4c89f789dee800000000418d94" +"2400f7ffff4c89f78bac24b800000089eeb930000000e8000000004c89f7" +"4489eeba30000000e800000000488b442410488b00488b4c241848ba4187" +"63546520f0184889940898290000488b442410488b00488b4c241848bad2" +"50d0836e7df9034889940890290000488b442410488b00488b4c241848ba" +"9ecbba01be0eb68e4889940888290000488b442410488b00488b4c241848" +"ba951b85d3af4270584889940880290000488b442410488b00488b4c2418" +"48bad2a5cd1f4622ab5d4889940878290000488b442410488b00488b4c24" +"1848ba71f07186e4c903cd48899408702900004c89f78bb4244801000044" +"89fa4489e9e8000000004c89f7488b9c249000000089deba30000000e800" +"000000488b442410488b00488b4c241848ba3a8564153f6de51448899408" +"68290000488b442410488b00488b4c241848ba6890dbe24ff0e414488994" +"0860290000488b442410488b00488b4c241848ba2410887e8c1b0da24889" +"940858290000488b442410488b00488b4c241848ba2c7e9b306608885048" +"89940850290000488b442410488b00488b4c241848bad5a585325322f32a" +"4889940848290000488b442410488b00488b4c241848bac3457586e4c90d" +"8948899408402900004c89f78bb4248001000089ea4489e9e8000000004c" +"89f7448ba424a00000004489e6448bbc24280200004489fab960000000e8" +"00000000488b442410488b00488b4c241848baaf7f8488daef0e11488994" +"0858270000488b442410488b00488b4c241848ba89dea0e5cb13382e4889" +"940850270000488b442410488b00488b4c241848bad0e8a840ba9c1bc148" +"89940848270000488b442410488b00488b4c241848ba94d39925d49548cf" +"4889940840270000488b442410488b00488b4c241848baec7c49fc6ba042" +"584889940838270000488b442410488b00488b4c241848ba46d6e54cad6a" +"f6b24889940830270000488b442410488b00488b4c241848baeb66fbb00f" +"22f2084889940828270000488b442410488b00488b4c241848ba4dceaa5d" +"ea93e31c4889940820270000488b442410488b00488b4c241848baee29dc" +"b2caae5ba34889940818270000488b442410488b00488b4c241848ba8f22" +"17d1cc3ce8974889940810270000488b442410488b00488b4c241848ba13" +"830ab5925f69c64889940808270000488b442410488b00488b4c241848ba" +"65d419b35295080748899408002700004c89f78bb42488010000bac00000" +"00e800000000488b4424408db000f4ffff89b424a00100004c89f74489e2" +"89e9e8000000004c89f74489ee8bac24b000000089eab920010000e80000" +"00004c89f78b74245089dae8000000004c89f74489fe4489eab930000000" +"e8000000004c89f78bb424d8000000488b942418020000e8000000004c89" +"f78b9c249800000089de488b942488000000b930000000e8000000004c89" +"f78bb42418010000488b9424d8010000e8000000004c89f74489e6488b94" +"24c8000000b930000000e8000000004c89f7448bbc24b80000004489feba" +"30000000e800000000488b442410488b00488b4c241848ba418763546520" +"f0184889940858270000488b442410488b00488b4c241848bad250d0836e" +"7df9034889940850270000488b442410488b00488b4c241848ba9ecbba01" +"be0eb68e4889940848270000488b442410488b00488b4c241848ba951b85" +"d3af4270584889940840270000488b442410488b00488b4c241848bad2a5" +"cd1f4622ab5d4889940838270000488b442410488b00488b4c241848ba71" +"f07186e4c903cd48899408302700004c89f78bb4249002000089da4489f9" +"4589fde8000000004c89f78b9c241001000089deba30000000e800000000" +"488b442410488b00488b4c241848ba3a8564153f6de51448899408282700" +"00488b442410488b00488b4c241848ba6890dbe24ff0e414488994082027" +"0000488b442410488b00488b4c241848ba2410887e8c1b0da24889940818" +"270000488b442410488b00488b4c241848ba2c7e9b306608885048899408" +"10270000488b442410488b00488b4c241848bad5a585325322f32a488994" +"0808270000488b442410488b00488b4c241848bac3457586e4c90d894889" +"9408002700004c89f78bb424980200004489e24489f9e8000000004c89f7" +"89ee448bbc24280200004489fab960000000e8000000004c8b642440418d" +"b42490e5ffff89b42458010000418d942430f4ffff899424300200004c89" +"f7e8000000004c89f78bb424400100008b9424a0010000b930000000e800" +"000000418d942490f4ffff899424800200004c89f78b742450e800000000" +"418d942460f4ffff899424780200004c89f74489feb930000000e8000000" +"00418d9424f0f4ffff899424700200004c89f78bb424d8000000e8000000" +"00418d9424c0f4ffff899424680200004c89f78bac249800000089eeb930" +"000000e8000000004c89f74489eeba30000000e800000000488b44241048" +"8b00488b4c241848ba418763546520f0184889940858270000488b442410" +"488b00488b4c241848bad250d0836e7df9034889940850270000488b4424" +"10488b00488b4c241848ba9ecbba01be0eb68e4889940848270000488b44" +"2410488b00488b4c241848ba951b85d3af4270584889940840270000488b" +"442410488b00488b4c241848bad2a5cd1f4622ab5d488994083827000048" +"8b442410488b00488b4c241848ba71f07186e4c903cd4889940830270000" +"4c89f78bb424480100004489fa4489e9e8000000004c89f789deba300000" +"00e800000000488b442410488b00488b4c241848ba3a8564153f6de51448" +"89940828270000488b442410488b00488b4c241848ba6890dbe24ff0e414" +"4889940820270000488b442410488b00488b4c241848ba2410887e8c1b0d" +"a24889940818270000488b442410488b00488b4c241848ba2c7e9b306608" +"88504889940810270000488b442410488b00488b4c241848bad5a5853253" +"22f32a4889940808270000488b442410488b00488b4c241848bac3457586" +"e4c90d8948899408002700004c89f78bb4248001000089ea4489e94489ed" +"e8000000004c89f7448ba424a00000004489e68b942440010000b9600000" +"00e800000000488b442410488b00488b4c241848baaf7f8488daef0e1148" +"89940858270000488b442410488b00488b4c241848ba89dea0e5cb13382e" +"4889940850270000488b442410488b00488b4c241848bad0e8a840ba9c1b" +"c14889940848270000488b442410488b00488b4c241848ba94d39925d495" +"48cf4889940840270000488b442410488b00488b4c241848baec7c49fc6b" +"a042584889940838270000488b442410488b00488b4c241848ba46d6e54c" +"ad6af6b24889940830270000488b442410488b00488b4c241848baeb66fb" +"b00f22f2084889940828270000488b442410488b00488b4c241848ba4dce" +"aa5dea93e31c4889940820270000488b442410488b00488b4c241848baee" +"29dcb2caae5ba34889940818270000488b442410488b00488b4c241848ba" +"8f2217d1cc3ce8974889940810270000488b442410488b00488b4c241848" +"ba13830ab5925f69c64889940808270000488b442410488b00488b4c2418" +"48ba65d419b35295080748899408002700004c89f78bb42488010000bac0" +"000000e800000000488b5c24408db3f8e1ffff4c89f74489e24489e9e800" +"0000004c89f78bb4243c0100008b9424b0000000b920010000e800000000" +"4c89f74c8b7c24484489fe8b9424f4000000e8000000008d93b8dfffff89" +"9424e00000004c89f74489eee8000000004c89f7448b6c243c4489ee89ea" +"e8000000004c89f74489e64489fa4489e9e8000000004c89f74489ee8b94" +"2448010000448bbc24800100004489f9e8000000004989dc8daba0f9ffff" +"4c89f789ee896c24784489ea8b9c240801000089d9e800000000418db424" +"d0f9ffff89b424200100004c89f74489ea89d9e8000000004c89f74489ee" +"8b9424a0000000e800000000418db424c0faffff897424504c89f74489ea" +"89e9e8000000004c89f74489ee4489fae8000000004c89f78b9c24d00000" +"0089de4489ea448bbc24080100004489f9e800000000418db42410fcffff" +"89b424500100004c89f74489ea4489f9e8000000004c89f74489ee8bac24" +"a000000089ea448bbc24480100004489f9e8000000004c89f78bb4244001" +"000089da4489e94589ece8000000004c89f7448bac24280200004489ee44" +"89fae8000000004c89f74489e689ea8bac248001000089e9e8000000004c" +"89f78b9c249800000089de4489ea4489e1e8000000004c89f74c8b6c2448" +"4489ee4489fa89d9e8000000004c89f74489e689ea8b8c2440010000e800" +"0000004c89f74c8b7c24204489fe4489ea4489e1e8000000004c89f78bac" +"24b000000089ee4489fa8b9c24a800000089d9e8000000004c89f78bb424" +"700100004489fa89d9e8000000004c89f74489e68b9424a00000008b4c24" +"50e8000000004c89f7488b5c246089de89ea4489e1e8000000004c89f744" +"89ee89dae8000000004c89f74489e6488bac249000000089eae800000000" +"4c8b7c2440418d9f00fdffff899c24980100004c89f789de4489ea4489e1" +"e8000000004c89f74c8b6c24204489ee89dae8000000004c89f7488b5c24" +"5889deba30000000e800000000458da760fdffff488b442410488b00488b" +"4c2418440fb68408f02d00004c89f74489e689da4489e94489c3e8000000" +"004c89f7448b7c243c4489fe488b5424604489a424c00100004489e1e800" +"0000004c89f74c8b6c24484489ee4489e2e8000000004c89f78bb4240801" +"000089ea4489e9e8000000004c89f74489ee4589fc4489fab960000000e8" +"00000000488b442410488b00488b4c241889dd4088ac08803400004c89f7" +"488b5c245889deba60000000e8000000004c89f74c8b7c24204489fe89da" +"4489e94189e8e8000000004c89f74589e54489e64489fa8b4c2450e80000" +"00004c89f78bb424e80100004489fa8b8c2440010000e8000000004c89f7" +"8bb424f00100004489fa8b8c2498000000e8000000004c89f74489fe4d89" +"fc4489eab920010000e800000000488b442410488b00488b4c24184088ac" +"08e02e00004c89f789deba20010000e8000000004c89f74c8b7c24604489" +"fe89da4489e14189e8e8000000004c89f7488bb42488000000488b542470" +"8b9c24f800000089d94189e8e8000000004c89f7488bb424c8000000488b" +"542468488b8c24780100004189e84189ece8000000004c89f7488b6c2448" +"89ee8b9424f40000004489f9e8000000004c89f74489ee4489fae8000000" +"004c89f7488bb424c00000008b9424e00000004489e9e8000000004c89f7" +"4489ee89eab940020000e800000000488b442410488b00488b4c24184488" +"a408b81b00004c89f7448bbc24280200004489feba40020000e800000000" +"4c89f7488b6c242089ee4489fa4489e94589e04589e74489a42448010000" +"e8000000004c8b642440418d942400e8ffff4c89f789de8b8c24e8010000" +"4589f8e800000000418d942460e8ffff4c89f7488bb424780100008b8c24" +"f00100004589f8e800000000418d9424c0e8ffff4c89f74c8b6c24484489" +"ee8b8c24300100004589f8e800000000418d942420e9ffff4c89f7488bb4" +"24e80000008b8c24900100004589f8e800000000418d942480e9ffff4c89" +"f7488bb424000100008b8c24100200004589f8e8000000004c89f78b9c24" +"4001000089de89eab920010000e800000000418db42480e6ffff89b42408" +"0100004c89f74489eab920010000e8000000004c89f78bac249800000089" +"ee8b94243c01000089d9e8000000004c89f789de89eab940020000e80000" +"00004c89f78bb424100100008b9424d8000000e8000000004c89f7448ba4" +"24b80000004489e689eab930000000e8000000004c89f7488b7424308b94" +"24b0010000e8000000004c89f7488b5c245889de8b9424b8010000b93000" +"0000e8000000004c89f7448bbc24a80000004489fe8b9424c8020000e800" +"0000004c89f7488b6c242089ee8b9424d0020000b930000000e800000000" +"4c89f74489eeba30000000e800000000488b442410488b00488b4c241848" +"ba418763546520f0184889940878340000488b442410488b00488b4c2418" +"48bad250d0836e7df9034889940870340000488b442410488b00488b4c24" +"1848ba9ecbba01be0eb68e4889940868340000488b442410488b00488b4c" +"241848ba951b85d3af4270584889940860340000488b442410488b00488b" +"4c241848bad2a5cd1f4622ab5d4889940858340000488b442410488b0048" +"8b4c241848ba71f07186e4c903cd48899408503400004c89f7488bb42488" +"00000089da4489e9e8000000004c89f7488bb42480000000ba30000000e8" +"00000000488b442410488b00488b4c241848ba3a8564153f6de514488994" +"0848340000488b442410488b00488b4c241848ba6890dbe24ff0e4144889" +"940840340000488b442410488b00488b4c241848ba2410887e8c1b0da248" +"89940838340000488b442410488b00488b4c241848ba2c7e9b3066088850" +"4889940830340000488b442410488b00488b4c241848bad5a585325322f3" +"2a4889940828340000488b442410488b00488b4c241848bac3457586e4c9" +"0d8948899408203400004c89f7488bb424c800000089ea4489e9e8000000" +"004c89f7488b7424604489e54489e2b960000000e8000000004c8b642440" +"418d942430ebffff4c89f78bb42418010000e800000000418d942400ebff" +"ff899424e00000004c89f78bb424a0000000b930000000e800000000418d" +"942490ebffff4c89f78bb42410010000e800000000418d942460ebffff4c" +"89f789eeb930000000e800000000418d9424f0ebffff4c89f74489fee800" +"000000418d9424c0ebffff4c89f74c8b7c24204489feb930000000e80000" +"00004c89f74c89eb89deba30000000e800000000488b442410488b00488b" +"4c241848ba418763546520f0184889940878340000488b442410488b0048" +"8b4c241849bdd250d0836e7df9034c89ac0870340000488b442410488b00" +"488b4c241848ba9ecbba01be0eb68e4889940868340000488b442410488b" +"00488b4c241848ba951b85d3af4270584889940860340000488b44241048" +"8b00488b4c241848bad2a5cd1f4622ab5d4889940858340000488b442410" +"488b00488b4c241848ba71f07186e4c903cd48899408503400004c89f748" +"8b74247089ea89d9e8000000004c89f74c8ba424800000004489e6ba3000" +"0000e800000000488b442410488b00488b4c241848ba3a8564153f6de514" +"4889940848340000488b442410488b00488b4c241848ba6890dbe24ff0e4" +"144889940840340000488b442410488b00488b4c241848ba2410887e8c1b" +"0da24889940838340000488b442410488b00488b4c241848ba2c7e9b3066" +"0888504889940830340000488b442410488b00488b4c241848bad5a58532" +"5322f32a4889940828340000488b442410488b00488b4c241848bac34575" +"86e4c90d8948899408203400004c89f7488b7424684489fa89d9e8000000" +"004c89f74c8b6c24584489ee8bac24a000000089eab960000000e8000000" +"00488b442410488b00488b4c241848baaf7f8488daef0e1148899408182e" +"0000488b442410488b00488b4c241848ba89dea0e5cb13382e4889940810" +"2e0000488b442410488b00488b4c241848bad0e8a840ba9c1bc148899408" +"082e0000488b442410488b00488b4c241848ba94d39925d49548cf488994" +"08002e0000488b442410488b00488b4c241848baec7c49fc6ba042584889" +"9408f82d0000488b442410488b00488b4c241848ba46d6e54cad6af6b248" +"899408f02d0000488b442410488b00488b4c241848baeb66fbb00f22f208" +"48899408e82d0000488b442410488b00488b4c241848ba4dceaa5dea93e3" +"1c48899408e02d0000488b442410488b00488b4c241848baee29dcb2caae" +"5ba348899408d82d0000488b442410488b00488b4c241848ba8f2217d1cc" +"3ce89748899408d02d0000488b442410488b00488b4c241848ba13830ab5" +"925f69c648899408c82d0000488b442410488b00488b4c241848ba65d419" +"b35295080748899408c02d00004c89f78bb424f8000000bac0000000e800" +"0000004c89f7488bb424c00000004489ea4489f9e8000000004c89f74c8b" +"7c24484489fe488b5c246089dab920010000e8000000004c89f78bb42418" +"0100004489e2e8000000004c89f789ee4489fab930000000e8000000004c" +"89f7488bb42490000000488b9424e0010000e8000000004c89f789de4989" +"df488b9424e8000000b930000000e8000000004c89f7488b5c243089de48" +"8b942428010000e8000000004c89f74489ee4d89ec488b942400010000b9" +"30000000e8000000004c89f7488b6c242089eeba30000000e80000000048" +"8b442410488b00488b4c241848ba418763546520f01848899408182e0000" +"488b442410488b00488b4c241848bad250d0836e7df90348899408102e00" +"00488b442410488b00488b4c241848ba9ecbba01be0eb68e48899408082e" +"0000488b442410488b00488b4c241848ba951b85d3af4270584889940800" +"2e0000488b442410488b00488b4c241848bad2a5cd1f4622ab5d48899408" +"f82d0000488b442410488b00488b4c241848ba71f07186e4c903cd488994" +"08f02d00004c89f78bb424880100004489fa89e9e8000000004c89f7448b" +"ac24a80000004489eeba30000000e800000000488b442410488b00488b4c" +"241848ba3a8564153f6de51448899408e82d0000488b442410488b00488b" +"4c241848ba6890dbe24ff0e41448899408e02d0000488b442410488b0048" +"8b4c241848ba2410887e8c1b0da248899408d82d0000488b442410488b00" +"488b4c241848ba2c7e9b306608885048899408d02d0000488b442410488b" +"00488b4c241848bad5a585325322f32a48899408c82d0000488b44241048" +"8b00488b4c241848bac3457586e4c90d8948899408c02d00004c89f78bb4" +"24880200004489e289e9e8000000004c89f78bb424b80000008bac24a000" +"000089eab960000000e8000000004c89f78bb42470010000488b9424f801" +"0000e8000000004c89f78bb424b0000000488b9424c0000000b930000000" +"e8000000004c89f78bb42418010000488b942400020000e8000000004c89" +"f789ee488b9424c8010000b930000000e8000000004c89f789de488b9424" +"08020000e8000000004c89f74489e6488b942460010000b930000000e800" +"0000004c89f74c8b7c24204489feba30000000e800000000488b44241048" +"8b00488b4c241848ba418763546520f01848899408182e0000488b442410" +"488b00488b4c241848bad250d0836e7df90348899408102e0000488b4424" +"10488b00488b4c241848ba9ecbba01be0eb68e48899408082e0000488b44" +"2410488b00488b4c241848ba951b85d3af42705848899408002e0000488b" +"442410488b00488b4c241848bad2a5cd1f4622ab5d48899408f82d000048" +"8b442410488b00488b4c241848ba71f07186e4c903cd48899408f02d0000" +"4c89f7488bb4248800000089ea4489f9e8000000004c89f74489eeba3000" +"0000e800000000488b442410488b00488b4c241848ba3a8564153f6de514" +"48899408e82d0000488b442410488b00488b4c241848ba6890dbe24ff0e4" +"1448899408e02d0000488b442410488b00488b4c241848ba2410887e8c1b" +"0da248899408d82d0000488b442410488b00488b4c241848ba2c7e9b3066" +"08885048899408d02d0000488b442410488b00488b4c241848bad5a58532" +"5322f32a48899408c82d0000488b442410488b00488b4c241848bac34575" +"86e4c90d8948899408c02d00004c89f7488bb424c80000004489e24489f9" +"e8000000004c89f7488b5c246089de8b9424b0000000b960000000e80000" +"0000488b442410488b00488b4c241848baaf7f8488daef0e1148899408d8" +"2b0000488b442410488b00488b4c241848ba89dea0e5cb13382e48899408" +"d02b0000488b442410488b00488b4c241848bad0e8a840ba9c1bc1488994" +"08c82b0000488b442410488b00488b4c241848ba94d39925d49548cf4889" +"9408c02b0000488b442410488b00488b4c241848baec7c49fc6ba0425848" +"899408b82b0000488b442410488b00488b4c241848ba46d6e54cad6af6b2" +"48899408b02b0000488b442410488b00488b4c241848baeb66fbb00f22f2" +"0848899408a82b0000488b442410488b00488b4c241848ba4dceaa5dea93" +"e31c48899408a02b0000488b442410488b00488b4c241848baee29dcb2ca" +"ae5ba348899408982b0000488b442410488b00488b4c241848ba8f2217d1" +"cc3ce89748899408902b0000488b442410488b00488b4c241848ba13830a" +"b5925f69c648899408882b0000488b442410488b00488b4c241848ba65d4" +"19b35295080748899408802b00004c89f7488b742470bac0000000e80000" +"00004c89f74c8bac24680100004489ee89da4489e1e8000000004c89f744" +"89fe8b9424b8000000b920010000e8000000004c89f78b9c249800000089" +"de4489fab940020000e8000000004c89f789de448ba424400100004489e2" +"e8000000004c89f7488b6c244889ee89da4189dfe8000000004c89f74489" +"ee488b9424c0000000e8000000004c89f7488b5c242089de89eab9200100" +"00e8000000004c89f74489e689dab940020000e8000000004c89f78b9c24" +"b000000089de4489fae8000000004c89f7448bac24a00000004489ee89da" +"e8000000004c89f7448bbc24b80000004489fe4489e289d9e8000000004c" +"89f74489e64489fae8000000004c89f78bac243c01000089ee4489e2e800" +"0000004c89f7488b5c246089de89eae8000000004c89f789de4489eae800" +"0000004c89f74489ee89dae800000000488b4424408d90c0f1ffff4c89f7" +"488b9c24c000000089dee8000000004c89f74c8b6424484489e64489fab9" +"20010000e8000000004c89f74489fe4489e2b940020000e8000000004c89" +"f74489e64489fa8bac249800000089e9e8000000004c89f74489ee4489e2" +"e8000000004c89f789de8b9424e0000000e8000000004c89f74489e689ea" +"b920010000e8000000004c89f74489fe4489e2b940020000e8000000004c" +"89f78b9c244001000089de89eae800000000488b6c24408db5f0faffff89" +"b424e00000004c89f78b942458010000e8000000004c89f7448b6c245044" +"89ee89dab930000000e8000000008d95f0e5ffff4c89f7488b742430e800" +"0000008d95c0e5ffff4c89f7488b5c245889deb930000000e8000000008d" +"9550e6ffff4c89f78bb424a8000000e8000000008d9520e6ffff4c89f74c" +"8b7c24204489feb930000000e8000000004c89f74c8b6424484489e6ba30" +"000000e800000000488b442410488b00488b4c241848ba418763546520f0" +"184889940878340000488b442410488b00488b4c241848bad250d0836e7d" +"f9034889940870340000488b442410488b00488b4c241848ba9ecbba01be" +"0eb68e4889940868340000488b442410488b00488b4c241848ba951b85d3" +"af4270584889940860340000488b442410488b00488b4c241848bad2a5cd" +"1f4622ab5d4889940858340000488b442410488b00488b4c241848ba71f0" +"7186e4c903cd48899408503400008db540fcffff89b424980000004c89f7" +"89da4489e1e8000000004c89f7488b9c248000000089deba30000000e800" +"000000488b442410488b00488b4c241848ba3a8564153f6de51448899408" +"48340000488b442410488b00488b4c241848ba6890dbe24ff0e414488994" +"0840340000488b442410488b00488b4c241848ba2410887e8c1b0da24889" +"940838340000488b442410488b00488b4c241848ba2c7e9b306608885048" +"89940830340000488b442410488b00488b4c241848bad5a585325322f32a" +"4889940828340000488b442410488b00488b4c241848bac3457586e4c90d" +"8948899408203400008db5a0fcffff89b424580100004c89f74489fa4489" +"e1e8000000004c89f78bb424d00000004589ef4489eab960000000e80000" +"00008d95b0e6ffff4c89f78bb42420010000e8000000004c89f78b742478" +"8b942408010000b930000000e8000000008d9510e7ffff4c89f78bb424e0" +"000000e8000000008d95e0e6ffff4c89f74489eeb930000000e800000000" +"8d9570e7ffff4c89f78bb424a8000000e8000000008d9540e7ffff4c89f7" +"4c8b6c24204489eeb930000000e8000000004c89f74489e6ba30000000e8" +"00000000488b442410488b00488b4c241848ba418763546520f018488994" +"0878340000488b442410488b00488b4c241848bad250d0836e7df9034889" +"940870340000488b442410488b00488b4c241848ba9ecbba01be0eb68e48" +"89940868340000488b442410488b00488b4c241848ba951b85d3af427058" +"4889940860340000488b442410488b00488b4c241848bad2a5cd1f4622ab" +"5d4889940858340000488b442410488b00488b4c241848ba71f07186e4c9" +"03cd48899408503400004c89f7488b7424704489fa4489e14d89e7e80000" +"00004c89f789deba30000000e800000000488b442410488b00488b4c2418" +"48ba3a8564153f6de5144889940848340000488b442410488b00488b4c24" +"1848ba6890dbe24ff0e4144889940840340000488b442410488b00488b4c" +"241848ba2410887e8c1b0da24889940838340000488b442410488b00488b" +"4c241848ba2c7e9b30660888504889940830340000488b442410488b0048" +"8b4c241848bad5a585325322f32a4889940828340000488b442410488b00" +"488b4c241848bac3457586e4c90d8948899408203400004c89f7488b7424" +"684489ea4c89eb4489f9e8000000004c89f74c8b6424584489e6448b6c24" +"784489eab960000000e800000000488b442410488b00488b4c241848baaf" +"7f8488daef0e1148899408182e0000488b442410488b00488b4c241848ba" +"89dea0e5cb13382e48899408102e0000488b442410488b00488b4c241848" +"bad0e8a840ba9c1bc148899408082e0000488b442410488b00488b4c2418" +"48ba94d39925d49548cf48899408002e0000488b442410488b00488b4c24" +"1848baec7c49fc6ba0425848899408f82d0000488b442410488b00488b4c" +"241848ba46d6e54cad6af6b248899408f02d0000488b442410488b00488b" +"4c241848baeb66fbb00f22f20848899408e82d0000488b442410488b0048" +"8b4c241848ba4dceaa5dea93e31c48899408e02d0000488b442410488b00" +"488b4c241848baee29dcb2caae5ba348899408d82d0000488b442410488b" +"00488b4c241848ba8f2217d1cc3ce89748899408d02d0000488b44241048" +"8b00488b4c241848ba13830ab5925f69c648899408c82d0000488b442410" +"488b00488b4c241848ba65d419b35295080748899408c02d00004c89f78b" +"b424f8000000bac0000000e8000000004c89f7488bb424c00000004489e2" +"89d9e8000000004c89f74489fe8b9c24d000000089dab920010000e80000" +"00004c89f78bb42420010000488b942480000000e8000000004c89f74489" +"ee4489fab930000000e8000000004c89f78bb42450010000488b9424e001" +"0000e8000000004c89f789de488b9424e8000000b930000000e800000000" +"4c89f74c8b7c24304489fe488b942428010000e8000000004c89f74489e6" +"4d89e5488b942400010000b930000000e8000000004c89f74c8b64242044" +"89e6ba30000000e800000000488b442410488b00488b4c241848ba418763" +"546520f01848899408182e0000488b442410488b00488b4c241848bad250" +"d0836e7df90348899408102e0000488b442410488b00488b4c241848ba9e" +"cbba01be0eb68e48899408082e0000488b442410488b00488b4c241848ba" +"951b85d3af42705848899408002e0000488b442410488b00488b4c241848" +"bad2a5cd1f4622ab5d48899408f82d0000488b442410488b00488b4c2418" +"48ba71f07186e4c903cd48899408f02d00008db520fbffff89b424b80100" +"004c89f789da4489e14c89e3e8000000004c89f78bb424a8000000ba3000" +"0000e800000000488b442410488b00488b4c241848ba3a8564153f6de514" +"48899408e82d0000488b442410488b00488b4c241848ba6890dbe24ff0e4" +"1448899408e02d0000488b442410488b00488b4c241848ba2410887e8c1b" +"0da248899408d82d0000488b442410488b00488b4c241848ba2c7e9b3066" +"08885048899408d02d0000488b442410488b00488b4c241848bad5a58532" +"5322f32a48899408c82d0000488b442410488b00488b4c241848bac34575" +"86e4c90d8948899408c02d00008db580fbffff89b424b00100004c89f744" +"89ea4d89ec89d9e8000000004c89f78b7424508b5c247889dab960000000" +"e8000000008db590fdffff89b424d80000004c89f7488b9424f8010000e8" +"000000004c89f7448bac24c00100004489ee488b9424c0000000b9300000" +"00e8000000004c89f78bb42420010000488b942400020000e8000000004c" +"89f789de488b9424c8010000b930000000e8000000004c89f74489fe488b" +"942408020000e8000000004c89f74489e6488b942460010000b930000000" +"e8000000004c89f74c8b7c24204489feba30000000e800000000488b4424" +"10488b00488b4c241848ba418763546520f01848899408182e0000488b44" +"2410488b00488b4c241848bad250d0836e7df90348899408102e0000488b" +"442410488b00488b4c241848ba9ecbba01be0eb68e48899408082e000048" +"8b442410488b00488b4c241848ba951b85d3af42705848899408002e0000" +"488b442410488b00488b4c241848bad2a5cd1f4622ab5d48899408f82d00" +"00488b442410488b00488b4c241848ba71f07186e4c903cd48899408f02d" +"00004c89f78bb4249800000089da4489f9e8000000004c89f78b9c24a800" +"000089deba30000000e800000000488b442410488b00488b4c241848ba3a" +"8564153f6de51448899408e82d0000488b442410488b00488b4c241848ba" +"6890dbe24ff0e41448899408e02d0000488b442410488b00488b4c241848" +"ba2410887e8c1b0da248899408d82d0000488b442410488b00488b4c2418" +"48ba2c7e9b306608885048899408d02d0000488b442410488b00488b4c24" +"1848bad5a585325322f32a48899408c82d0000488b442410488b00488b4c" +"241848bac3457586e4c90d8948899408c02d00004c89f78bb42458010000" +"4489e24489f9e8000000004c89f7448bbc24d00000004489fe4489eab960" +"000000e800000000488b442410488b00488b4c241848baaf7f8488daef0e" +"1148899408d82b0000488b442410488b00488b4c241848ba89dea0e5cb13" +"382e48899408d02b0000488b442410488b00488b4c241848bad0e8a840ba" +"9c1bc148899408c82b0000488b442410488b00488b4c241848ba94d39925" +"d49548cf48899408c02b0000488b442410488b00488b4c241848baec7c49" +"fc6ba0425848899408b82b0000488b442410488b00488b4c241848ba46d6" +"e54cad6af6b248899408b02b0000488b442410488b00488b4c241848baeb" +"66fbb00f22f20848899408a82b0000488b442410488b00488b4c241848ba" +"4dceaa5dea93e31c48899408a02b0000488b442410488b00488b4c241848" +"baee29dcb2caae5ba348899408982b0000488b442410488b00488b4c2418" +"48ba8f2217d1cc3ce89748899408902b0000488b442410488b00488b4c24" +"1848ba13830ab5925f69c648899408882b0000488b442410488b00488b4c" +"241848ba65d419b35295080748899408802b00004c89f7488b742470bac0" +"000000e8000000004c89f7488bb424680100004489fa4489e1e800000000" +"4c89f74c8b6424204489e68b6c245089eab920010000e8000000004c89f7" +"8bb424d800000089dae8000000004c89f74489ee4489e2b930000000e800" +"0000004c89f78bb424e0000000488b9424d0010000e8000000004c89f789" +"ee8b9424f8000000b930000000e8000000004c89f78b9c245001000089de" +"488b942460020000e8000000004c89f74489fe488b942478010000b93000" +"0000e8000000004c89f74c8b7c24584489feba30000000e800000000488b" +"442410488b00488b4c241848ba418763546520f01848899408d82b000048" +"8b442410488b00488b4c241848bad250d0836e7df90348899408d02b0000" +"488b442410488b00488b4c241848ba9ecbba01be0eb68e48899408c82b00" +"00488b442410488b00488b4c241848ba951b85d3af42705848899408c02b" +"0000488b442410488b00488b4c241848bad2a5cd1f4622ab5d48899408b8" +"2b0000488b442410488b00488b4c241848ba71f07186e4c903cd48899408" +"b02b00004c8b6c2440418db500faffff4c89f789ea4489f9e8000000004c" +"89f7488b742430ba30000000e800000000488b442410488b00488b4c2418" +"48ba3a8564153f6de51448899408a82b0000488b442410488b00488b4c24" +"1848ba6890dbe24ff0e41448899408a02b0000488b442410488b00488b4c" +"241848ba2410887e8c1b0da248899408982b0000488b442410488b00488b" +"4c241848ba2c7e9b306608885048899408902b0000488b442410488b0048" +"8b4c241848bad5a585325322f32a48899408882b0000488b442410488b00" +"488b4c241848bac3457586e4c90d8948899408802b0000418db560faffff" +"4c89f7448ba424d00000004489e24489f9e8000000004c89f78b7424788b" +"ac24c001000089eab960000000e800000000418db530fdffff4c89f7488b" +"942438020000e8000000004c89f78bb42498010000488b942468010000b9" +"30000000e8000000004c89f78bb424d8000000488b942440020000e80000" +"00004c89f789ee488b942450020000b930000000e8000000004c89f789de" +"488b942448020000e8000000004c89f74489e6488b942458020000b93000" +"0000e8000000004c89f74489feba30000000e800000000488b442410488b" +"00488b4c241848ba418763546520f01848899408d82b0000488b44241048" +"8b00488b4c241848bad250d0836e7df90348899408d02b0000488b442410" +"488b00488b4c241848ba9ecbba01be0eb68e48899408c82b0000488b4424" +"10488b00488b4c241848ba951b85d3af42705848899408c02b0000488b44" +"2410488b00488b4c241848bad2a5cd1f4622ab5d48899408b82b0000488b" +"442410488b00488b4c241848ba71f07186e4c903cd48899408b02b00004c" +"89f78bb424b801000089ea4489f9e8000000004c89f7488b5c243089deba" +"30000000e800000000488b442410488b00488b4c241848ba3a8564153f6d" +"e51448899408a82b0000488b442410488b00488b4c241848ba6890dbe24f" +"f0e41448899408a02b0000488b442410488b00488b4c241848ba2410887e" +"8c1b0da248899408982b0000488b442410488b00488b4c241848ba2c7e9b" +"306608885048899408902b0000488b442410488b00488b4c241848bad5a5" +"85325322f32a48899408882b0000488b442410488b00488b4c241848bac3" +"457586e4c90d8948899408802b00004c89f78bb424b00100004489e24489" +"f9e8000000004c89f78b6c245089ee8b942498010000b960000000e80000" +"0000488b442410488b00488b4c241848baaf7f8488daef0e114889940898" +"320000488b442410488b00488b4c241848ba89dea0e5cb13382e48899408" +"90320000488b442410488b00488b4c241848bad0e8a840ba9c1bc1488994" +"0888320000488b442410488b00488b4c241848ba94d39925d49548cf4889" +"940880320000488b442410488b00488b4c241848baec7c49fc6ba0425848" +"89940878320000488b442410488b00488b4c241848ba46d6e54cad6af6b2" +"4889940870320000488b442410488b00488b4c241848baeb66fbb00f22f2" +"084889940868320000488b442410488b00488b4c241848ba4dceaa5dea93" +"e31c4889940860320000488b442410488b00488b4c241848baee29dcb2ca" +"ae5ba34889940858320000488b442410488b00488b4c241848ba8f2217d1" +"cc3ce8974889940850320000488b442410488b00488b4c241848ba13830a" +"b5925f69c64889940848320000488b442410488b00488b4c241848ba65d4" +"19b35295080748899408403200004c89f7448bac24980000004489eebac0" +"000000e8000000004c89f78bb424a801000089ea4489e1e8000000004c89" +"f74d89fc4489e68b542478b920010000e8000000004c89f78bb424400100" +"004489e2b940020000e8000000004c89f74c8b7c24604489fe8b9424b800" +"0000e8000000004c89f78bb424e0000000488b942490000000e800000000" +"4c89f789ee4489fab930000000e8000000004c89f789de488b9424180200" +"00e8000000004c89f74489e6488b942488000000b930000000e800000000" +"4c89f78bac24a800000089ee488b9424d8010000e8000000004c89f74c8b" +"7c24204489fe488b9424c8000000b930000000e8000000004c89f7488b5c" +"244889deba30000000e800000000488b442410488b00488b4c241848ba41" +"8763546520f0184889940878340000488b442410488b00488b4c241848ba" +"d250d0836e7df9034889940870340000488b442410488b00488b4c241848" +"ba9ecbba01be0eb68e4889940868340000488b442410488b00488b4c2418" +"48ba951b85d3af4270584889940860340000488b442410488b00488b4c24" +"1848bad2a5cd1f4622ab5d4889940858340000488b442410488b00488b4c" +"241848ba71f07186e4c903cd48899408503400004c89f74489ee4489e289" +"d94989dce8000000004c89f7488b9c248000000089deba30000000e80000" +"0000488b442410488b00488b4c241848ba3a8564153f6de5144889940848" +"340000488b442410488b00488b4c241848ba6890dbe24ff0e41448899408" +"40340000488b442410488b00488b4c241848ba2410887e8c1b0da2488994" +"0838340000488b442410488b00488b4c241848ba2c7e9b30660888504889" +"940830340000488b442410488b00488b4c241848bad5a585325322f32a48" +"89940828340000488b442410488b00488b4c241848bac3457586e4c90d89" +"48899408203400004c89f78bb424580100004489fa4489e1e8000000004c" +"89f78bb424d0000000448b6424504489e2b960000000e8000000004c89f7" +"8bb424200100008b942430020000e8000000004c89f7448b6c24784489ee" +"8b9424a0010000b930000000e8000000004c89f78bb424e00000008b9424" +"80020000e8000000004c89f74489e68b942478020000b930000000e80000" +"00004c89f789ee8b942470020000e8000000004c89f74489fe8b94246802" +"0000b930000000e8000000004c89f7488b6c244889eeba30000000e80000" +"0000488b442410488b00488b4c241848ba418763546520f0184889940878" +"340000488b442410488b00488b4c241848bad250d0836e7df90348899408" +"70340000488b442410488b00488b4c241848ba9ecbba01be0eb68e488994" +"0868340000488b442410488b00488b4c241848ba951b85d3af4270584889" +"940860340000488b442410488b00488b4c241848bad2a5cd1f4622ab5d48" +"89940858340000488b442410488b00488b4c241848ba71f07186e4c903cd" +"48899408503400004c89f7488b7424704489e289e9e8000000004c89f789" +"deba30000000e800000000488b442410488b00488b4c241848ba3a856415" +"3f6de5144889940848340000488b442410488b00488b4c241848ba6890db" +"e24ff0e4144889940840340000488b442410488b00488b4c241848ba2410" +"887e8c1b0da24889940838340000488b442410488b00488b4c241848ba2c" +"7e9b30660888504889940830340000488b442410488b00488b4c241848ba" +"d5a585325322f32a4889940828340000488b442410488b00488b4c241848" +"bac3457586e4c90d8948899408203400004c89f7488b7424684d89fc4489" +"e289e9e8000000004c89f74c8b7c24584489fe4489eab960000000e80000" +"0000488b442410488b00488b4c241848baaf7f8488daef0e114889940818" +"2e0000488b442410488b00488b4c241848ba89dea0e5cb13382e48899408" +"102e0000488b442410488b00488b4c241848bad0e8a840ba9c1bc1488994" +"08082e0000488b442410488b00488b4c241848ba94d39925d49548cf4889" +"9408002e0000488b442410488b00488b4c241848baec7c49fc6ba0425848" +"899408f82d0000488b442410488b00488b4c241848ba46d6e54cad6af6b2" +"48899408f02d0000488b442410488b00488b4c241848baeb66fbb00f22f2" +"0848899408e82d0000488b442410488b00488b4c241848ba4dceaa5dea93" +"e31c48899408e02d0000488b442410488b00488b4c241848baee29dcb2ca" +"ae5ba348899408d82d0000488b442410488b00488b4c241848ba8f2217d1" +"cc3ce89748899408d02d0000488b442410488b00488b4c241848ba13830a" +"b5925f69c648899408c82d0000488b442410488b00488b4c241848ba65d4" +"19b35295080748899408c02d00004c89f78bb424f8000000bac0000000e8" +"000000004c89f7488bb424c00000004489fa4489e1e8000000004c89f789" +"ee8b9424d0000000b920010000e8000000004c89f7488b74246089ea4989" +"edb940020000e8000000004c89f78b9c24b000000089de8b94243c010000" +"e8000000004c89f78bb424e00000008b942470010000e8000000004c89f7" +"8b74245089dab930000000e8000000004c89f7488b7424308b9424d80200" +"00e8000000004c89f74489fe4c89fd8b942490020000b930000000e80000" +"00004c89f78b9c24a800000089de8b9424e0020000e8000000004c89f744" +"89e68b942498020000b930000000e8000000004c89f74d89ef4489feba30" +"000000e800000000488b442410488b00488b4c241848ba418763546520f0" +"184889940878340000488b442410488b00488b4c241848bad250d0836e7d" +"f9034889940870340000488b442410488b00488b4c241848ba9ecbba01be" +"0eb68e4889940868340000488b442410488b00488b4c241848ba951b85d3" +"af4270584889940860340000488b442410488b00488b4c241848bad2a5cd" +"1f4622ab5d4889940858340000488b442410488b00488b4c241848ba71f0" +"7186e4c903cd48899408503400004c89f78bb4249800000089ea4489f9e8" +"000000004c89f7488bac248000000089eeba30000000e800000000488b44" +"2410488b00488b4c241848ba3a8564153f6de5144889940848340000488b" +"442410488b00488b4c241848ba6890dbe24ff0e414488994084034000048" +"8b442410488b00488b4c241848ba2410887e8c1b0da24889940838340000" +"488b442410488b00488b4c241848ba2c7e9b306608885048899408303400" +"00488b442410488b00488b4c241848bad5a585325322f32a488994082834" +"0000488b442410488b00488b4c241848bac3457586e4c90d894889940820" +"3400004c89f78bb424580100004489e24489f9e8000000004c89f78bb424" +"d0000000448b6c24504489eab960000000e8000000004c8b642440418d94" +"2470edffff4c89f78bb42420010000e800000000418d942440edffff4c89" +"f78b742478b930000000e800000000418d9424d0edffff4c89f78bb424e0" +"000000e800000000418d9424a0edffff4c89f74489eeb930000000e80000" +"0000418d942430eeffff4c89f789dee800000000418d942400eeffff4c8b" +"6424184c89f7488b5c242089deb930000000e8000000004c89f74489feba" +"30000000e800000000488b442410488b0048b9418763546520f0184a898c" +"2078340000488b442410488b0048b9d250d0836e7df9034a898c20703400" +"00488b442410488b0048b99ecbba01be0eb68e4a898c2068340000488b44" +"2410488b0048b9951b85d3af4270584a898c2060340000488b442410488b" +"0048b9d2a5cd1f4622ab5d4a898c2058340000488b442410488b0048b971" +"f07186e4c903cd4a898c20503400004c89f7488b7424704489ea4489f9e8" +"000000004c89f789eeba30000000e800000000488b442410488b0048b93a" +"8564153f6de5144a898c2048340000488b442410488b0048b96890dbe24f" +"f0e4144a898c2040340000488b442410488b0048b92410887e8c1b0da24a" +"898c2038340000488b442410488b0048b92c7e9b30660888504a898c2030" +"340000488b442410488b0048b9d5a585325322f32a4a898c202834000048" +"8b442410488b0048b9c3457586e4c90d894a898c20203400004c89f7488b" +"74246889da4889dd4489f9e8000000004c89f7488b5c245889de448b6c24" +"784489eab960000000e800000000488b442410488b0048b9af7f8488daef" +"0e114a898c20182e0000488b442410488b0048b989dea0e5cb13382e4a89" +"8c20102e0000488b442410488b0048b9d0e8a840ba9c1bc14a898c20082e" +"0000488b442410488b0048b994d39925d49548cf4a898c20002e0000488b" +"442410488b0048b9ec7c49fc6ba042584a898c20f82d0000488b44241048" +"8b0048b946d6e54cad6af6b24a898c20f02d0000488b442410488b0048b9" +"eb66fbb00f22f2084a898c20e82d0000488b442410488b0048b94dceaa5d" +"ea93e31c4a898c20e02d0000488b442410488b0048b9ee29dcb2caae5ba3" +"4a898c20d82d0000488b442410488b0048b98f2217d1cc3ce8974a898c20" +"d02d0000488b442410488b0048b913830ab5925f69c64a898c20c82d0000" +"488b442410488b0048b965d419b3529508074a898c20c02d00004c89f78b" +"b424f8000000bac0000000e8000000004c89f7488bb424c000000089da89" +"e9e8000000004c89f74489fe8bac24d000000089eab920010000e8000000" +"004c89f78bb42420010000488b942480000000e8000000004c89f74489ee" +"4489fab930000000e8000000004c89f78bb42450010000488b9424e00100" +"00e8000000004c89f789ee488b9424e8000000b930000000e8000000004c" +"89f7488b742430488b942428010000e8000000004c89f789de488b942400" +"010000b930000000e8000000004c89f74c8b6c24204489eeba30000000e8" +"00000000488b442410488b0048b9418763546520f0184a898c20182e0000" +"488b442410488b0048b9d250d0836e7df9034a898c20102e0000488b4424" +"10488b0048b99ecbba01be0eb68e4a898c20082e0000488b442410488b00" +"48b9951b85d3af4270584a898c20002e0000488b442410488b0048b9d2a5" +"cd1f4622ab5d4a898c20f82d0000488b442410488b0048b971f07186e4c9" +"03cd4a898c20f02d00004c89f78bb424b801000089ea4489e9e800000000" +"4c89f78bb424a8000000ba30000000e800000000488b442410488b0048b9" +"3a8564153f6de5144a898c20e82d0000488b442410488b0048b96890dbe2" +"4ff0e4144a898c20e02d0000488b442410488b0048b92410887e8c1b0da2" +"4a898c20d82d0000488b442410488b0048b92c7e9b30660888504a898c20" +"d02d0000488b442410488b0048b9d5a585325322f32a4a898c20c82d0000" +"488b442410488b0048b9c3457586e4c90d894a898c20c02d00004c89f78b" +"b424b001000089da4889dd4489e9e8000000004c89f78b742450448b7c24" +"784489fab960000000e8000000004c89f78bb424d8000000488b9424f801" +"0000e8000000004c89f78bb424c0010000488b9424c0000000b930000000" +"e8000000004c89f78bb42420010000488b942400020000e8000000004c89" +"f74489fe488b9424c8010000b930000000e8000000004c89f7488b742430" +"488b942408020000e8000000004c89f789ee488b942460010000b9300000" +"00e8000000004c89f74489eeba30000000e800000000488b442410488b00" +"48b9418763546520f0184a898c20182e0000488b442410488b0048b9d250" +"d0836e7df9034a898c20102e0000488b442410488b0048b99ecbba01be0e" +"b68e4a898c20082e0000488b442410488b0048b9951b85d3af4270584a89" +"8c20002e0000488b442410488b0048b9d2a5cd1f4622ab5d4a898c20f82d" +"0000488b442410488b0048b971f07186e4c903cd4a898c20f02d00004c89" +"f78bb424980000004489fa4489e9e8000000004c89f78bb424a8000000ba" +"30000000e800000000488b442410488b0048b93a8564153f6de5144a898c" +"20e82d0000488b442410488b0048b96890dbe24ff0e4144a898c20e02d00" +"00488b442410488b0048b92410887e8c1b0da24a898c20d82d0000488b44" +"2410488b0048b92c7e9b30660888504a898c20d02d0000488b442410488b" +"0048b9d5a585325322f32a4a898c20c82d0000488b442410488b0048b9c3" +"457586e4c90d894a898c20c02d0000488b5c24104c89f78bb42458010000" +"89ea4489e9e8000000004c89f7448bbc24d00000004489fe8b9424c00100" +"00b960000000e800000000488b0348b9af7f8488daef0e114a898c20d82b" +"0000488b0348b989dea0e5cb13382e4a898c20d02b0000488b0348b9d0e8" +"a840ba9c1bc14a898c20c82b0000488b0348b994d39925d49548cf4a898c" +"20c02b0000488b0348b9ec7c49fc6ba042584a898c20b82b0000488b0348" +"b946d6e54cad6af6b24a898c20b02b0000488b0348b9eb66fbb00f22f208" +"4a898c20a82b0000488b0348b94dceaa5dea93e31c4a898c20a02b000048" +"8b0348b9ee29dcb2caae5ba34a898c20982b0000488b0348b98f2217d1cc" +"3ce8974a898c20902b0000488b0348b913830ab5925f69c64a898c20882b" +"0000488b0348b965d419b3529508074a898c20802b00004c89f7488b7424" +"70bac0000000e8000000004c89f7488bb424680100004489fa89e9e80000" +"00004c89f74489ee8b542450b920010000e8000000004c89f78bac24b000" +"000089ee4489ea448bbc24f4000000b940020000e8000000004c89f789ee" +"8b942440010000e8000000004c89f789ee488b542460e8000000004c89f7" +"4489fe89ea8b8c24a0000000e800000000488b038b8c244801000042888c" +"202034000083f9010f854d0300004c89f7488b5c244889de4489fab94002" +"0000e8000000004c89f78b6c243c89eee8000000004c89f789de89eae800" +"00000089c34c89f7488bb424e80000008b9424e8010000e80000000089c5" +"21dd488b442428488b4010488b88780100008b80d001000083c0f040886c" +"010f488b7c2428488bb424000100008b9424f0010000e80000000089c321" +"eb488b442428488b4010488b88780100008b80d001000083c0f0885c010f" +"488b7c2428488bb424c00000008b942430010000e80000000089c5488b7c" +"2428488bb424c80100008b942490010000e8000000004189c74121ef488b" +"6c2428488b4510488b88780100008b80d001000083c0f044887c010f4889" +"ef488bb424600100008b942410020000e8000000004421f84c8b7c241048" +"8b4d10488b91780100008b89d001000083c1f088440a0f21d8488b4d1048" +"8b91780100008b89d001000083c1f089c388440a0f498b07428bb420a812" +"0000428b9420ac1200004889efb920010000e800000000498b07428bb420" +"98120000428b94209c1200004889efb920010000e800000000498b07428b" +"b42088120000428b94208c1200004889efb920010000e800000000498b07" +"428bb42078120000428b94207c1200004889efb920010000e80000000048" +"89ef8bb424080300008b9424a0020000b920000000e800000000498b0742" +"8bb420400e0000428b9420440e00004889efb968000000e8000000004c8b" +"742440498b07428bb420a00a0000428b9420a40a00004889efb901000000" +"e800000000498b07428bb420880a0000428b94208c0a00004889efb90100" +"0000e800000000498b07428bb420b4090000428b9420b80900004889efb9" +"01000000e800000000498b07428bb4203c090000428b9420400900004889" +"efb901000000e800000000498b07428bb42064080000428b942068080000" +"4889efb901000000e800000000498b07428bb4208c070000428b94209007" +"00004889efb901000000e800000000498b07428bb42014070000428b9420" +"180700004889efb901000000e800000000498b07428bb4209c060000428b" +"9420a00600004889efb901000000e800000000be0d0000004c39b4243003" +"0000488bbc24200200000f837277ffffbe0e0000004c39b424280300000f" +"825f77ffff4489b7d001000089d8e95877ffff488b0342c7842078190000" +"000000004c89f7488b7424488b54243cb94c031000e800000000e91d77ff" +"ff66662e0f1f8400000000004157415653488b4710488b80780100004189" +"d24e8b041048b901000000ffffffff31db4939c80f92c34889df48f7df4e" +"8b4c10084e8d1c0f48bafd5bfeff02a4bd534531f64939d3410f97c64c01" +"cf49b902a40100fd5b42ac4a8d3c0f48f7d34c11f341bbffffffff4d01c3" +"48c1fb3f4e8b7410104901de49b8fb275ef6f727c6cc4f8d0c064883d3ff" +"49b804d8a10908d839334531ff4d39c6410f97c74901df49c1ff3f4e8b54" +"10184d01fa4983d7ff48bb477d9d2953a7ed734531f64939da410f97c64d" +"01fe4c21f148ffc24c21f249ffc04d21f04c01d989f648890c304811fa48" +"895430084c89c94c11c148ffc34c21f34d01c848894c301048bab88262d6" +"ac58128c498d14124811da4c39c14883d20048895430185b415e415fc390" +"488b4710488b88780100008b80d001000083c0f0408874010f400fb6c6c3" +"6690534889f8488b7f104c8b4030448b97d0010000458d5af0b90d000000" +"4d39d8730e4c8b48384d39d9730db90e00000089ce5be90000000044899f" +"d0010000488b9f780100006642c7441b0c0100488b9f780100004289541b" +"08488b97780100004289741a048b97d00100008d72f04939f073bc4939f1" +"730db90e00000089ce5be90000000089b7d00100004183c2f44c8b9f7801" +"00004b8b1c13458954330c4c8b977801000049895c32048bb7d001000083" +"c6f04939f00f8372ffffffb90e0000004939f10f8264ffffff89b7d00100" +"0083c2f4488b8f78010000448b0411468b5c0104468b4c010c4183fb0241" +"ba02000000450f42d34183fa0174144585d275144585c9750f4531c0ba01" +"000000eb2e4585c9741cc70431000000804889fb488b8f78010000895431" +"0cba06000000eb24468b0401428b1401468b44010444894431044889fb48" +"8b8f78010000891431ba070000004889c7e80000000031c94889df89ce5b" +"e9000000000f1f440000554157415641554154534883ec184189f5488b5f" +"104c8b47308babd0010000448d65d0be0d0000004d39e00f833201000048" +"8b47384c39e0730abe0e000000e91f010000488904244489a3d001000041" +"8d7530488954240883c2304989ffb9300000004c89442410e80000000045" +"8d75604c89ff4489e6ba30000000e800000000488b8378010000488b5424" +"0889d10fb6440860498b4f10488b89780100004989c049f7d84a8b742128" +"4c21c648ffc84c8b89880310004921c14909f14e894c31284a8b7421204c" +"21c64c8b89800310004921c14909f14e894c31204a8b7421184c21c64c8b" +"89780310004921c14909f14e894c31184a8b7421104c21c64c8b89700310" +"004921c14909f14e894c31104a8b7421084c21c64c8b89680310004921c1" +"4909f14e894c31084e230421482381600310004c09c04a8904314c89ff44" +"89eeb930000000e800000000be0d00000048396c2410730bbe0e00000048" +"392c2473164889df4883c4185b415c415d415e415f5de90000000089abd0" +"0100004883c4185b415c415d415e415f5dc3669055415741564155415453" +"4883ec1889d589f34989fe488b47104889442410b9f0031000e800000000" +"498b7e104d8b6630448bafd0010000458d7dd0be0d0000004d39fc735749" +"8b46384c39f87307be0e000000eb47488904244489bfd001000048897c24" +"084c89f74489feba30000000e8000000004c89f789ee4489fae800000000" +"be0d000000488b7c24084d39ec730bbe0e0000004c392c247340e8000000" +"00b001498b4e10488b91780100008b89d001000083c1f088440a0f488b4c" +"2410488b897801000089da884411304883c4185b415c415d415e415f5dc3" +"4489afd00100003401ebbc660f1f84000000000055415741564155415453" +"4881ec280100004889fd488b47104c8b4f304889c78b80d0010000448d98" +"50fbffff41b80d0000004d39d90f83822900004c8b45384d39d8730b41b8" +"0e000000e96e2900004c898424f00000004989f844899fd00100008db890" +"fdffff48890424498b80780100004d89c44189c84a8b1c0089d148894c24" +"284c898c24200100004c8b3c08488b4510488b90780100004489f94889d8" +"89c348895c242089b424e40000004989c94c0fafcb49c1ef204d89fa4c0f" +"afd348c1e82048894424304c899c24d80000004989cb4c0fafd831db4d01" +"d30f92c34d89da49c1e2204d89fe4c0faff048c1e32049c1eb204d01f34d" +"01ca4c89143a4911db4c895c3a08488b04248d90a0fdffff498bbc247801" +"00004e8b7407084489f74989f94c0fafc94989fa4d0fafd749c1ee204c89" +"7424184d89f34c0fafd931db4d01d30f92c34d89da4d0faff749c1eb204d" +"01f34c8b75104d8bb67801000049c1e22048c1e3204d01ca4d8914164911" +"db4d895c1608498b9424780100004c89e64a8b4402104189c44d89e14c0f" +"afc94d89e24d0fafd748c1e82048894424384889c2480fafd14531db4c01" +"d2410f92c34989c24d0fafd74889d348c1ea204c01d248c1e32049c1e320" +"4c01cb4c8b4d104d8b8978010000488b0424448d90b0fdffff4b891c114c" +"11da4b89541108488b96780100004a8b4402184189c24d89d14c0fafc94d" +"89d34d0fafdf48c1e82048894424104889c2480fafd131db4c01da0f92c3" +"4989c34d0fafdf4989d648c1ea204c01da49c1e62048c1e3204d01ce4c8b" +"4d104d8b8978010000488b0424448d98c0fdffff4f8934194811da4b8954" +"1908488b96780100004a8b4402204189c64d89f14c0fafc94c89f3490faf" +"df48c1e8204889c24889442408480fafd14531ed4801da410f92c54889c3" +"490fafdf4889d048c1ea204801da48c1e02049c1e5204c01c84c8b4d104d" +"8b8978010000488b1c248d9bd0fdffff498904194c11ea49895419084989" +"f3488b86780100004a8b74002889f24889d0480fafc14989d04d0fafc748" +"c1ee204889742440480fafce4531c94c01c1410f92c14c0faffe4989c848" +"c1e9204c01f949c1e02049c1e1204901c0488b4510488b8078010000488b" +"34248db6e0fdffff4c8904304c11c948894c3008498b83780100004c895c" +"24484c8b7c24284a8b44380889c14989c8488b5c24204c0fafc34989c94c" +"8b6c24304d0fafcd48c1e8204889c6480faff331db4c01ce0f92c34989c1" +"4d0fafcd4989f548c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d" +"8b80780100004c8b0c24458d89f0fdffff4f892c084811de4b8974080849" +"89c84c0fafc74989c94c8b6c24184d0fafcd4889c6480faff731db4c01ce" +"0f92c34989c14d0fafcd4989f548c1ee204c01ce49c1e52048c1e3204d01" +"c54c8b45104d8b80780100004c8b0c24458d8940feffff4f892c084811de" +"4b897408084989c84d0fafc44989c94c8b6c24384d0fafcd4889c6490faf" +"f431db4c01ce0f92c34989c14d0fafcd4989f548c1ee204c01ce49c1e520" +"48c1e3204d01c54c8b45104d8b80780100004c8b0c24458d8990feffff4f" +"892c084811de4b897408084989c84d0fafc24989c94c8b6c24104d0fafcd" +"4889c6490faff231db4c01ce0f92c34989c14d0fafcd4989f548c1ee204c" +"01ce49c1e52048c1e3204d01c54c8b45104d8b80780100004c8b0c24458d" +"89e0feffff4f892c084811de4b897408084989c84d0fafc64989c94c8b6c" +"24084d0fafcd4889c6490faff631db4c01ce0f92c34989c14d0fafcd4989" +"f548c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d8b8078010000" +"4c8b0c24458d8930ffffff4f892c084811de4b897408084989c84c0fafc2" +"488b5c2440480fafcb4889c6480faff24531c94801ce410f92c1480fafc3" +"4889f148c1ee204801c648c1e12049c1e1204c01c1488b4510488b807801" +"00004c8b0424458d40804a890c004c11ce4a89740008498b83780100004a" +"8b44381089c14989c84c8b5c24204d0fafc34989c94c8b7c24304d0fafcf" +"48c1e8204889c6490faff331db4c01ce0f92c34989c14d0fafcf4989f548" +"c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d8b80780100004c8b" +"0c24458d8900feffff4f892c084811de4b897408084989c84c0fafc74989" +"c94c8b5c24184d0fafcb4889c6480faff731db4c01ce0f92c34989c14d0f" +"afcb4989f548c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d8b80" +"780100004c8b0c24458d8950feffff4f892c084811de4b897408084989c8" +"4d0fafc44989c94c8b5c24384d0fafcb4889c6490faff431db4c01ce0f92" +"c34989c14d0fafcb4989f548c1ee204c01ce49c1e52048c1e3204d01c54c" +"8b45104d8b80780100004c8b0c24458d89a0feffff4f892c084811de4b89" +"7408084989c84d0fafc24989c94c8b5c24104d0fafcb4889c6490faff231" +"db4c01ce0f92c34989c14d0fafcb4989f548c1ee204c01ce49c1e52048c1" +"e3204d01c54c8b45104d8b80780100004c8b0c24458d89f0feffff4f892c" +"084811de4b897408084989c84d0fafc64989c94c8b5c24084d0fafcb4889" +"c6490faff631db4c01ce0f92c34989c14d0fafcb4989f548c1ee204c01ce" +"49c1e52048c1e3204d01c54c8b45104d8b80780100004c8b0c24458d8940" +"ffffff4f892c084811de4b897408084989c84c0fafc24c8b5c2440490faf" +"cb4889c6480faff24531c94801ce410f92c1490fafc34889f148c1ee2048" +"01c648c1e12049c1e1204c01c1488b4510488b80780100004c8b0424458d" +"40904a890c004c11ce4a897400084c8b7c2448498b87780100004c8b5c24" +"284a8b44181889c14989c8488b5c24204c0fafc34989c94c8b6c24304d0f" +"afcd48c1e8204889c6480faff331db4c01ce0f92c34989c14d0fafcd4989" +"f548c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d8b8078010000" +"4c8b0c24458d8910feffff4f892c084811de4b897408084989c84c0fafc7" +"4989c94c8b6c24184d0fafcd4889c6480faff731db4c01ce0f92c34989c1" +"4d0fafcd4989f548c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d" +"8b80780100004c8b0c24458d8960feffff4f892c084811de4b8974080849" +"89c84d0fafc44989c94c8b6c24384d0fafcd4889c6490faff431db4c01ce" +"0f92c34989c14d0fafcd4989f548c1ee204c01ce49c1e52048c1e3204d01" +"c54c8b45104d8b80780100004c8b0c24458d89b0feffff4f892c084811de" +"4b897408084989c84d0fafc24989c94c8b6c24104d0fafcd4889c6490faf" +"f231db4c01ce0f92c34989c14d0fafcd4989f548c1ee204c01ce49c1e520" +"48c1e3204d01c54c8b45104d8b80780100004c8b0c24458d8900ffffff4f" +"892c084811de4b897408084989c84d0fafc64989c94c8b6c24084d0fafcd" +"4889c6490faff631db4c01ce0f92c34989c14d0fafcd4989f548c1ee204c" +"01ce49c1e52048c1e3204d01c54c8b45104d8b80780100004c8b0c24458d" +"8950ffffff4f892c084811de4b897408084989c84c0fafc2488b5c244048" +"0fafcb4889c6480faff24531c94801ce410f92c1480fafc34889f148c1ee" +"204801c648c1e12049c1e1204c01c1488b4510488b80780100004c8b0424" +"458d40a04a890c004c11ce4a89740008498b87780100004a8b44182089c1" +"4989c84c8b5c24204d0fafc34989c94c8b7c24304d0fafcf48c1e8204889" +"c6490faff331db4c01ce0f92c34989c14d0fafcf4989f548c1ee204c01ce" +"49c1e52048c1e3204d01c54c8b45104d8b80780100004c8b0c24458d8920" +"feffff4f892c084811de4b897408084989c84c0fafc74989c94c8b5c2418" +"4d0fafcb4889c6480faff731db4c01ce0f92c34989c14d0fafcb4989f548" +"c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d8b80780100004c8b" +"0c24458d8970feffff4f892c084811de4b897408084989c84d0fafc44989" +"c94c8b5c24384d0fafcb4889c6490faff431db4c01ce0f92c34989c14d0f" +"afcb4989f548c1ee204c01ce49c1e52048c1e3204d01c54c8b45104d8b80" +"780100004c8b0c24458d89c0feffff4f892c084811de4b897408084989c8" +"4d0fafc24989c94c8b7c24104d0fafcf4889c6490faff231db4c01ce0f92" +"c34989c14d0fafcf4989f548c1ee204c01ce49c1e52048c1e3204d01c54c" +"8b45104d8b80780100004c8b0c24458d8910ffffff4f892c084811de4b89" +"7408084989c84d0fafc64989c94c8b5c24084d0fafcb4889c6490faff631" +"db4c01ce0f92c34989c14d0fafcb4989f548c1ee204c01ce49c1e52048c1" +"e3204d01c54c8b45104d8b80780100004c8b0c24458d8960ffffff4f892c" +"084811de4b897408084989c84c0fafc2488b5c2440480fafcb4889c6480f" +"aff24531c94801ce410f92c1480fafc34889f148c1ee204801c648c1e120" +"49c1e1204c01c1488b4510488b80780100004c8b0424458d40b04a890c00" +"4c11ce4a89740008488b442448488b8078010000488b4c2428488b440828" +"89c14889ce488b5c2420480faff34989c84c8b6c24304d0fafc548c1e820" +"480fafd84531c94c01c3410f92c14c0fafe84989d848c1eb204c01eb4989" +"dd49c1e02049c1e1204901f0488b7510488bb678010000488b1c248d9b30" +"feffff4c89041e4d11cd4c896c1e084889ce480faff74989c8488b5c2418" +"4c0fafc3480faff84531c94c01c7410f92c1480fafd84989f848c1ef2048" +"01df49c1e02049c1e1204901f0488b7510488bb678010000488b1c248d9b" +"80feffff4c89041e4c11cf48897c1e08488b342481c6d0feffff4889cf49" +"0faffc4989c8488b5c24384c0fafc34c0fafe04531c94d01c4410f92c14d" +"89e0480fafd849c1ec204901dc488b5d10488b9b7801000049c1e02049c1" +"e1204901f84c8904334d11cc4c89643308488b342481c620ffffff488b7d" +"10488bbf780100004989c84d0fafc24989c94d0fafcf4c0fafd031db4d01" +"ca0f92c34d89d149c1e1204c0faff848c1e32049c1ea204d01fa4d01c14c" +"890c374911da4c89543708488b342481c670ffffff488b7d10488bbf7801" +"00004989c84d0fafc64989c94d0fafcb4c0faff04531d24d01ce410f92c2" +"4d89f149c1e1204c0fafd849c1e22049c1ee204d01de4d01c14c890c374d" +"11d64c89743708488b342483c6c0488b7d10488bbf780100004989c84c0f" +"afc24c8b542440490fafca480fafd04531c94801ca410f92c14889d148c1" +"e120490fafc249c1e12048c1ea204801c24c01c148890c374c11ca488954" +"3708488b04248db080fdffff4c8b7c2448498b8778010000488b8c24d800" +"00004c8ba4084002000048bafdfffcfffcfff3894c89e1480fafca488b55" +"10488bba7801000089ca49be00000000010000004d8daeabaaffff4989d0" +"4d0fafc5498d86fffffeb94989d14c0fafc8488944243848c1e9204989ca" +"4d0fafd54531db4d01ca410f92c34d89d149c1e1204889cb480fafd849c1" +"e32049c1ea204901da4d01c14c890c374d11da4c89543708488b342481c6" +"70fdffff488b7d10488bbf780100004d8d9effff53b14c895c24184989d0" +"4d0fafc34c69cafeffab1e4989ca4d0fafd34d01ca4d89d149c1e1204c69" +"d9feffab1e49c1ea204d01c14c890c374d11da4c895437084d8d8e24f6b0" +"f64c894c24204889d6490faff14869faa0d230674989c84d0fafc14531c9" +"4901f8410f92c14c89c74c69d1a0d2306749c1e8204d01d04c8b14244181" +"c200fdffff48c1e72049c1e1204801f7488b7510488bb6780100004a893c" +"164d11c84e894416084981c6bf1285f34c897424304889d6490faff64869" +"fa844b77644989c84d0fafc64531c94901f8410f92c14c89c74c69d1844b" +"776449c1e8204d01d04c8b14244181c290fcffff48c1e72049c1e1204801" +"f7488b7510488bb6780100004a893c164d11c84e89441608488b342481c6" +"20fcffff4869fad7ac4b434c69c2b6a71b4b4c69c9d7ac4b434d01c14d89" +"c849c1e0204c69d1b6a71b4b49c1e9204901f8488b7d10488bbf78010000" +"4c8904374d11d14c894c3708488b342481c6b0fbffff488b7d10488bbf78" +"0100004c69c29ae67f394869d2ea11011a4c69c99ae67f394901d14c89ca" +"48c1e2204869c9ea11011a49c1e9204c01c2488914374911c94c894c3708" +"488b0c2481c188fdffff498b97780100004c8b040a4c8b9424d80000004e" +"03a412300200004983d0004e8bb412200200004f8d0c30488b04240598fd" +"ffff488b3c024a8bb41250020000488d0c374a8b8412a002000048894424" +"104801c131c04c01c90f92c048894424084989cc48bafdfffcfffcfff389" +"4c0fafe24589e34d89d94c896c24404d0fafcd4c89da488b442438480faf" +"d049c1ec204d89e74d0faffd4531d24901d7410f92c24c89e3480fafd84c" +"89fa49c1ef204901df48c1e22049c1e2204c01ca4d11d74c8b4d104d8b89" +"780100004c8b14244181c260fdffff4b8914114f897c11084c89e2488b44" +"2418480fafd04d69cbfeffab1e4c01ca4d89d94c0fafc84989d249c1e220" +"48c1ea204969dcfeffab1e4d01ca4811da4c8b4d104d8b8978010000488b" +"1c2481c350fdffff4d89141949895419084c89da488b442420480fafd04d" +"89e14c0fafc84d69d3a0d2306731db4d01d10f92c34d89ca49c1e9204d69" +"fca0d230674d01f949c1e22048c1e3204901d24911d9488b5510488b9278" +"010000488b1c2481c340fdffff4c89141a4c894c1a084c89da488b442430" +"480fafd04d89e14c0fafc84d69d3844b776431db4d01d10f92c34d89ca49" +"c1e9204d69fc844b77644d01f949c1e22048c1e3204901d24911d9488b55" +"10488b9278010000488b1c2481c330fdffff4c89141a4c894c1a084969d3" +"b6a71b4b4d69ccd7ac4b434901d14c89ca48c1e22049c1e9204d69d3d7ac" +"4b434969dcb6a71b4b4c01d24911d94c8b55104d8b9278010000488b1c24" +"81c320fdffff4989141a4d894c1a084969d3ea11011a4d69cc9ae67f3949" +"01d14969d39ae67f394d89ca49c1e2204d69dcea11011a49c1e9204901d2" +"4d11d9488b5510488b92780100004c8b1c244181c310fdffff4e89141a4e" +"894c1a08488b142481c278fdffff4d01f04c8b4424484d8b88780100004c" +"8b6c24084d132c11488b142481c2a8fdffff4801fe498b3c114883d70048" +"8b142481c2f8fdffff48037424104c8ba424d80000004f8b842160020000" +"4c894424704b8bb421f00200004889742478498b04114883d0004901f849" +"01f031d24901c00f92c248895424084b8b8421b00100004889442468498d" +"5405004b8b8421b002000048894424104c01c031f64801c2400f92c64889" +"7424284b038c2110020000488b04248d8068fdffff4d8b34014b8b842100" +"0200004889442460488d040248894424584911c64c89f648b8fdfffcfffc" +"fff389480faff04189f34d89d94c8b5424404d0fafca4c89d8488b4c2438" +"480fafc148c1ee204989f74d0faffa4531d24901c7410f92c24889f3480f" +"afd94c89f849c1ef204901df48c1e02049c1e2204c01c84d11d74c8b4d10" +"4d8b89780100004c8b14244181c2f0fcffff4b8904114f897c11084889f0" +"488b4c2418480fafc14d69cbfeffab1e4c01c84d89d94c0fafc94989c249" +"c1e22048c1e8204869defeffab1e4d01ca4811d84c8b4d104d8b89780100" +"00488b1c2481c3e0fcffff4d89141949894419084c89d8488b4c2420480f" +"afc14989f14c0fafc94d69d3a0d2306731db4d01d10f92c34d89ca49c1e9" +"204c69fea0d230674d01f949c1e22048c1e3204901c24911d9488b451048" +"8b8078010000488b1c2481c3d0fcffff4c8914184c894c18084c89d8488b" +"4c2430480fafc14989f14c0fafc94d69d3844b776431db4d01d10f92c34d" +"89ca49c1e9204c69fe844b77644d01f949c1e22048c1e3204901c24911d9" +"488b4510488b8078010000488b1c2481c3c0fcffff4c8914184c894c1808" +"4969c3b6a71b4b4c69ced7ac4b434901c14c89c848c1e02049c1e9204d69" +"d3d7ac4b434869deb6a71b4b4c01d04911d94c8b55104d8b927801000048" +"8b1c2481c3b0fcffff4989041a4d894c1a084969c3ea11011a4c69ce9ae6" +"7f394901c14969c39ae67f394d89ca49c1e2204869f6ea11011a49c1e920" +"4901c24911f1488b4510488b8078010000488b342481c6a0fcffff4c8914" +"304c894c300831f64c3b742458400f92c64803542460488b04248d8058fd" +"ffff488b5424484c8b9278010000491334024c036c2468488b04248d8008" +"fdffff488b4c242849130c0248894c242848037c2470488b04248d80b8fd" +"ffff4d8b1c024983d30048037c2478488b04248d8048feffff4c8b4c2408" +"4d130c024c03442410488b04248d8008feffff4b8bbc22700200004889bc" +"2498000000498b14024883d2004b8b84224003000048894424584d8d2c3b" +"4901c531c04d01cd0f92c048894424604b8b84220003000048894424704c" +"01e831ff4801c2400f92c748897c24104b8b842240010000488984248800" +"00004801c84b8b8c22c002000048894c2478488d3c0a31c94801f80f92c1" +"48894c24084b8b8c22f001000048898c2480000000488d3c0e31c94801f8" +"0f92c148894c24504f03b422a0010000488b0c248d89f8fcffff4d8b0c0a" +"4b8b8c22900100004983d100488d3c084531c04901f94c894c2468410f92" +"c04c898424900000004d89c848bffdfffcfffcfff3894c0fafc74589c74d" +"89f9488b5c24404c0fafcb4d89fa4c8b7424384d0fafd649c1e8204c89c7" +"480faffb31db4c01d70f92c34d89c24d0fafd64989fe48c1ef204c01d749" +"c1e62048c1e3204d01ce4811df4c8b4d104d8b89780100004c8b14244181" +"c280fcffff4f8934114b897c11084c89c74c8b542418490faffa4d69cffe" +"ffab1e4c01cf4d89f94d0fafca4989fa49c1e22048c1ef204969d8feffab" +"1e4d01ca4811df4c8b4d104d8b8978010000488b1c2481c370fcffff4d89" +"141949897c19084c89ff4c8b542420490faffa4d89c14d0fafca4d69d7a0" +"d2306731db4d01d10f92c34d89ca49c1e9204d69f0a0d230674d01f149c1" +"e22048c1e3204901fa4911d9488b7d10488bbf78010000488b1c2481c360" +"fcffff4c89141f4c894c1f084c89ff4c8b542430490faffa4d89c14d0faf" +"ca4d69d7844b776431db4d01d10f92c34d89ca49c1e9204d69f0844b7764" +"4d01f149c1e22048c1e3204901fa4911d9488b7d10488bbf78010000488b" +"1c2481c350fcffff4c89141f4c894c1f084969ffb6a71b4b4d69c8d7ac4b" +"434901f94c89cf48c1e72049c1e9204d69d7d7ac4b434969d8b6a71b4b4c" +"01d74911d94c8b55104d8b9278010000488b1c2481c340fcffff49893c1a" +"4d894c1a084969ffea11011a4d69c89ae67f394901f94969ff9ae67f394d" +"89ca49c1e2204d69c0ea11011a49c1e9204901fa4d11c1488b7d10488bbf" +"780100004c8b04244181c030fcffff4e8914074e894c07084801c8488b04" +"248d80e8fcffff488b4c2448488bb978010000488b9c249000000048131c" +"0748899c24900000004803b42480000000488b04248d8048fdffff4c8b54" +"24504c1314074c89542450488b4424284803842488000000488b04248d80" +"98fcffff4c8b4c24084c130c074c894c24084c039c2498000000488b0424" +"8d80c8fdffff4c8b34074983d6004c035c2458488b04248d8098feffff48" +"8b4c246048130c074c036c2470488b04248d8058feffff4c8b4424104c13" +"04074803542478488b04248d8018feffff488b34074883d6004a8b942780" +"02000048899424b80000004a8b84279003000048898424c00000004c01f2" +"4801c231c04801ca0f92c048898424c80000004a8b842750030000488984" +"24d00000004801d031c94901c04c894424100f92c148894c24704a8b8427" +"1003000048898424800000004c01c031c94801c60f92c148894c24784a8b" +"8427d000000048898424b0000000498d0c014a8b8427d002000048894424" +"284c8d040631c04c01c10f92c048898424980000004a8b8427e001000048" +"898424a80000004d8d040231c04c01c10f92c048894424584a8b84278001" +"000048898424a00000004c8d040331c04c01c10f92c04889442460488b44" +"24684a038427300100004c8b0424458d8088fcffff4e8b0c074e8b842720" +"0100004983d1004a8d3c0131c04901f94c898c24880000000f92c0488944" +"24684c89cf49b9fdfffcfffcfff389490faff94189ff4d89f9488b5c2440" +"4c0fafcb4d89fa488b4424384c0fafd048c1ef204989fb4c0fafdb31db4d" +"01d30f92c34989fd4c0fafe84d89da49c1eb204d01eb49c1e22048c1e320" +"4d01ca4911db4c8b4d104d8b8978010000488b1c2481c310fcffff4d8914" +"194d895c19084989f9488b4424184c0fafc84d69d7feffab1e4d01d14d89" +"fa4c0fafd04d89cb49c1e32049c1e9204869dffeffab1e4d01d34911d94c" +"8b55104d8b9278010000488b1c2481c300fcffff4d891c1a4d894c1a084d" +"89f9488b4424204c0fafc84989fa4c0fafd04d69dfa0d2306731db4d01da" +"0f92c34d89d349c1ea204c69efa0d230674d01ea49c1e32048c1e3204d01" +"cb4911da4c8b4d104d8b8978010000488b1c2481c3f0fbffff4d891c194d" +"895419084d89f9488b4424304c0fafc84989fa4c0fafd04d69df844b7764" +"31db4d01da0f92c34d89d349c1ea204c69ef844b77644d01ea49c1e32048" +"c1e3204d01cb4911da4c8b4d104d8b8978010000488b1c2481c3e0fbffff" +"4d891c194d895419084d69cfb6a71b4b4c69d7d7ac4b434d01ca4d89d149" +"c1e12049c1ea204d69dfd7ac4b434869dfb6a71b4b4d01d94911da4c8b5d" +"104889ac24e80000004d8b9b78010000488b1c2481c3d0fbffff4d890c1b" +"4d89541b084d69cfea11011a4c69d79ae67f394d01ca4d69cf9ae67f394d" +"89d349c1e3204869ffea11011a49c1ea204d01cb4911fa488b7d10488bbf" +"780100004c8b0c244181c1c0fbffff4e891c0f4e89540f084c01c1488b04" +"248d8078fcffff488b4c24484c8b9978010000488b6c246849132c034889" +"6c2468488b84249000000048038424a0000000488b04248d80d8fcffff4c" +"8b5424604d1314034c89542460488b44245048038424a8000000488b0424" +"8d8038fdffff488b5c245849131c0348895c2458488b44240848038424b0" +"000000488b04248d8028fcffff488bbc249800000049133c034889bc2498" +"0000004c03b424b8000000488b04248d80d8fdffff4d8b04034983d0004c" +"03b424c0000000488b04248d80e8feffff4c8bbc24c80000004d133c0348" +"039424d0000000488b04248d80a8feffff4c8b7424704d133403488b4424" +"104803842480000000488b04248d8068feffff488b542478491314034803" +"742428488b04248d8028feffff498b34034883d6004d89e14b8b84239002" +"000048898424f80000004f8ba423e0030000498d0c004c01e14531ed4c01" +"f9410f92c54b8b840ba003000048898424000100004801c84531ff4901c6" +"4c89742470410f92c74c89bc24080100004b8b840b600300004889842410" +"0100004c01f04531f64801c24889542478410f92c64c89b424180100004b" +"8b840b2003000048898424a00000004801d031d24801c60f92c248899424" +"a80000004b8b440b6048898424b80000004c8d3c074b8b840be002000048" +"898424b0000000488d3c0631c04901ff0f92c048894424504b8b840bd001" +"000048898424c0000000488d3c0331c04901ff0f92c048898424c8000000" +"4b8b840b7001000048898424d0000000498d3c0231c04901ff0f92c04889" +"4424284b8b840b1001000048898424800000004c89ca488d3c2831c04901" +"ff0f92c04889442408488b8424880000004b03840bc0000000488b3c248d" +"bf18fcffff4d8b0c3b498b8413b000000048898424880000004983d10049" +"8d3c0731c04901f94c898c24900000000f92c0488944241049befdfffcff" +"fcfff3894d0faff14489f74989f9488b5c24404c0fafcb4989fa488b6c24" +"384c0fafd549c1ee20490fafde4531db4c01d3410f92c3490fafee4989da" +"48c1eb204801eb49c1e22049c1e3204d01ca4c11db488b8424e80000004c" +"8b48104d8b89780100004c8b1c244181c3a0fbffff4f8914194b895c1908" +"4989f9488b5c24184c0fafcb490fafde4c69d7feffab1e4c01d34989da49" +"c1e22048c1eb204d69defeffab1e4d01ca4c11db4c8b48104d8b89780100" +"004c8b1c244181c390fbffff4f8914194b895c19084989f9488b6c24204c" +"0fafcd490fafee4c69d7a0d230674531db4c01d5410f92c34989ea48c1ed" +"204969dea0d230674801dd49c1e22049c1e3204d01ca4c11dd4c8b48104d" +"8b89780100004c8b1c244181c380fbffff4f8914194b896c19084989f948" +"8b6c24304c0fafcd490fafee4c69d7844b77644531db4c01d5410f92c349" +"89ea48c1ed204969de844b77644801dd49c1e22049c1e3204d01ca4c11dd" +"4c8b48104d8b89780100004c8b1c244181c370fbffff4f8914194b896c19" +"084c69cfb6a71b4b4d69d6d7ac4b434d01ca4d89d149c1e12049c1ea204c" +"69dfd7ac4b434969deb6a71b4b4d01d94911da4c8b58104d8b9b78010000" +"488b1c2481c360fbffff4d890c1b4d89541b084c69cfea11011a4d69d69a" +"e67f394d01ca4869ff9ae67f394d89d149c1e1204d69deea11011a49c1ea" +"204901f94d11da488b7810488bbf780100004889d54c890c174c89541708" +"4c038424f8000000488b14248dbae8fdffff488b442448488b9078010000" +"488b3c3a4883d7004d01e04c8b0424458d8038ffffff4e132c0248038c24" +"00010000488b0c248d89f8feffff4c8b9c24080100004c131c0a488b4424" +"704803842410010000488b0c248d89b8feffff4c8b8c24180100004c130c" +"0a488b44247848038424a0000000488b0c248d8978feffff4c8b9424a800" +"00004c13140a4803b424b0000000488b0c248d8938feffff488b0c0a4883" +"d100488b84249800000048038424b8000000488b34248db6b8fbffff488b" +"5c245048131c3248895c2450488b44245848038424c0000000488b34248d" +"b628fdffff4c8ba424c80000004c132432488b44246048038424d0000000" +"488b34248db6c8fcffff488b442428481304324889442428488b44246848" +"03842480000000488b34248db668fcffff488b4424084813043248894424" +"084c03bc2488000000488b04248d8008fcffff488b742410481334024889" +"7424104531c04803bc2a30040000410f92c04c01ef488b04248d40884c13" +"040231f64803bc2af0030000400f92c64c01df488b04248d8048ffffff48" +"13340231c04803bc2ab00300000f92c04c01cf4c8b0c24458d8908ffffff" +"4a13040a4531f64803bc2a70030000410f92c64531db4c03842a40040000" +"410f92c34901f0488b34248d76984c131c324c01d7488b34248db6c8feff" +"ff4c1334324531c94803bc2a30030000410f92c14531d24c03842a000400" +"00410f92c24901c0488b04248d8058ffffff4c1314024801cf488b04248d" +"8088feffff4c130c024c8d3c3b31c04c03bc2ac00100000f92c04989c531" +"c94c03842ac00300000f92c131f64c039c2a50040000400f92c64d01d348" +"8b04248d40a8481334024d01f0488b04248d8018ffffff48130c024d01e7" +"488b04248d8018fdffff4c132c024c896c24204531f64c03842a80030000" +"410f92c64889d84801f84d89ca4d11c24531e44c03bc2a60010000410f92" +"c44d01ea4531ed4c03942a50010000410f92c54c037c2428488b04248d80" +"b8fcffff4c13240231db4c039c2a100400000f92c34901cb488b04248d80" +"68ffffff48131c0231c04c039c2ad00300000f92c04d01c8488b0c248d89" +"d8feffff4c13340a4d01d4488b0c248d89a8fcffff4c132c0a31c94803b4" +"2a600400000f92c14801de4c8b0c24458d49b84a130c0a4d01de4c8b0c24" +"458d8928ffffff4a13040a48037c24504c134424204d11ee400f92c74531" +"ed4c03bc2a000100004c8b0424458d8058fcffff410f92c54531db4c03a4" +"2af0000000410f92c34c037c24084e132c024531c04c03b42ae00000004c" +"8b0c24458d8938fcffff410f92c04d01e54c8b1424458d9248fcffff4e13" +"1c124531e44803b42a20040000410f92c44d01f34c8b1424458d9278ffff" +"ff4e13040a4801c64e1324124080c7ff4c11c60f92c0488b3c24448db7c8" +"fbffff4531d24c03bc2aa0000000488b3c24448d87f8fbffff410f92c231" +"ff4c03ac2a90000000400f92c74c037c24104c897c24184e1314024531c0" +"4c039c2a800000004c8b0c24418d99d8fbffff410f92c04d01ea4c8b0c24" +"458d89e8fbffff4a133c0a4531c94803742a70410f92c14c01df4c8b1c24" +"458dbb58fbffff4c13041a4531db48038c2a70040000410f92c34901f04e" +"130c324c01e14e131c3a04ff4c11c90f924424204531e4488b5c24184803" +"5c2a40410f92c4488b042405a8fbffff488b0402488bb424900000004803" +"742a504883d0004531c94c03542a30410f92c14531f648030c2a410f92c6" +"4531ff4c03442a10410f92c74531ed48037c2a20410f92c54801d8488b34" +"248db668fbffff488b34324889742418488b1c248d9b78fbffff488b341a" +"4889742430488b1c248d9b88fbffff488b341a4889842a80040000488b04" +"248d9098fbffff488b5c2448488b83780100004c1324104d01d44c89a428" +"880400004911f14901f9488b83780100004c898c28900400004c136c2430" +"4d01c54c137c2418488b83780100004c89ac2898040000498d040f488b93" +"780100004889842aa0040000488b042483c0c880442420ff488b93780100" +"004c131c024901cf4d11de4c89b42aa8040000488b04248d50d0488bbc24" +"e80000008bb424e4000000e800000000488b042441b80d0000004889df48" +"39842420010000731041b80e00000048398424f000000073194489c64881" +"c4280100005b415c415d415e415f5de9000000008987d00100004881c428" +"0100005b415c415d415e415f5dc36690415741565389f34989fe4c8b7f10" +"ba30000000e800000000498b4610488b88780100008b80d001000083c0f0" +"c644010f018d73304c89f7ba60031000b930000000e800000000498b8778" +"01000089d9c6440860015b415e415fc3660f1f4400005541574156415541" +"54535089f54889fb488b7f104c8b6330448bbfd0010000458d77d0be0d00" +"00004d39f473504c8b6b384d39f57307be0e000000eb404489b7d0010000" +"48893c244889df4489f6ba30000000e8000000004889df89ee4489f2e800" +"000000be0d000000488b3c244d39fc730abe0e0000004d39fd7316e80000" +"000031c04883c4085b415c415d415e415f5dc34489bfd0010000ebe80f1f" +"40004157415641554154534c8b4f104d8bb978010000410fb6c04989c249" +"f7da4189d04189cb4c8d70ff4b8b5c07284c21f34f8b641f284d21d44909" +"dc89f34d89641f284f8b6407204d21f44f8b6c1f204d21d54d09e54d896c" +"1f204f8b6407184d21f44f8b6c1f184d21d54d09e54d896c1f184f8b6407" +"104d21f44f8b6c1f104d21d54d09e54d896c1f104f8b6407084d21f44f8b" +"6c1f084d21d54d09e54d896c1f084f8b24074d21f44f8b2c1f4d21d54d09" +"e54d892c1f83c63083c23083c130488b7f10488bbf780100004c8b7c1728" +"4d21f74c8b640f284d21d44d09fc4c896437284c8b7c17204d21f74c8b64" +"0f204d21d44d09fc4c896437204c8b7c17184d21f74c8b640f184d21d44d" +"09fc4c896437184c8b7c17104d21f74c8b640f104d21d44d09fc4c896437" +"104c8b7c17084d21f74c8b640f084d21d44d09fc4c896437084c2334174c" +"23140f4d09f24c891437498b8978010000420fb6540160420fb674196040" +"30d6f6d84020f030d0884419605b415c415d415e415fc30f1f0055415741" +"5641554154534881ec380100004189f04c8b6710488b4f30418b9c24d001" +"00008dab40f4ffffbe0d0000004839e90f83d00400004989fe488b4738be" +"0e0000004839e80f82bb0400004c8984243001000048898c242001000048" +"898424180100004189ac24d0010000498b84247801000089d10fb68408c0" +"00000088442413440fb6c0498b4610488b88780100008b80d001000083c0" +"f0c644010f00498b842478010000c684288801000000498b842478010000" +"48b9f21bde63a1c22b0b48898c2880010000498b84247801000048b9edca" +"3ca4505817e748898c2878010000498b84247801000048b93aa33dc94e5c" +"497948898c2870010000498b84247801000048b9a0ebe43b6aacad864889" +"8c2868010000498b84247801000048b9dc61142b0a27aa1848898c286001" +"0000498b84247801000048b95db064df92fcc0ad48898c2858010000498b" +"84247801000048b9e5da807e8efd830048898c2850010000498b84247801" +"000048b9a225eff075a9d30748898c2848010000498b84247801000048b9" +"5f490d6ee9b5efbb48898c2840010000498b84247801000048b95a630aaa" +"6c85e6e748898c2838010000498b84247801000048b95a9c365e1ffa7c59" +"48898c2830010000498b84247801000048b94a4c4960f80a734c48898c28" +"28010000498b84247801000048b9f3ed6073092a921148898c2820010000" +"498b84247801000048b9478515f20eedb6c248898c2818010000498b8424" +"7801000048b967b34185ccb61a1b48898c2810010000498b842478010000" +"48b9067886e2187eb13b48898c2808010000498b84247801000048b9c360" +"cdbc9dc5a0aa48898c2800010000498b84247801000048b906f6239e75c0" +"a9a548898c28f8000000498b84247801000048b9d7bc5043929181054889" +"8c28f0000000498b84247801000048b96b36631863b7676f48898c28e800" +"0000498b84247801000048b9e9ae3c1a9d99949848898c28e0000000498b" +"84247801000048b980e52a3eb593a8a148898c28d8000000498b84247801" +"000048b91a96b48726fbf5b348898c05d0000000498b84247801000048b9" +"100a9402a28ff2f548898c05c80000008d8b08f5ffff4c89f789ee894c24" +"0ce80000000048899c24280100008db300f7ffff4c89f78974243489eae8" +"00000000498b7e104d8b7e308b9fd0010000448d6bf0be0d0000004d39ef" +"0f83e6000000498b46384c39e8730abe0e000000e9d30000004889442428" +"4489afd00100004c89a424b0000000448d63f84889ac24a8000000498b6e" +"104889bc24a00000004c89f7be804c0000e800000000be0d000000488bbc" +"24a0000000488b8d7801000042c7442104804c0000488b8d78010000488b" +"ac24a8000000428904214c8ba424b0000000488b8778010000428b4c2808" +"31d285c90f94c2448b44240c41ba804c0000440f45d1b90800000041b944" +"000000440f44c94689540008488b877801000046894c0004488b87780100" +"00428914004939df7310be0e00000048395c24280f83cb000000e8000000" +"00498b8424780100008b9c28cc00000083bc28c8000000010f85cc000000" +"498b7e10b80000000085db757a8bb7d00100008d4ee0b80d00000049394e" +"307366b80e00000049394e38725b898fd0010000488b8778010000c74408" +"1800000000488b8778010000c744080c01000000488b8778010000c74408" +"08d0021000488b877801000048c74408100400000083c6e84889fb4c89f7" +"ba08061000e8000000004889df31c089c6e80000000031f64c89e74881c4" +"380100005b415c415d415e415f5de900000000899fd0010000498b842478" +"0100008b9c28cc00000083bc28c8000000010f8434ffffff448bbc28d000" +"00004c89f78b74240c8b542434b920010000e8000000004989ed488bac24" +"280100008db528f6ffff4c89f789b4249c0000004489eab9c8000000e800" +"000000498b84247801000041c78405b802000000000000498b8424780100" +"004689bc28b40200004c89a424b0000000498b8424780100004c89ac24a8" +"00000042899c28b00200008d85c0f7ffff898424140100008d8560f7ffff" +"898424100100008d8568f5ffff898424980000008d8588f6ffff89842494" +"0000008d85c8f5ffff894424248d85f0f6ffff894424548d8520f8ffff89" +"4424508d8580f8ffff898424900000008d85e0f8ffff8984248c0000008d" +"45a0894424188d45d0894424288d85b8f6ffff898424880000008d85f8f5" +"ffff8944244c8d8540ffffff894424148d85e0feffff894424208d8510ff" +"ffff894424488d8570ffffff8944241c8d85b0f8ffff898424840000008d" +"8550f8ffff898424800000008d8540f9ffff8944247c8d85a0f9ffff8944" +"24788d85d0f9ffff894424748d8510f9ffff8984240c0100008d8538f5ff" +"ff894424448d8500faffff894424708d8560faffff898424080100008d85" +"90faffff898424040100008d8530faffff8944246c8d85c0faffff894424" +"688d85f0faffff898424000100008d8520fbffff894424408d8570f9ffff" +"898424fc0000008d8598f5ffff894424648d8580fbffff8944243c8d85b0" +"fbffff898424f80000008d85e0fbffff894424608d8540fcffff89442438" +"8d8550fbffff898424f40000008d8570fcffff8944245c8d85a0fcffff89" +"4424588d85d0fcffff898424f00000008d8500fdffff898424ec0000008d" +"8560fdffff898424e80000008d85c0fdffff898424e40000008d85f0fdff" +"ff898424e00000008d8590fdffff898424dc0000008d8530fdffff898424" +"d80000008d8520feffff898424d40000008d8550feffff898424d0000000" +"8d8580feffff898424cc0000008d85b0feffff898424c80000008d8510fc" +"ffff898424c40000008d8530f7ffff898424c00000008d8590f7ffff8984" +"24bc0000004531ffb83f00000048898424a000000048bb00800000008000" +"69eb160f1f800000000048838424a0000000ff0f83d70500004489f8488b" +"8c24a0000000c462f3f7fba80174dd4c89f78b74240ce8000000004489f8" +"41bf01000000a80174c44c89f78b5c245089de448b7c24244489fae80000" +"00004c89f78bac249000000089ee448bac24940000004489eae800000000" +"4c89f78bb4248c00000089da8b8c249c000000e8000000004c89f78b5c24" +"1889de4489ea4489f9e8000000004c89f78b7424288b9424880000008b4c" +"244ce8000000004c89f7448b6424144489e689dae8000000004c89f7448b" +"6c24204489ee4489e289e9e8000000004c89f78b6c244889ee448b7c241c" +"4489fa8b8c2484000000e8000000004c89f74489e64489ea8b5c245089d9" +"e8000000004c89f74489fe89ea8b8c2480000000e8000000004c89f78b74" +"247c4489e289d9e8000000004c89f7448b6c24784489ee8b94248c000000" +"8b4c240ce8000000004c89f78b7424748b94240c0100008b4c2444e80000" +"00004c89f7448b7c24704489fe4489eae8000000004c89f78b9c24080100" +"0089de4489fa4489f9e8000000004c89f7448bbc24040100004489fe8b4c" +"246c89cae8000000004c89f78b6c246889ee89da89d9e8000000004c89f7" +"8bb424000100004489fa4489f9e8000000004c89f78b74244089ea4489e9" +"e8000000004c89f7448b6424184489e68b54247c448bbc24980000004489" +"f9e8000000004c89f78b5c242889de8b9424fc0000008b6c246489e9e800" +"0000004c89f7448b6c243c4489ee4489e24489f9e8000000004c89f78bb4" +"24f800000089da4189dc89e9e8000000004c89f78b7424604489ea8b8c24" +"9c000000e8000000004c89f78b7424388b542468448b7c240c4489f9e800" +"0000004c89f78b6c241889ee4489eae8000000004c89f78b5c241489de89" +"ea4189ed8b4c2440e8000000004c89f78b6c241c89ee4489e28b8c24f400" +"0000e8000000004c89f74489ee89da8b5c243889d9e8000000004c89f744" +"89e689ea448b64245c4489e1e8000000004c89f74489fe4489ea89d9e800" +"0000004c89f78b7424448b6c242889ea4489e1e8000000004c89f74489ee" +"4589ec8b5c242489da8b4c2478e8000000004c89f789ee448b7c244c4489" +"fa8b4c2474e8000000004c89f7448b6c24144489ee4489e2e8000000004c" +"89f78b6c242089ee4489ea8b4c2450e8000000004c89f7448b6c24484489" +"ee8b54241c8b8c2480000000e8000000004c89f789de89ea8b4c2470e800" +"0000004c89f74489fe4489ea8b4c246ce8000000004c89f78b7424588b94" +"249400000089d9e8000000004c89f78bb424f00000008b94248800000044" +"89f9e8000000004c89f74489e68b5424388b4c240ce8000000004c89f78b" +"7424288b54245c8b4c2444e8000000004c89f78bac24ec00000089ee4489" +"e28b4c243ce8000000004c89f7448bbc24e80000004489fe448bac249800" +"00004489ea8b4c2440e8000000004c89f78b9c24e400000089de4489fa44" +"89f9e8000000004c89f7448bbc24e00000004489fe8b8c24dc00000089ca" +"e8000000004c89f74489ee89ea89d9e8000000004c89f78b7424648b9424" +"d80000004489f9e8000000004c89f74489e68b542458e8000000004c89f7" +"8b9c24d400000089de4489e28b8c2490000000e8000000004c89f78bac24" +"d000000089ee8b5424288b8c2484000000e8000000004c89f7448bbc24cc" +"0000004489fe8b542424e8000000004c89f78b74242089da4489f941bf01" +"000000e8000000004c89f78b5c244889de89ea8b8c24c8000000e8000000" +"004c89f74489e68b4c246089cae8000000004c89f78b6c242889ee8b8c24" +"c400000089cae8000000004c89f78b7424144489e28b4c2420e800000000" +"4c89f78b74241c89ea89d9e8000000004c89f78b5c243489de8b4c242489" +"cae8000000004c89f78bb424c00000008b4c244c89cae8000000004c89f7" +"4489e68b54243ce8000000004c89f78bb424100100004489e24489e1e800" +"0000004c89f78bb424bc00000089ea89e9e8000000004c89f78bb4241401" +"00008b542414b960000000e8000000004c89f78b74245489da48bb008000" +"0000800069b93c061000e800000000e91afaffff4c89f78b74240ce80000" +"00004c8ba424b0000000498b842478010000488b9424a80000008b8c10b8" +"020000898c10600b0000498b84247801000083f9440f8586000000488bb4" +"243001000089f10fb65424138854080c498b8424780100008b542454488b" +"14104889140883c608488b9424280100008d82f8f6ffff498b8c24780100" +"008b0401890431be0d00000048399424200100000f8326f6ffffbe0e0000" +"0048399424180100000f8213f6ffff41899424d00100004881c438010000" +"5b415c415d415e415f5dc3c78410c002000000000000418b8c24d0010000" +"8d41f0be0d00000048398424200100000f83d0f5ffffbe0e000000483984" +"24180100000f82bdf5ffff41898424d0010000498b942478010000c74402" +"0c18061000498b9424780100008b742418897402088d71f883c1fcc70424" +"1c0610004c89f7bab006100041b8b0061000448b4c2434e800000000e969" +"f5ffff0f1f00554157415641554154534883ec1889f34989ff488b7f104d" +"8b6f30448ba7d0010000458db42480feffffbe0d0000004d39f50f83b600" +"0000498b47384c39f0730abe0e000000e9a300000048894424084489b7d0" +"010000418d7424d048897c24104c89ffba30000000e800000000418d6c24" +"a04c89ff89eeba60031000b930000000e8000000004c89ff4489f689eab9" +"60000000e800000000418db424e0feffff4c89ffbac0000000e800000000" +"8db3200100004c89ffba20010000e8000000004c89ff89de4489f2b92001" +"0000e800000000be0d000000488b7c24104d39e5730cbe0e0000004c3964" +"240873134883c4185b415c415d415e415f5de9000000004489a7d0010000" +"4883c4185b415c415d415e415f5dc3660f1f840000000000554157415641" +"554154534881ec680100004189c84c8b77104c8b6f30418b9ed00100008d" +"8b40f9ffffb80d0000004939cd0f83930c00004989ff488b6f384839cd73" +"0ab80e000000e97d0c000048894c242041898ed0010000498b8678010000" +"89d18b5408048b7c0808f7c2ffffff1f0f842a0c000048896c24304c896c" +"24388974240c8db3a0fcffff8974241848894c24288b04088d8ba0f9ffff" +"48898c24600100008d8b00faffff48898c24580100008d8b20feffff4889" +"8c24500100008d8b80feffff48898c24480100008d8b60faffff48898c24" +"400100008d8bc0faffff48898c24380100008d8b20fbffff48898c243001" +"00008d8b40ffffff48898c24280100008d4ba048898c24200100004c89c5" +"418d486048898c2418010000418d88c000000048898c241001000089f9c1" +"e1058d0cc9894c2410c1e203f7da418d882001000048898c240801000041" +"8d888001000048898c2400010000418d88e001000048898c24f80000008d" +"8bc0fdffff48898c24f000000089e948898c24e80000008d8bf0fdffff48" +"898c24e00000008d8b70f9ffff48898c24d8000000418d483048898c24d0" +"0000008d8b50feffff48898c24c80000008d8bd0f9ffff48898c24c00000" +"00418d889000000048898c24b80000008d8bb0feffff48898c24b0000000" +"8d8b30faffff48898c24a8000000418d88f000000048898c24a00000008d" +"8be0feffff48894c24508d8b10ffffff48898c24980000008d8b90faffff" +"48898c2490000000418d885001000048898c24880000008d8b70ffffff48" +"898c24800000008d8bf0faffff48894c2478418d88b001000048894c2470" +"8d4bd048894c24688d8b50fbffff48894c2460418d881002000048894c24" +"5848895c24408d8b80fbffff894c24144c8b6c2420897c24084c89742448" +"e9a10800009083c1048b0c08034c2410468b04204c89ff4489ee89eae800" +"000000498b4710488b90780100004889d848f7d8488d4bff4a8b742a2848" +"21ce4c8b8424e80000004a8b7c02284821c74809f74c8b9c24f00000004a" +"897c1a284a8b742a204821ce4a8b7c02204821c74809f74a897c1a204a8b" +"742a184821ce4a8b7c02184821c74809f74a897c1a184a8b742a104821ce" +"4a8b7c02104821c74809f74a897c1a104a8b742a084821ce4a8b7c020848" +"21c74809f74a897c1a084a8b342a4821ce4a8b3c024821c74809f74a893c" +"1a498b5710488b92780100004c8b8c24d80000004a8b740a284821ce4c8b" +"9424d00000004a8b7c12284821c74809f74c8b8424e00000004a897c0228" +"4a8b740a204821ce4a8b7c12204821c74809f74a897c02204a8b740a1848" +"21ce4a8b7c12184821c74809f74a897c02184a8b740a104821ce4a8b7c12" +"104821c74809f74a897c02104a8b740a084821ce4a8b7c12084821c74809" +"f74a897c02084a8b340a4821ce4a8b3c124821c74809f74a893c02498b57" +"10488b92780100004c8b8424600100004a8b7402284821ce4c8b94241801" +"00004a8b7c12284821c74809f74c8b8c24500100004a897c0a284a8b7402" +"204821ce4a8b7c12204821c74809f74a897c0a204a8b7402184821ce4a8b" +"7c12184821c74809f74a897c0a184a8b7402104821ce4a8b7c12104821c7" +"4809f74a897c0a104a8b7402084821ce4a8b7c12084821c74809f74a897c" +"0a084a8b34024821ce4a8b3c124821c74809f74a893c0a498b5710488b92" +"780100004c8b8c24c00000004a8b740a284821ce4c8b9424b80000004a8b" +"7c12284821c74809f74c8b8424c80000004a897c02284a8b740a204821ce" +"4a8b7c12204821c74809f74a897c02204a8b740a184821ce4a8b7c121848" +"21c74809f74a897c02184a8b740a104821ce4a8b7c12104821c74809f74a" +"897c02104a8b740a084821ce4a8b7c12084821c74809f74a897c02084a8b" +"340a4821ce4a8b3c124821c74809f74a893c02498b5710488b9278010000" +"4c8b8424580100004a8b7402284821ce4c8b9424100100004a8b7c122848" +"21c74809f74c8b8c24480100004a897c0a284a8b7402204821ce4a8b7c12" +"204821c74809f74a897c0a204a8b7402184821ce4a8b7c12184821c74809" +"f74a897c0a184a8b7402104821ce4a8b7c12104821c74809f74a897c0a10" +"4a8b7402084821ce4a8b7c12084821c74809f74a897c0a084a8b34024821" +"ce4a8b3c124821c74809f74a893c0a498b5710488b92780100004c8b8c24" +"a80000004a8b740a284821ce4c8b9424a00000004a8b7c12284821c74809" +"f74c8b8424b00000004a897c02284a8b740a204821ce4a8b7c12204821c7" +"4809f74a897c02204a8b740a184821ce4a8b7c12184821c74809f74a897c" +"02184a8b740a104821ce4a8b7c12104821c74809f74a897c02104a8b740a" +"084821ce4a8b7c12084821c74809f74a897c02084a8b340a4821ce4a8b3c" +"124821c74809f74a893c02498b5710488b92780100004c8b842440010000" +"4a8b7402284821ce4c8b8c24080100004a8b7c0a284821c74809f74989ee" +"488b6c245048897c2a284a8b7402204821ce4a8b7c0a204821c74809f748" +"897c2a204a8b7402184821ce4a8b7c0a184821c74809f748897c2a184a8b" +"7402104821ce4a8b7c0a104821c74809f748897c2a104a8b7402084821ce" +"4a8b7c0a084821c74809f748897c2a084a8b34024821ce4a8b3c0a4821c7" +"4809f748893c2a498b5710488b92780100004c8b8c24900000004a8b740a" +"284821ce4c8b9424880000004a8b7c12284821c74809f74c8b8424980000" +"004a897c02284a8b740a204821ce4a8b7c12204821c74809f74a897c0220" +"4a8b740a184821ce4a8b7c12184821c74809f74a897c02184a8b740a1048" +"21ce4a8b7c12104821c74809f74a897c02104a8b740a084821ce4a8b7c12" +"084821c74809f74a897c02084a8b340a4821ce4a8b3c124821c74809f74a" +"893c02498b5710488b92780100004c8b8424380100004a8b7402284821ce" +"4c8b9424000100004a8b7c12284821c74809f74c8b8c24280100004a897c" +"0a284a8b7402204821ce4a8b7c12204821c74809f74a897c0a204a8b7402" +"184821ce4a8b7c12184821c74809f74a897c0a184a8b7402104821ce4a8b" +"7c12104821c74809f74a897c0a104a8b7402084821ce4a8b7c12084821c7" +"4809f74a897c0a084a8b34024821ce4a8b3c124821c74809f74a893c0a49" +"8b5710488b92780100004c8b4c24784a8b740a284821ce4c8b5424704a8b" +"7c12284821c74809f74c8b8424800000004a897c02284a8b740a204821ce" +"4a8b7c12204821c74809f74a897c02204a8b740a184821ce4a8b7c121848" +"21c74809f74a897c02184a8b740a104821ce4a8b7c12104821c74809f74a" +"897c02104a8b740a084821ce4a8b7c12084821c74809f74a897c02084a8b" +"340a4821ce4a8b3c124821c74809f74a893c02498b5710488b9278010000" +"4c8b8424300100004a8b7402284821ce4c8b9424f80000004a8b7c122848" +"21c74809f74c8b8c24200100004a897c0a284a8b7402204821ce4a8b7c12" +"204821c74809f74a897c0a204a8b7402184821ce4a8b7c12184821c74809" +"f74a897c0a184a8b7402104821ce4a8b7c12104821c74809f74a897c0a10" +"4a8b7402084821ce4a8b7c12084821c74809f74a897c0a084a8b34024821" +"ce4a8b3c124821c74809f74a893c0a498b5710488b92780100004c8b4c24" +"604a8b740a284821ce4c8b5424584a8b7c12284821c74809f74c8b442468" +"4a897c02284a8b740a204821ce4a8b7c12204821c74809f74a897c02204a" +"8b740a184821ce4a8b7c12184821c74809f74a897c02184a8b740a104821" +"ce4a8b7c12104821c74809f74a897c02104a8b740a084821ce4a8b7c1208" +"4821c74809f74a897c02084a230c0a4a2304124809c84a8904024c89ff8b" +"5c241489de4489dab920010000e8000000004c89ff8b74241889ea4c89f5" +"b920010000e8000000004c89ff89ee89dab940020000e800000000418d44" +"24088b54241c83c2088b7c24084c8b7424480f843e0100008954241c498b" +"967801000089c18b040a4989cc8b4c0a040fb64402600a440a0c0fb6d849" +"8b4710488b90780100008b80d001000083c0f0885c020f498b8678010000" +"8d51088b141039fa0f8710f7ffff4989ed4c89f54d8b7710418bb6d00100" +"008d4ed0b80d00000049394f300f83ab000000b80e00000049394f380f82" +"9c00000041898ed0010000498b867801000089540804498b86780100008b" +"542408891408498b8678010000c744080c02000000498b8678010000c744" +"0808a0061000498b867801000048c7440814020000004889c848bf000000" +"00050000004809f8498b96780100004889440a288d46d44809f8498b9678" +"0100004889440a208d46f0498b967801000089440a1083c6d84c89ffba4c" +"061000e80000000031c04c89f789c6e800000000488b857801000031c94c" +"89ed4c8b6c2420e92cf6ffff4989e8498b86780100008b74240c488b5c24" +"404c8b6c2438488b6c2430488b4c2428ffc7897c08084c89ff4489c2b940" +"020000e8000000004939ddb80d000000730ab80e0000004839dd731b4c89" +"f789c64881c4680100005b415c415d415e415f5de90000000041899ed001" +"00004881c4680100005b415c415d415e415f5dc3669039ca76098d04c9c1" +"e00501f0c3534889f8488b7f108bb7d0010000448d56d041b90d0000004c" +"3950300f83b000000041b90e0000004c3950380f82a0000000448997d001" +"00004c8b8f780100004389541104488b977801000042890c12488b8f7801" +"000042c744110c02000000488b8f7801000042c7441108a0061000488b8f" +"780100004ac74411140200000048b90000000005000000498d140a4c8b8f" +"780100004b895411288d56d44809ca488b8f780100004a895411208d4ef0" +"488b977801000042894c121083c6d84889fb4889c74489c2e80000000048" +"89df4531c94489cee80000000031c05bc30f1f4400005541574156415541" +"54534881ec880000004c8944242089cb488954244889f14989fe488b7f10" +"498b4630448ba7d0010000458dac2420f8ffffbe0d0000004c39e80f83c1" +"060000498b5638be0e0000004c39ea0f82af060000488954246848894c24" +"7048894424784889bc24800000004489afd00100004c89f74489ee89dab9" +"60000000e800000000418db42480f8ffff48895c24288d53604c89f78974" +"240cb960000000e800000000488b44242083c03089442410498b7e10498b" +"5e308bafd0010000448d7dd0be0d0000004c39fb7365498b4e384c39f973" +"07be0e000000eb5548894c24404489bfd001000048897c24184c89f74489" +"fe4489ea8b4c2410e8000000004c89f74489ee4489fab930000000e80000" +"0000be0d000000488b7c24184839eb7310be0e00000048396c24400f8300" +"060000e800000000418d842450f8ffff89442440498b7e10498b5e308b87" +"d0010000448d78d0be0d0000004c39fb7371498b4e384c39f97307be0e00" +"0000eb6148894c24384489bfd001000048897c24184c89f74489fe8b6c24" +"4089ea8b4c24104889442410e8000000004c89f789ee4489fab930000000" +"e800000000488b442410be0d000000488b7c24184839c37310be0e000000" +"48394424380f836d050000e800000000498b7e104d8b7e308bafd0010000" +"8d5dd0be0d0000004939df7365498b46384839d87307be0e000000eb5548" +"89442418899fd001000048897c24104c89f789de8b54240c488b4c2420e8" +"000000004c89f78b74240c89dab930000000e800000000be0d000000488b" +"7c24104939ef7310be0e00000048396c24180f83f3040000e80000000041" +"8d8424b0f8ffff89442438498b7e104d8b7e308b87d00100008d58d0be0d" +"0000004939df736f498b4e384839d97307be0e000000eb5f48894c241889" +"9fd001000048897c24104c89f789de8b6c243889ea488b4c242048894424" +"20e8000000004c89f789ee89dab930000000e800000000488b442420be0d" +"000000488b7c24104939c77310be0e00000048394424180f8363040000e8" +"00000000488b4c2428418db424e0f8ffff8974241081c1c000000048894c" +"24284c89f7488b6c244889ea448b44240ce800000000458dbc24e0feffff" +"8d95e0010000895424344c89f74489fe4489e9e800000000418db424c0fd" +"ffff89742420418d8c2410ffffff4c89f74489fa44897c24504c89eb4189" +"cd894c2418e800000000418db424f0fdffff8974245c4c89f74489fa4489" +"e9e800000000418db42460faffff89742460448dbd200100004c89f74489" +"fa4989dd4489e9e800000000418db424c0faffff897424648d9d80010000" +"4c89f789da4489e9e800000000418db42400faffff897424584c89f78b54" +"2420b960000000e800000000418db42420fbffff897424304c89f78b5424" +"0c4489e9e800000000418db42450fbffff4c89f78b5424388b4c2440e800" +"000000458dac2480fbffff4c89f74489ee4489fa89e9e800000000418db4" +"24b0fbffff8d95500100008d4d304c89f7e800000000418db424e0fbffff" +"8d4d604c89f789dae800000000418db42410fcffff8d95b00100008d8d90" +"0000004c89f7e800000000418db42440fcffff8d8dc00000004c89f78b54" +"2434e800000000418db42470fcffff8d951002000081c5f00000004c89f7" +"89e9e800000000418dac24a0fcffff4c89f789ee4489ea488b4c2428448b" +"442430e8000000004c89f78b5c245089de89ea8b4c2410e800000000418d" +"9424d0fcffff418d8c2410f9ffff894c24404c89f7448b7c24184489fee8" +"00000000418db42440ffffff89742428418d942400fdffff418d8c2440f9" +"ffff894c24384c89f7e800000000418db42470ffffff8974240c418d9424" +"30fdffff418d8c2470f9ffff894c24344c89f7e800000000418d7424a089" +"742448418d942460fdffff418d8c24a0f9ffff894c24304c89f7e8000000" +"00458d6c24d0418d942490fdffff418d8c24d0f9ffff894c24544c89f744" +"89eee8000000004c89f78b74242089dd89da8b5c245889d9e80000000041" +"8d8c2430faffff4c89f78b74245c4489fae800000000418db42420feffff" +"4c89f78b5424288b4c2460e800000000418db42450feffff418d8c2490fa" +"ffff4c89f78b54240ce800000000418db42480feffff4c89f78b5424488b" +"4c2464e800000000418db424b0feffff418d8c24f0faffff4c89f74489ea" +"e8000000004c89f789ee4189ef89dae8000000004c89f7488b6c247089ee" +"4489fa8b4c2410e8000000008d75304c89f78b5424188b4c2440e8000000" +"008d75604c89f78b5424288b4c2438e8000000008db5900000004c89f78b" +"54240c8b4c2434e8000000008db5c00000004c89f78b5424488b4c2430e8" +"000000008db5f00000004c89f74489ea8b4c2454e80000000081c5200100" +"004c89f789ee8b542420b920010000e800000000be0d0000004c39642478" +"488bbc2480000000730cbe0e0000004c3964246873164881c4880000005b" +"415c415d415e415f5de9000000004489a7d00100004881c4880000005b41" +"5c415d415e415f5dc389afd0010000e9faf9ffff8987d0010000e98dfaff" +"ff89afd0010000e907fbffff8987d0010000e997fbffff666666662e0f1f" +"8400000000004157415653488b47104c8b8878010000410fb6c04989c049" +"f7d84189d34189ca48ffc84b8b5c19284821c34f8b7411284d21c64909de" +"89f34d897419284f8b7419204921c64f8b7c11204d21c74d09f74d897c19" +"204f8b7419184921c64f8b7c11184d21c74d09f74d897c19184f8b741910" +"4921c64f8b7c11104d21c74d09f74d897c19104f8b7419084921c64f8b7c" +"11084d21c74d09f74d897c19084f8b1c194921c34f8b14114d21c24d09da" +"4d89141983c63083c23083c130488b7f10488bbf780100004c8b4c172849" +"21c14c8b540f284d21c24d09ca4c895437284c8b4c17204921c14c8b540f" +"204d21c24d09ca4c895437204c8b4c17184921c14c8b540f184d21c24d09" +"ca4c895437184c8b4c17104921c14c8b540f104d21c24d09ca4c89543710" +"4c8b4c17084921c14c8b540f084d21c24d09ca4c89543708482304174c23" +"040f4909c04c8904375b415e415fc3666666662e0f1f8400000000004157" +"41565389d34189f64989ffe800000000418d76608d53604c89ffe8000000" +"004181c6c000000081c3c00000004c89ff4489f689da5b415e415fe90000" +"0000415741564155415453488b4710488b80780100004189d24e8b0c104e" +"8b5c100831c948baabaafffffffffeb94c29ca41be000000004d19f64e8b" +"4410284a8b5c10204e8b7c10184d09d94c89c74809df4c09cf4c09ff4d89" +"f44d29dc49b9ffff53b1feffab1e4f8d0c0c4e8b5410104983de0049bb00" +"00ac4e010054e14531ed4d39dc410f97c54d01f549c1fd3f4d89eb4d29d3" +"4983dd0049bedb094f095f2dcf984531e44d39f3410f97c44d01ec49c1fc" +"3f4d89e64d29fe4983dc0049bf40ed7a0c7bb4889b4531ed4d39fe410f97" +"c54d01e549c1fd3f4d89ef4929df4983dd0048bb2853b4bc4958e4b44531" +"e44939df410f97c44d01ec49c1fc3f4d29c449b89ae67f39ea11011a4d01" +"e04c09d74c0f44c989f64c894c3008480f44d14889143048ba24f6b0f6a0" +"d23067498d1413480f44d1488954301048babf1285f3844b7764498d1416" +"480f44d1488954301848bad7ac4b43b6a71b4b498d1417480f44d1488954" +"30204c0f44c14c894430285b415c415d415e415fc30f1f44000055415741" +"5641554154534883ec488974241c4889f8488b7f104c8b5030448b8fd001" +"0000418d9940ffffffbe0d0000004939da0f83ad020000488b70384839de" +"730abe0e000000e99a0200004889742428899fd0010000448d4230488b70" +"104c8bae780100004c89c64f8b5c05004f8b74050848894c243048895424" +"2049b8abaafffffffffeb94d29d841bc000000004d19e4498b4c35284d8b" +"7c35204c897c24084c890c24498b54351848897424384d09f34989c94d09" +"f94d09d94909d14d89e34d29f34d8b7435104983dc0048bd0000ac4e0100" +"54e14531ff4939eb410f97c74d01e749c1ff3f4d89fc4d29f44983df004c" +"8954244048bedb094f095f2dcf9831ed4939f4400f97c54c01fd48c1fd3f" +"4989ef4929d74883dd0048ba40ed7a0c7bb4889b31f64939d7400f97c648" +"01ee48c1fe3f4889f2482b5424084883de0049ba2853b4bc4958e4b431ed" +"4c39d2400f97c54801f548c1fd3f4829cd49ba9ae67f39ea11011a4901ea" +"4d09f148beffff53b1feffab1e498d34334c8b0c24458db170ffffffb900" +"000000480f44f14b897435084c0f44c14f8944350048be24f6b0f6a0d230" +"67498d3434480f44f14b8974351048bebf1285f3844b7764498d3437480f" +"44f14b8974351848bed7ac4b43b6a71b4b488d1432480f44d1b900000000" +"4b895435204c0f44d14f8954352848897c24084989c54889c78b6c241c89" +"de488b542420b930000000e800000000488b04248d70d0897424184c8b64" +"2430418d542430895424144c89efb930000000e800000000488b0424448d" +"78a04c89ef4489fe4489e2b930000000e8000000004c89ef89ee89da4489" +"f9e8000000004c89ef4489f6488b542438b930000000e8000000004c89ef" +"89de488b542420b930000000e8000000004c89ef4489fe8b542414b93000" +"0000e8000000004c89ef8b7424184489e2b930000000e80000000083c530" +"4c89ef89ee89da4489f9e800000000488b0424be0d000000488b7c240848" +"39442440730cbe0e000000483944242873134883c4485b415c415d415e41" +"5f5de9000000008987d00100004883c4485b415c415d415e415f5dc36690" +"554157415641554154534881ecc80000004189d489f24989fe488b7f1049" +"8b46308b9fd0010000448d8be0fbffffbe0d0000004c39c80f83c4140000" +"4189c8498b4e384c39c9730abe0e000000e9ae14000048898c24a0000000" +"44898fd0010000418d6860896c243c458da8900000004889bc24c0000000" +"4c89f74489ce48899424b000000089ea4489e94489ac2488000000488984" +"24b80000004d89c74c898c24a8000000e8000000008db310fcffff897424" +"304c89f789ea4489e9e8000000008db340fcffff8974240c4c897c244841" +"8dafc00000004181c7f00000004c89f789ac248c00000089ea4489bc249c" +"0000004489f9e8000000008db370fcffff897424444c89f789ea4489f9e8" +"00000000458d5c2430498b4610488b80780100004a8b3c184e8b44180845" +"31ff48b9abaafffffffffeb94829f941b9000000004d19c94a8b7418284e" +"8b5418204d89e54e8b6418184c895c24784c09c74889f24c09d24809fa4c" +"09e24c89cf4c29c74e8b4418104983d90048bd0000ac4e010054e14531db" +"4839ef410f97c34d01cb49c1fb3f4d89d94d29c14983db0048bddb094f09" +"5f2dcf9848891c2431db4939e90f97c34c01db48c1fb3f4989db4d29e348" +"83db0049bc40ed7a0c7bb4889b31ed4d39e3400f97c54801dd48c1fd3f49" +"89ec4d29d44883dd0048bb2853b4bc4958e4b44531d24939dc410f97c249" +"01ea49c1fa3f4929f248be9ae67f39ea11011a4901f24c09c248baffff53" +"b1feffab1e488d1417490f44d7488b34248db6f0fdffff48897424704889" +"543008490f44cf48890c3048b924f6b0f6a0d23067498d0c09490f44cf48" +"894c301048b9bf1285f3844b7764498d0c0b490f44cf48894c301848b9d7" +"ac4b43b6a71b4b498d0c0c490f44cf48894c30204d0f44d74c8954302848" +"8b04248db020feffff89742424418d5560895424204c89f7b930000000e8" +"00000000418db590000000498b4610488b8078010000488b3c304c8b4430" +"0848b9abaafffffffffeb94829f941b9000000004d19c9488b5430284c8b" +"5430204c8b6430184989f348897424604c09c74889d64c09d64809fe4c09" +"e64c89cf4c29c74e8b4418104983d9004531db48bb0000ac4e010054e148" +"39df410f97c34d01cb49c1fb3f4d89d94d29c14983db0031db48bddb094f" +"095f2dcf984939e90f97c34c01db48c1fb3f4989db4d29e34883db0031ed" +"49bc40ed7a0c7bb4889b4d39e3400f97c54801dd48c1fd3f4989ec4d29d4" +"4883dd004531d248bb2853b4bc4958e4b44939dc410f97c24901ea49c1fa" +"3f4929d248ba9ae67f39ea11011a4901d24c09c6488b14248db250feffff" +"48baffff53b1feffab1e488d1417490f44d74889543008490f44cf488974" +"246848890c3048b924f6b0f6a0d23067498d0c09490f44cf48894c301048" +"b9bf1285f3844b7764498d0c0b490f44cf48894c301848b9d7ac4b43b6a7" +"1b4b498d0c0c490f44cf48894c30204d0f44d74c89543028488b04248db0" +"80feffff897424184d89ec418d95c00000008954242c4c89f7b930000000" +"e800000000418d8df00000004c89ac2490000000498b4610488b80780100" +"004889ce488b3c084c8b44080848b9abaafffffffffeb94829f941b90000" +"00004d19c9488b5430284c8b543020488b6c30184989f348897424504c09" +"c74889d64c09d64809fe4809ee4c89cf4c29c74e8b4418104983d9004531" +"db48bb0000ac4e010054e14839df410f97c34d01cb49c1fb3f4d89d94d29" +"c14983db0031db49bddb094f095f2dcf984d39e90f97c34c01db48c1fb3f" +"4989db4929eb4883db0031ed49bd40ed7a0c7bb4889b4d39eb400f97c548" +"01dd48c1fd3f4889eb4c29d34883dd004531d249bd2853b4bc4958e4b44c" +"39eb410f97c24901ea49c1fa3f4929d248ba9ae67f39ea11011a4901d24c" +"09c6488b14248db2b0feffff48baffff53b1feffab1e488d1417490f44d7" +"4889543008490f44cf488974245848890c3048b924f6b0f6a0d23067498d" +"0c09490f44cf48894c301048b9bf1285f3844b7764498d0c0b490f44cf48" +"894c301848b9d7ac4b43b6a71b4b488d0c0b490f44cf48894c30204d0f44" +"d74c89543028488b04248da8c0fdffff4c89f789ee4489e2b930000000e8" +"00000000488b04248db010ffffff89742414488b5c24488d53308954241c" +"4c89f7b930000000e800000000488b0424448db8e0feffff4c89f74489fe" +"89dab930000000e800000000488b04248db040ffffff897424384c89f78b" +"5c244489dab930000000e800000000488b04248db070ffffff897424104c" +"89f7448b6c240c4489eab930000000e800000000488b04248d70a0897424" +"344c89f78b542430b930000000e800000000488b04248d70d0897424284c" +"89f74c8ba424a80000004489e2b930000000e800000000488b04248db0a0" +"fcffff89b424980000004c89f789ea4489f9e8000000004c89f7488b7424" +"70488b542478b930000000e8000000004c89f78b7424248b542420b93000" +"0000e8000000004c89f7488b742468488b542460b930000000e800000000" +"4c89f78b7424188b54242cb930000000e8000000004c89f7488b74245848" +"8b542450b930000000e8000000004c89f789ee89ac2484000000488b9424" +"90000000b930000000e8000000004c89f744897c24404489fe8b54241cb9" +"30000000e8000000004c89f78b742414488b542448b930000000e8000000" +"004c89f78b7424384489eab930000000e8000000004c89f78b74241089da" +"b930000000e8000000004c89f78b7424344489e2b930000000e800000000" +"4c89f78b7424288b542430b930000000e800000000488b04248db0d0fcff" +"ff4c89f789ea4489f9e800000000498b4610488b80780100004c8b5c2478" +"4a8b3c184e8b44180848b9abaafffffffffeb94829f941ba000000004d19" +"d24a8b5418284e8b4c18204e8b6c18184c09c74889d64c09ce4809fe4c09" +"ee4c89d74c29c74e8b4418104983da004531db48bb0000ac4e010054e148" +"39df410f97c34d01d349c1fb3f4d89da4d29c24983db0031db49bcdb094f" +"095f2dcf984d39e20f97c34c01db48c1fb3f4989db4d29eb4883db004531" +"ed48bd40ed7a0c7bb4889b4939eb410f97c54901dd49c1fd3f4c89eb4c29" +"cb4983dd004531c949bf2853b4bc4958e4b44c39fb410f97c14d01e949c1" +"f93f4929d148ba9ae67f39ea11011a4901d14c09c648baffff53b1feffab" +"1e488d1417bf00000000480f44d7488b7424704889543008480f44cf4889" +"0c3048b924f6b0f6a0d23067498d0c0a480f44cf48894c301048b9bf1285" +"f3844b7764498d0c0b480f44cf48894c301848b9d7ac4b43b6a71b4b488d" +"0c0b480f44cf48894c30204c0f44cf4531e44c894c30284c89f78b742424" +"8b542420b930000000e800000000498b4610488b80780100004c8b5c2460" +"4a8b3c184e8b44180848b9abaafffffffffeb94829f941ba000000004d19" +"d24a8b5418284e8b4c18204e8b6c18184c09c74889d64c09ce4809fe4c09" +"ee4c89d74c29c74e8b4418104983da004531db48bb0000ac4e010054e148" +"39df410f97c34d01d349c1fb3f4d89da4d29c24983db0031db49bfdb094f" +"095f2dcf984d39fa0f97c34c01db48c1fb3f4989db4d29eb4883db004531" +"ed4939eb410f97c54901dd49c1fd3f4c89eb4c29cb4983dd004531c949bf" +"2853b4bc4958e4b44c39fb410f97c14d01e949c1f93f4929d148ba9ae67f" +"39ea11011a4901d14c09c648baffff53b1feffab1e488d1417490f44d448" +"8b7424684889543008490f44cc48890c3048b924f6b0f6a0d23067498d0c" +"0a490f44cc48894c301048b9bf1285f3844b7764498d0c0b490f44cc4889" +"4c301848b9d7ac4b43b6a71b4b488d0c0b490f44cc48894c30204d0f44cc" +"4c894c30284c89f78b7424188b54242cb930000000e800000000498b4610" +"488b80780100004c8b5c24504a8b3c184e8b44180848b9abaafffffffffe" +"b94829f941ba000000004d19d24a8b5418284e8b4c18204e8b6c18184c09" +"c74889d64c09ce4809fe4c09ee4c89d74c29c74e8b4418104983da004531" +"db48bb0000ac4e010054e14839df410f97c34d01d349c1fb3f4d89da4d29" +"c24983db0031db49bfdb094f095f2dcf984d39fa0f97c34c01db48c1fb3f" +"4989db4d29eb4883db004531ed4939eb410f97c54901dd49c1fd3f4c89eb" +"4c29cb4983dd004531c949bf2853b4bc4958e4b44c39fb410f97c14d01e9" +"49c1f93f4929d148ba9ae67f39ea11011a4901d14c09c648baffff53b1fe" +"ffab1e488d1417be00000000480f44d6488b7c24584889543808480f44ce" +"48890c3848b924f6b0f6a0d23067498d0c0a480f44ce48894c381048b9bf" +"1285f3844b7764498d0c0b480f44ce48894c381848b9d7ac4b43b6a71b4b" +"488d0c0b480f44ce48894c38204c0f44ce4c894c38284c89f7448bbc2484" +"0000004489fe4c8ba424900000004489e2b930000000e8000000004c89f7" +"8b6c244089ee8b54243cb930000000e8000000004c89f78b742414448bac" +"24880000004489eab930000000e8000000004c89f78b7424108b54241cb9" +"30000000e8000000004c89f78b5c243889de488b542448b930000000e800" +"0000004c89f78b7424348b542444b930000000e8000000004c89f78b7424" +"288b54240cb930000000e800000000488b04248db000fdffff897424304c" +"89f74489fa89e9e8000000004c89f7488b742470488b542478b930000000" +"e8000000004c89f78b7424248b542420b930000000e8000000004c89f748" +"8b742468488b542460b930000000e8000000004c89f78b7424188b54242c" +"b930000000e8000000004c89f7488b742458488b542450b930000000e800" +"0000004c89f74489fd4489fe4489e2b930000000e8000000004c89f7448b" +"7c24404489fe4489eab930000000e8000000004c89f78b7424148b54243c" +"b930000000e8000000004c89f789de8b54241cb930000000e8000000004c" +"89f78b742410488b542448b930000000e8000000004c89f78b7424348b54" +"240cb930000000e8000000004c89f78b7424288b542444b930000000e800" +"000000488b04248db030fdffff4c89f789ea4489f9e800000000498b4610" +"488b80780100004c8b5c24784a8b3c184e8b44180849bcabaafffffffffe" +"b94c89e14829f941ba000000004d19d24a8b5418284e8b4c18204e8b6c18" +"184c09c74889d64c09ce4809fe4c09ee4c89d74c29c74e8b4418104983da" +"004531db48bd0000ac4e010054e14839ef410f97c34d01d349c1fb3f4d89" +"da4d29c24983db0031db49bfdb094f095f2dcf984d39fa0f97c34c01db48" +"c1fb3f4989db4d29eb4883db004531ed49bf40ed7a0c7bb4889b4d39fb41" +"0f97c54901dd49c1fd3f4c89eb4c29cb4983dd004531c949bf2853b4bc49" +"58e4b44c39fb410f97c14d01e949c1f93f4929d148ba9ae67f39ea11011a" +"4901d14c09c648baffff53b1feffab1e488d1417bf00000000480f44d748" +"8b7424704889543008480f44cf48890c3048b924f6b0f6a0d23067498d0c" +"0a480f44cf48894c301048b9bf1285f3844b7764498d0c0b480f44cf4889" +"4c301848b9d7ac4b43b6a71b4b488d0c0b480f44cfba0000000048894c30" +"204c0f44ca4c894c30284c89f78b7424248b542420b930000000e8000000" +"00498b4610488b80780100004c8b5c24604a8b3c184e8b4418084c89e148" +"29f941ba000000004d19d24a8b5418284e8b4c18204e8b6c18184c09c748" +"89d64c09ce4809fe4c09ee4c89d74c29c74e8b4418104983da004531db48" +"39ef410f97c34d01d349c1fb3f4d89da4d29c24983db0031db49bfdb094f" +"095f2dcf984d39fa0f97c34c01db48c1fb3f4989db4d29eb4883db004531" +"ed49bf40ed7a0c7bb4889b4d39fb410f97c54901dd49c1fd3f4c89eb4c29" +"cb4983dd004531c949bf2853b4bc4958e4b44c39fb410f97c14d01e949c1" +"f93f4929d148ba9ae67f39ea11011a4901d14c09c648baffff53b1feffab" +"1e488d1417bf00000000480f44d7488b7424684889543008480f44cf4889" +"0c3048b924f6b0f6a0d23067498d0c0a480f44cf48894c301048b9bf1285" +"f3844b7764498d0c0b480f44cf48894c301848b9d7ac4b43b6a71b4b488d" +"0c0b480f44cf48894c30204c0f44cf4531ff4c894c30284c89f78b742418" +"8b54242cb930000000e800000000498b4610488b8078010000488b5c2450" +"488b3418488b7c18084929f441b9000000004d19c94809fe488b5418284c" +"8b4418204889d14c09c14809f14c8b5c18184c09d94c89ce4829fe4983d9" +"004531d24839ee410f97c24d01ca49c1fa3f4c8b4c18104c89d74c29cf49" +"83da0031db49bddb094f095f2dcf984c39ef0f97c34c01d348c1fb3f4989" +"da4d29da4883db004531ed49bb40ed7a0c7bb4889b4d39da410f97c54901" +"dd49c1fd3f4d89eb4d29c34983dd004531c048bb2853b4bc4958e4b44939" +"db410f97c04d01e849c1f83f4929d048ba9ae67f39ea11011a4901d04c09" +"c948b9ffff53b1feffab1e488d0c0e490f44cf488b54245848894c10084d" +"0f44e74c89241048b924f6b0f6a0d23067488d0c0f490f44cf48894c1010" +"48b9bf1285f3844b7764498d0c0a490f44cf48894c101848b9d7ac4b43b6" +"a71b4b498d0c0b490f44cf48894c10204d0f44c74c894410284c89f7448b" +"a424840000004489e6488b942490000000b930000000e8000000004c89f7" +"448b7c24404489fe8b94248c000000b930000000e8000000004c89f78b74" +"24148b9c249c00000089dab930000000e8000000004c89f78b7424388b54" +"243cb930000000e8000000004c89f78b742410448bac24880000004489ea" +"b930000000e8000000004c89f78b7424288b54241cb930000000e8000000" +"004c89f78b6c243489ee488b542448b930000000e800000000488b04248d" +"b060fdffff8974240c4c89f74489e24489f9e8000000004c89f7488b7424" +"70488b542478b930000000e8000000004c89f78b7424248b542420b93000" +"0000e8000000004c89f7488b742468488b542460b930000000e800000000" +"4c89f78b7424188b54242cb930000000e8000000004c89f7488b74245848" +"8b542450b930000000e8000000004c89f74489e6488b942490000000b930" +"000000e8000000004c89f74489fe89dab930000000e8000000004c89f78b" +"7424148b94248c000000b930000000e8000000004c89f78b7424384489ea" +"b930000000e8000000004c89f78b7424108b54243cb930000000e8000000" +"004c89f789ee8b54241cb930000000e8000000004c89f78b742428488b54" +"2448b930000000e800000000488b1c248db390fdffff4c89f74489e24489" +"f9e8000000004c89f74c8bbc24b00000004489fe8b942498000000b96000" +"0000e800000000418d77604c89f78b542430b960000000e8000000004181" +"c7c00000004c89f74489fe8b54240cb960000000e800000000be0d000000" +"488bbc24c000000048399c24b800000073124889d8be0e00000048399c24" +"a000000073164881c4c80000005b415c415d415e415f5de9000000008987" +"d00100004881c4c80000005b415c415d415e415f5dc36690554157415641" +"554154534883ec584189d589f24989fe488b7f10498b4630448ba7d00100" +"00458d8424a0fcffffbe0d0000004c39c00f8315030000498b4e384c39c1" +"730abe0e000000e90203000048894c2440448987d001000048897c24504c" +"89f74489c648895424084489ea48894424484c89442438e800000000418d" +"9c2400fdffff418d6d604c89f789de4489ea89e9892c24e800000000418d" +"b42460fdffff897424344c89f789da89d9e800000000418db42490fdffff" +"89742430418d8c2430fdffff4c89f789cae800000000458d7c24a04c89f7" +"4489fe44897c24104489ea89e9e800000000418d5c24d0418d5530418d8d" +"900000004c89f789de895c2404e800000000418dac2440ffffff418d8dc0" +"0000004c89f789ee896c24284489fa4189cfe800000000418db42470ffff" +"ff8974242c4181c5f00000004c89f789da4489e9e800000000418db424c0" +"fdffff897424244c89f789eae800000000458dac2420feffff4c89f74489" +"ee8b14244489f9e800000000418d9c2480feffff4c89f789de4489ea4489" +"e9e800000000458dac24b0feffff418d8c2450feffff4c89f74489ee4489" +"6c242089cae800000000418db424e0feffff8934244c89f74489fae80000" +"00004c89f78b6c241089ee895c241489da4489e9e8000000004c89f78b74" +"240489da4489e9e8000000004c89f7488b5c240889de89ea488b4c2438e8" +"000000008d7330418d8c24d0fcffff894c24184c89f78b5c240489dae800" +"000000458dbc2410ffffff4c89f789ee448b2c244489ea4489f944897c24" +"1ce8000000004c89f789de4489ea4489f9e800000000488b5c24088d7360" +"4c89f789ea448b6c24344489e9e8000000008db3900000004c89f7448b7c" +"24044489fa8b5c243089d9e8000000004c89f789ee4489ea8b4c2424e800" +"000000418d8c24f0fdffff4c89f74489fe89dae8000000004c89f78b5c24" +"2889de89ea8b4c2414e8000000004c89f7448b6c242c4489ee4489fa8b4c" +"2420e8000000004c89f789ee89da488b4c2438e8000000004c89f74489fe" +"4489fb4489ea8b4c2418e8000000004c8b7c2408418db7c00000004c89f7" +"89ea8b0c24e8000000004c89fe81c6f00000004c89f789da8b4c241ce800" +"000000be0d000000488b7c24504c39642448730cbe0e0000004c39642440" +"73134883c4585b415c415d415e415f5de9000000004489a7d00100004883" +"c4585b415c415d415e415f5dc30f1f800000000055415741564155415453" +"4883ec184189f64989fc488b7f104d8b6c24308bafd0010000448d7da0be" +"0d0000004d39fd0f83b2000000498b4424384c39f8730abe0e000000e99e" +"00000089d348894424084489bfd00100008d93c0000000895424048d8bf0" +"000000890c2448897c24104c89e74489fee8000000008d75d04c89e78b54" +"24048b0c24e800000000418db6c00000008d53604c89e7b960000000e800" +"0000004c89e74489f64489fab960000000e8000000004183c6604c89e744" +"89f689dab960000000e800000000be0d000000488b7c24104939ed730cbe" +"0e00000048396c240873134883c4185b415c415d415e415f5de900000000" +"89afd00100004883c4185b415c415d415e415f5dc3904157415641545350" +"89cb4189d64189f74989fce800000000418d7730418d56308d4b304c89e7" +"e800000000418d7760418d56608d4b604c89e7e800000000418db7900000" +"00418d96900000008d8b900000004c89e7e800000000418db7c000000041" +"8d96c00000008d8bc00000004c89e7e8000000004181c7f00000004181c6" +"f000000081c3f00000004c89e74489fe4489f289d94883c4085b415c415e" +"415fe90000000066662e0f1f840000000000554157415641554154534883" +"ec284189d04889f8488b7f104c8b50308b9fd00100008d53d041b90d0000" +"004939d20f83d40100004c8b48384939d1730b41b90e000000e9c0010000" +"4c894c24088997d00100004c895424204c8b48104d8b897801000089c944" +"894424044d8b0409498b6c090849bfabaafffffffffeb94d29c741bd0000" +"00004d19ed4d8b5c09284c895c24184d8b5409204c895424104d8b640918" +"4909e84d09d34d09c34d09e38934244d89ea4929ea498b6c09104983dd00" +"48b90000ac4e010054e14531c04939ca410f97c04d01e849c1f83f4c89c1" +"4829e94983d80049bddb094f095f2dcf984531f64c39e9410f97c64d01c6" +"49c1fe3f4d89f04d29e04983de0048be40ed7a0c7bb4889b4531ed4939f0" +"410f97c54d01f549c1fd3f4c89ee482b7424104983dd0049be2853b4bc49" +"58e4b44531e44c39f6410f97c44d01ec49c1fc3f4c2b64241849be9ae67f" +"39ea11011a4d01e64909eb49bbffff53b1feffab1e4f8d141a41bb000000" +"004d0f44d34d895411084d0f44fb4d893c1149ba24f6b0f6a0d230674a8d" +"0c11490f44cb49894c111048b9bf1285f3844b7764498d0c08490f44cb49" +"894c111848b9d7ac4b43b6a71b4b488d0c0e490f44cbbe0000000049894c" +"11204c0f44f64d897411284989ff4889c78b34248b4c2404e80000000041" +"b90d0000004c89ff48395c2420730d41b90e00000048395c240873164489" +"ce4883c4285b415c415d415e415f5de900000000899fd00100004883c428" +"5b415c415d415e415f5dc3666666662e0f1f840000000000554157415641" +"55415453504189d04889f8488b7f104c8b70308b9fd00100008d53d041b9" +"0d0000004939d60f832c0100004c8b78384939d7730b41b90e000000e918" +"0100008997d00100004c8b8f780100004589c34189cac4817e6f441108c4" +"817dd44c190862f3f5281ec001c4e37930d003c4e37930c802c4e37930d8" +"01c5fb93e8c57b93c24f8b24194b8b4c1928440fb6dd4183e3014b034c11" +"284f0324114d892411c4c1f97ec94983d1004c8b97780100004d894c1208" +"c57b93c9c57b93d3c4c3f916cc014d11e34c8baf780100004d895c151045" +"0fb6d24183e2014d39e3c4e37d39c801c4c1f97ec34d11da4c8ba7780100" +"004d89541418450fb6c94183e1014d39dac4c3f916c2014d11d14c8b9f78" +"0100004d894c1320450fb6c04183e0014d39d14911c8488b8f780100004c" +"894411284989fc4889c7c5f877e80000000041b90d0000004c89e74939de" +"730b41b90e0000004939df73164489ce4883c4085b415c415d415e415f5d" +"e900000000899fd00100004883c4085b415c415d415e415f5dc30f1f8400" +"00000000554157415641554154534883ec284989fc488b7f10498b6c2430" +"448bafd0010000458db570ffffffb80d0000004c39f50f83aa000000498b" +"4424384c39f0730ab80e000000e99600000089d348894424184489b7d001" +"00008d4b30894c240c48897c24204c89e74189f74489f6e800000000418d" +"75a0897424144c89e789da8b4c240ce800000000418d75d0897424104c89" +"e789da89d9e8000000004c89e74489fe4489f28b4c2414e8000000004183" +"c7304c89e74489fe8b5424108b4c240ce800000000b80d000000488b7c24" +"204c39ed730cb80e0000004c396c2418731589c64883c4285b415c415d41" +"5e415f5de9000000004489afd00100004883c4285b415c415d415e415f5d" +"c30f1f4400005541574156535089cb89d54189f64989ffe8000000004183" +"c63083c53083c3304c89ff4489f689ea89d94883c4085b415e415f5de900" +"0000000f1f80000000005541574156535089cb89d54189f64989ffe80000" +"00004183c63083c53083c3304c89ff4489f689ea89d94883c4085b415e41" +"5f5de9000000000f1f8000000000554157415641554154534881ecf80000" +"004989f9488b47104c8b47304889c78b80d0010000448d9040fcffffb90d" +"0000004d39d00f8349200000498b49384c39d1730ab90e000000e9362000" +"0048898c24c00000004889f9448997d00100008db880feffff4889042448" +"8b81780100004989cf4189d54a8b14284c898424f00000004a8b4c280849" +"8b411089b424b40000004c8b807801000089d64889c889c148894c24384c" +"89cd4989f14c0fafc948c1ea204c899424a80000004989d24c0fafd148c1" +"e82048894424304989f34c0fafd831db4d01d30f92c34d89da49c1e22049" +"89d64c0faff048c1e32049c1eb204d01f34d01ca4d8914384911db4d895c" +"3808488b04248db890feffff4c89f84d8b87780100004f8b4c28104c8b45" +"104d8b80780100004489cb48895c24284989db4c0fafde4889d1480fafda" +"49c1e9204d89ce4c0faff64531ff4901de410f92c74c89f348c1e3204d89" +"cc4c0fafe249c1e72049c1ee204d01e64c01db49891c384d11fe4d897438" +"08488bb8780100004889c24e8b5c2f184489db48895c24084989d84c0faf" +"c6480fafd949c1eb204d89de4c0faff64531ff4901de410f92c74c89f34d" +"89dc4c0fafe149c1ee204d01e6488b0424448da0a0feffff48c1e32049c1" +"e7204c01c34889ef4c8b45104d8b80780100004b891c204d11fe4f897420" +"084c8b82780100004989d248895424504f8b7c28204589fc4c896424404c" +"89e3480fafde4c0fafe149c1ef204d89f84c0fafc631ed4d01e0400f92c5" +"4d89fc4c0fafe14c89c049c1e8204d01e048c1e02048c1e5204801d8488b" +"5f10488b9b78010000488b1424448da2b0feffff4a8904234911e84e8944" +"2308498b82780100004e8b6c28284489eb48895c24204889dd4889742418" +"480fafee48894c2410480fafd949c1ed204d89e84c0fafc64531e44901d8" +"410f92c44c89eb480fafd94c89c049c1e8204901d848c1e02049c1e42048" +"01e8488b5f10488b9b78010000488b2c248dadc0feffff4889042b4d11e0" +"4c89442b084c8b7424284c89f0488b4c2438480fafc14c89f3488b542430" +"480fafda4d89c84c0fafc14531e44901d8410f92c44c89cb480fafda4c89" +"c549c1e8204901d848c1e52049c1e4204801c5488b4710488b8078010000" +"488b1c248d9be0feffff48892c184d11e04c894418084c8b5424084c89d0" +"480fafc14c89d3480fafda4d89d84c0fafc14531e44901d8410f92c44c89" +"db480fafda4c89c549c1e8204901d848c1e52049c1e4204801c5488b4710" +"488b8078010000488b1c248d9bf0feffff48892c184d11e04c8944180848" +"8b5c24404889d8480fafc1480fafda4d89f84c0fafc14531e44901d8410f" +"92c44c89fb480fafda4c89c549c1e8204901d848c1e52049c1e4204801c5" +"488b4710488b8078010000488b1c248d9b00ffffff48892c184d11e04c89" +"441808488b7424204889f0480fafc14889f3480fafda4d89e84c0fafc145" +"31e44901d8410f92c44c89eb480fafda4c89c549c1e8204901d848c1e520" +"49c1e4204801c5488b4710488b8078010000488b1c248d9b10ffffff4889" +"2c184d11e04c894418084c89d0490fafc64c89d3490fafd94d89d84d0faf" +"c64531e44901d8410f92c44c89db490fafd94c89c549c1e8204901d848c1" +"e52049c1e4204801c5488b47104889fa488b8078010000488b1c248d9b30" +"ffffff48892c184d11e04c89441808488b4c24404889c8490fafc64889cb" +"490fafd94d89f84d0fafc64531e44901d8410f92c44c89fb490fafd94c89" +"c549c1e8204901d848c1e52049c1e4204801c5488b4710488b8078010000" +"488b1c248d9b40ffffff48892c184d11e04c894418084889f0490fafc648" +"89f3490fafd94d89e84d0fafc64531e44901d8410f92c44c89eb490fafd9" +"4c89c549c1e8204901d848c1e52049c1e4204801c5488b4710488b807801" +"0000488b1c248d9b50ffffff48892c184d11e04c894418084889c8490faf" +"c24889cb4989ce490fafdb4d89f84d0fafc24531e44901d8410f92c44c89" +"fb490fafdb4c89c549c1e8204901d848c1e52049c1e4204801c5488b4710" +"488b8078010000488b1c248d9b70ffffff48892c184d11e04c8944180848" +"89f0490fafc24889f3490fafdb4d89e84d0fafc24531e44901d8410f92c4" +"4c89eb490fafdb4c89c549c1e8204901d848c1e52049c1e4204801c5488b" +"4710488b8078010000488b1c248d5b8048892c184d11e04c894418084889" +"f34889f0480fafc1490fafdf4d89e84c0fafc14531e44901d8410f92c44c" +"89eb490fafdf4c89c549c1e8204901d848c1e52049c1e4204801c5488b47" +"10488b8078010000488b1c248d5ba048892c184d11e04c89441808488b4c" +"24104889c8488b742418480fafc64989c0480fafc948c1e81f89c34801cb" +"4889f1480fafce49c1e02148bf00000000010000004821f84901c8488b4a" +"10488b89780100004c8b2424458da424d0feffff4e8904214811c34a895c" +"2108488b7424304889f0488b5c2438480fafc34889c1480faff648c1e81f" +"4189c04901f0488b342481c620ffffff480fafdb48c1e1214821f84801d9" +"488b5a10488b9b7801000048890c334911c04c89443308488b04240560ff" +"ffff488b4a104889d5488b89780100004c89ce488b542428480faff2480f" +"afd24989f049c1e0214d0fafc948c1ee1f89f34821fe4c01cb4901d04c89" +"04014811f348895c0108488b042483c090488b4d10488b89780100004c89" +"de490faff24d0fafd24989f049c1e0214d0fafdb48c1ee1f4189f14821fe" +"4889fb4d01d94d01d04c8904014911f14c894c0108488b042483c0b0488b" +"4d10488b89780100004c89fe490faff64d0faff64889f748c1e7214d0faf" +"ff48c1ee1f4189f04821de4d01f84c01f748893c014911f04c8944010848" +"8b042483c0c0488b4d10488b89780100004c89ee488b542420480faff248" +"0fafd24889f748c1e7214d0fafed48c1ee1f4189f04821de4d01e84801d7" +"48893c014911f04c89440108488b04248db070feffff4c8b642450498b84" +"24780100004c8bac24a80000004e8bb4289002000048b9fdfffcfffcfff3" +"894c89f0480fafc1488b5510488bba7801000089c24989df4c8d9babaaff" +"ff4c895c24204989d04d0fafc3488d8bfffffeb94989d14c0fafc948894c" +"244048c1e8204989c24d0fafd34531db4d01ca410f92c34d89d149c1e120" +"4889c3480fafd949c1e32049c1ea204901da4d01c14c890c374d11da4c89" +"543708488b342481c660feffff488b7d10488bbf780100004d8d9fffff53" +"b14c895c24304989d04d0fafc34c69cafeffab1e4989c24d0fafd34d01ca" +"4d89d149c1e1204c69d8feffab1e49c1ea204d01c14c890c374d11da4c89" +"5437084d8d8f24f6b0f64c894c24384889d6490faff14869faa0d2306749" +"89c04d0fafc14531c94901f8410f92c14c89c74c69d0a0d2306749c1e820" +"4d01d04c8b14244181c250feffff48c1e72049c1e1204801f7488b751048" +"8bb6780100004a893c164d11c84e894416084981c7bf1285f34c897c2428" +"4889d6490faff74869fa844b77644989c04d0fafc74531c94901f8410f92" +"c14c89c74c69d0844b776449c1e8204d01d04c8b14244181c240feffff48" +"c1e72049c1e1204801f7488b7510488bb6780100004a893c164d11c84e89" +"441608488b342481c630feffff4869fad7ac4b434c69c2b6a71b4b4c69c8" +"d7ac4b434d01c14d89c849c1e0204c69d0b6a71b4b49c1e9204901f8488b" +"7d10488bbf780100004c8904374d11d14c894c3708488b342481c620feff" +"ff488b7d10488bbf780100004c69c29ae67f394869d2ea11011a4c69c89a" +"e67f394901d14c89ca48c1e2204869c0ea11011a49c1e9204c01c2488914" +"374911c14c894c3708488b042405d8feffff498bb424780100004d89e14a" +"8b8c2e4002000048894c2408488d14094889542410488b0406488d3c024e" +"8b942e200200004a8d14174983e6fd4e03b42e30020000488b0c248d8978" +"feffff488b340e4811d64889f149b8fdfffcfffcfff389490fafc84189cd" +"4d89e84c8b6424204d0fafc44c89eb4c8b7c2440490fafdf48c1e9204989" +"cb4d0fafdc4531e44901db410f92c44889cb490fafdf4d89df49c1eb2049" +"01db49c1e72049c1e4204d01c74d11e34c8b45104d8b8078010000488b1c" +"2481c310feffff4d893c184d895c18084989c8488b5c24304c0fafc34d69" +"ddfeffab1e4d01d84d89eb4c0fafdb4c89c348c1e32049c1e8204c69f9fe" +"ffab1e4c01db4d11f84c8b5d104d8b9b780100004c8b3c244181c700feff" +"ff4b891c3b4f89443b084d89e8488b5c24384c0fafc34989cb4c0fafdb49" +"69dda0d230674531ff4901db410f92c74c89db49c1eb204c69e1a0d23067" +"4d01e348c1e32049c1e7204c01c34d11fb4c8b45104d8b80780100004c8b" +"3c244181c790fdffff4b891c384f895c38084d89e8488b5c24284c0fafc3" +"4989cb4c0fafdb4969dd844b77644531ff4901db410f92c74c89db49c1eb" +"204c69e1844b77644d01e348c1e32049c1e7204c01c34d11fb4c8b45104d" +"8b80780100004c8b3c244181c720fdffff4b891c384f895c38084d69c5b6" +"a71b4b4c69d9d7ac4b434d01c34d89d849c1e02049c1eb204969ddd7ac4b" +"434c69f9b6a71b4b4901d84d11fb488b5d10488b9b780100004c8b3c2441" +"81c7b0fcffff4e89043b4e895c3b084d69c5ea11011a4c69d99ae67f394d" +"01c34d69c59ae67f394c89db48c1e3204869c9ea11011a49c1eb204c01c3" +"4911cb31c94839d60f92c14901fa488b5510488b92780100004c8bb424a8" +"0000004a891c324c8b0424458d9068feffff4e895c32084d8b8178010000" +"4b130c10488b142481c288feffff498b3c1048897c24184b8b9430500200" +"004c8d1417488b7c2408490fa4fa0148034424104f139430e00200004b8b" +"8430100200004889442410410f92c54c01d04531db4801c1410f92c34b03" +"b430d0010000488b04248d8018feffff498b3c004b8b8430c00100004889" +"4424084883d7004801c831f64801c7400f92c648897424484889fe48b8fd" +"fffcfffcfff389480faff089f04989c04c8b4c24204d0fafc14889c34c8b" +"742440490fafde48c1ee204989f74d0faff94531e44901df410f92c44889" +"f3490fafde4d89fe49c1ef204901df49c1e62049c1e4204d01c64d11e74c" +"8b45104d8b8078010000488b1c2481c3f0fdffff4d8934184d897c180849" +"89f04c8b4c24304d0fafc14869d8feffab1e4901d84889c3490fafd94d89" +"c649c1e62049c1e8204c69fefeffab1e4901de4d11f8488b5d10488b9b78" +"0100004c8b3c244181c7e0fdffff4e89343b4e89443b084989c04c8b4c24" +"384d0fafc14889f3490fafd94c69f0a0d230674531ff4c01f3410f92c749" +"89de48c1eb204c69e6a0d230674c01e349c1e62049c1e7204d01c64c11fb" +"4c8b45104d8b80780100004c8b3c244181c7d0fdffff4f8934384b895c38" +"084989c04c8b4c24284d0fafc14889f3490fafd94c69f0844b77644531ff" +"4c01f3410f92c74989de48c1eb204c69e6844b77644c01e349c1e62049c1" +"e7204d01c64c11fb4c8b45104d8b80780100004c8b3c244181c7c0fdffff" +"4f8934384b895c38084c69c0b6a71b4b4869ded7ac4b434c01c34989d849" +"c1e02048c1eb204c69f0d7ac4b434c69feb6a71b4b4d01f04c11fb4c8b75" +"104d8bb6780100004c8b3c244181c7b0fdffff4f89043e4b895c3e084c69" +"c0ea11011a4869de9ae67f394c01c34869c09ae67f394989d849c1e02048" +"69f6ea11011a48c1eb204901c04811f3488b4510488b8078010000488b34" +"2481c6a0fdffff4c89043048895c30084180c5ff488b04248db028ffffff" +"488b442450488b8078010000488b34304883d6004989f04889b424800000" +"004803542418488b34248db698feffff4c8b2c304983d5004c0354241048" +"8b34248db658feffff4c131c3048034c2408488b0c248d8908feffff488b" +"742448481334084c8b9424a80000004e8b8c10600200004c894c24704a8b" +"8c10a002000048894c24784f8d34294901ce490fa4d6014a8b8c10000200" +"0048894c24604f8d3c064c01f931d24901cb0f92c248895424084a8b8c10" +"5001000048894c24584c01d931d24801ce48897424480f92c24889542418" +"4a03bc10b0010000488b0c248d89f8fdffff4c8b0c084a8b8410a0010000" +"48894424684983d1004801f031c94901c10f92c148894c24104c89ce48b8" +"fdfffcfffcfff389480faff089f74989f8488b5c24204c0fafc34889f948" +"8b442440480fafc848c1ee204889f2480fafd331db4801ca0f92c34989f4" +"4c0fafe04889d148c1ea204c01e248c1e12048c1e3204c01c14811da4c8b" +"45104d8b8078010000488b1c2481c380fdffff49890c1849895418084889" +"f1488b442430480fafc84869d7feffab1e4801d14889fa480fafd04989c8" +"49c1e02048c1e9204869defeffab1e4901d04811d9488b5510488b927801" +"0000488b1c2481c370fdffff4c89041a48894c1a084889f9488b44243848" +"0fafc84889f2480fafd04c69c7a0d2306731db4c01c20f92c34989d048c1" +"ea204c69e6a0d230674c01e249c1e02048c1e3204901c84811da488b4d10" +"488b8978010000488b1c2481c360fdffff4c89041948895419084889f948" +"8b442428480fafc84889f2480fafd04c69c7844b776431db4c01c20f92c3" +"4989d048c1ea204c69e6844b77644c01e249c1e02048c1e3204901c84811" +"da488b4d10488b8978010000488b1c2481c350fdffff4c89041948895419" +"084869cfb6a71b4b4869d6d7ac4b434801ca4889d148c1e12048c1ea204c" +"69c7d7ac4b434869deb6a71b4b4c01c14811da4c8b45104d8b8078010000" +"488b1c2481c340fdffff49890c1849895418084869cfea11011a4869d69a" +"e67f394801ca4869c79ae67f394889d148c1e1204869f6ea11011a48c1ea" +"204801c14811f2488b4510488b8078010000488b342481c630fdffff4889" +"0c3048895430084c035c2458488b04248d8898fdffff488b442450488b80" +"78010000488b7c241848133c0848897c24184c037c2460488b0c248d8948" +"feffff4c8b4424084c1304084c894424084c036c2470488b0c248d89a8fe" +"ffff488b0c084883d1004c036c2478488b14248d92e8feffff488b141048" +"83d200488b7424484803742468488b34248db6e8fdffff4c8b5c24104c13" +"1c304c89d64a8b9c107002000048899c24880000004e8b9410b00200004c" +"895424604c8d3c194d01d74531d24901d7410f92c24c895424784d0facfd" +"3f4c03b424800000004c13ac30200300000f92442470488b9430f0010000" +"48899424900000004c01c24531f64901d5410f92c6488b9430e000000048" +"899424a00000004801fa31ff4901d5400f92c74889bc2480000000488b94" +"309001000048895424684c01ea4531c04c89df4801d748897c2410410f92" +"c04c894424484c038c3040010000488b14248d9288fdffff4c8b1410488b" +"84303001000048898424980000004983d2004801f831d24901c20f92c248" +"895424584c89d248b8fdfffcfffcfff389480fafd04189d34d89d8488b5c" +"24204c0fafc34c89d84c8b4c2440490fafc148c1ea204889d7480faffb31" +"db4801c70f92c34989d44d0fafe14889f848c1ef204c01e748c1e02048c1" +"e3204c01c04811df4c8b45104d8b8078010000488b1c2481c310fdffff49" +"89041849897c18084889d04c8b442430490fafc04969fbfeffab1e4801f8" +"4c89df490faff84989c049c1e02048c1e8204869dafeffab1e4901f84811" +"d8488b7d10488bbf78010000488b1c2481c300fdffff4c89041f4889441f" +"084c89d84c8b442438490fafc04889d7490faff84d69c3a0d2306731db4c" +"01c70f92c34989f848c1ef204c69e2a0d230674c01e749c1e02048c1e320" +"4901c04811df488b4510488b8078010000488b1c2481c3f0fcffff4c8904" +"1848897c18084c89d84c8b442428490fafc04889d7490faff84d69c3844b" +"776431db4c01c70f92c34989f848c1ef204c69e2844b77644c01e749c1e0" +"2048c1e3204901c04811df488b4510488b8078010000488b1c2481c3e0fc" +"ffff4c89041848897c18084969c3b6a71b4b4869fad7ac4b434801c74889" +"f848c1e02048c1ef204d69c3d7ac4b434869dab6a71b4b4c01c04811df4c" +"8b45104889ac24b80000004d8b8078010000488b1c2481c3d0fcffff4989" +"041849897c18084969c3ea11011a4869fa9ae67f394801c74969c39ae67f" +"394989f849c1e0204869d2ea11011a48c1ef204901c04811d7488b451048" +"8b8078010000488b142481c2c0fcffff4c89041048897c100880442470ff" +"488b04248d9068ffffff488b442450488b8078010000488b14104883d200" +"4989d0488954247048038c2488000000488b14248d92b8feffff488b3c10" +"4883d70048034c2460488b0c248d89f8feffff4c8b5c24784c131c08488b" +"4c240848038c2490000000488b0c248d8938feffff4c133408488b4c2418" +"48038c24a0000000488b0c248d8928fdffff488bac248000000048132c08" +"4c036c2468488b0c248d89d8fdffff488b5c244848131c08488b4c241048" +"038c2498000000488b0c248d8978fdffff488b542458481314084989f548" +"8b8c308002000048898c24c8000000488bb430c00200004889b424d00000" +"004801f94801f14531c94c01d948898c24d8000000410f92c14a8bb428f0" +"0200004889b424e00000004c8d24314d0fa4fc014a8b8c28e00100004889" +"8c24e80000004b8d34044889b424880000004c8d040e31c94d01c64c89b4" +"24980000000f92c148898c24900000004a8b4c287048898c24a00000004d" +"8d040e31f64889e94c01c148898c2480000000400f92c648897424584a8b" +"b4288001000048897424604c8d043131c94889de4c01c648897424480f92" +"c148894c24084a8b8c282001000048894c24684c8d040e31f64c01c2400f" +"92c648897424104e039428d0000000488b34248db618fdffff4c8b04304e" +"8bb428c00000004983d0004a8d04324889d631c94901c04c894424780f92" +"c148894c241848b9fdfffcfffcfff389490fafc84189cb4c89d8488b6c24" +"20480fafc54d89d84c8b7c24404d0fafc748c1e920480fafe931db4c01c5" +"0f92c34c0faff94d89f84989ef48c1ed204c01c549c1e72048c1e3204901" +"c74811dd4c8b9424b8000000498b4210488b80780100004c8b04244181c0" +"a0fcffff4e893c004a896c00084c89d84c8b7c2430490fafc74c0faff94d" +"69c3feffab1e4d01c74d89f849c1e02049c1ef204869d9feffab1e4901c0" +"4911df498b4210488b8078010000488b1c2481c390fcffff4c8904184c89" +"7c18084c89d8488b6c2438480fafc5480fafe94d69c3a0d2306731db4c01" +"c50f92c34989e848c1ed204c69f9a0d230674c01fd49c1e02048c1e32049" +"01c04811dd498b4210488b8078010000488b1c2481c380fcffff4c890418" +"48896c18084c89d8488b6c2428480fafc5480fafe94d69c3844b776431db" +"4c01c50f92c34989e848c1ed204c69f9844b77644c01fd49c1e02048c1e3" +"204901c04811dd498b4210488b8078010000488b1c2481c370fcffff4c89" +"041848896c18084969c3b6a71b4b4c69c1d7ac4b434901c04c89c048c1e0" +"2049c1e8204969dbd7ac4b434c69f9b6a71b4b4801d84d11f8498b5a1048" +"8b9b780100004c8b3c244181c760fcffff4a89043b4e89443b084969c3ea" +"11011a4c69c19ae67f394901c04969c39ae67f394d89c349c1e3204869d9" +"ea11011a49c1e8204901c34911d8498b4210488b8078010000488b1c2481" +"c350fcffff4c891c184c894418084803bc24c8000000488b04248d80c8fe" +"ffff488b4c2450488b89780100004c8b1c014983d3004803bc24d0000000" +"488b04248d8008ffffff4c130c014c8bbc24d80000004c03bc24e0000000" +"488b04248d8038ffffff488b04014883d000488b9424e800000048019424" +"88000000488b14248d9228feffff488bac249000000048132c11488b9424" +"9800000048039424a0000000488b14248d92b8fcffff488b5c245848131c" +"11488b9424800000004803542460488b14248d92c8fdffff4c8b5424084c" +"1314114c89542408488b5424484803542468488b14248d9268fdffff4c8b" +"5424104c1314114c895424104c01f6488b14248d9208fdffff488b742418" +"48133411488974241831f64e039c29d0020000400f92c64d01cb488b1424" +"8d9218ffffff4813341131d24e039c29000300000f92c24901c3488b0424" +"8d8048ffffff48131401488b042483c0984d89fa4d0facda3f4c03642470" +"488b04014e139429500300004883d000488b3c2481c778ffffff4c8b3c39" +"4531c94a03b42910030000410f92c14801d6488b14248d9258ffffff4c13" +"0c114a03b429300300004983d700490facf33f4889ea4c01d24d89d84911" +"c04531e44a031429410f92c44801da488b3c248dbf48fcffff4c13243945" +"31f64a03942970010000410f92c64d01e031db4e038429600100000f92c3" +"4803542408488b3c248dbfb8fdffff4c13343931ff4e038c294003000040" +"0f92c74d01f94c8b3c24458d7f884a133c394c0facce3f4d01c64c8b0424" +"458d80a8fdffff4a131c014901c3488b04248d40b84c8b04014a13b42970" +"0300004983d0004901ea4d11e34811de0f92c3488b0424448da038fdffff" +"4531d24d89eb4a03942910010000410f92c24531ff4e03b4290001000041" +"0f92c74803542410488b04248d8058fdffff4c1314014531ed4a03b419f0" +"000000410f92c54d01f2488b04248d8048fdffff4c133c01488b042483c0" +"a8488b2c014a03bc19600300004883d500490facf93f4901f74b8d04084e" +"132c2180c3ff4911c5400f92c6488b04240558fcffff480facef3f48c1ed" +"3f4a03bc198003000048132c014d01c14883d7000f92442438488b042444" +"8da0c8fcffff4531f64a039419b0000000410f92c631db4e039419a00000" +"00488b0424448d80d8fcffff0f92c34803542418488b04248d80f8fcffff" +"4c1334014531c94e03bc1990000000410f92c14d01d6488b04248d80e8fc" +"ffff48131c014531d24e03ac1980000000410f92c24c01fb4e130c014d01" +"e94e1314214080c6ff4911fa0f924424304531ed4a03541950410f92c548" +"8b042405a8fcffff488b0401488b7424784a037419604883d0004531e44e" +"03741940410f92c44531ff4e03541910410f92c731f64e034c1920400f92" +"c64531c04a035c1930410f92c04801d0488b14248d9268fcffff488b1411" +"4889542428488b14248d9278fcffff488b14114889542420488b14248d92" +"88fcffff488b3c114a89841990030000488b04248d8898fcffff488b5424" +"50488b82780100004c132c084d01f54e89ac18980300004911fc4901dc48" +"8b82780100004e89a418a00300004c134424204d01c84813742428488b82" +"780100004e898418a80300004a8d0416488b8a780100004a898419b00300" +"00488b042483c0c880442438ff488b8a780100004889d748132c01804424" +"30ff4883d5004c01d64911ef4e89bc19b8030000488b04248d50d04889fb" +"488bbc24b80000008bb424b4000000e800000000488b0424b90d00000048" +"89df48398424f0000000730fb90e00000048398424c0000000731889ce48" +"81c4f80000005b415c415d415e415f5de9000000008987d00100004881c4" +"f80000005b415c415d415e415f5dc3666666662e0f1f8400000000005541" +"57415641554154534883ec584189d489f24989fe488b7f10498b46308b9f" +"d0010000448dbb00f7ffffbe0d0000004c39f80f83e703000089cd498b4e" +"384c39f9730abe0e000000e9d203000048894c24384489bfd00100004889" +"7c24504c89f74489fe48895424404489e289e94889442448e8000000008d" +"b320f8ffff89742434418d9424200100008954240c448dad200100004c89" +"f74489e9e8000000008db340f9ffff897424104c89f789ea4489e9e80000" +"00008db370f9ffff8d55308d8d500100004c89f7e8000000008db3a0f9ff" +"ff8d55608d8d800100004c89f7e8000000008db3d0f9ffff8d9590000000" +"8d8db00100004c89f7e8000000008db300faffff8d95c00000008d8de001" +"00004c89f7e8000000008db330faffff8d95f000000081c5100200004c89" +"f789e9e8000000008dab60faffff4c89f789ee8b54240c4489e1e8000000" +"008db390faffff418d942450010000418d4c24304c89f7e8000000008db3" +"c0faffff418d942480010000418d4c24604c89f7e8000000008db3f0faff" +"ff418d9424b0010000418d8c24900000004c89f7e8000000008db320fbff" +"ff418d9424e0010000418d8c24c00000004c89f7e8000000008db350fbff" +"ff418d9424100200004181c4f00000004c89f74489e1e800000000448da3" +"80fbffff4c89f74489e689ea8b4c2410e8000000008db3a0fcffff897424" +"204c89f74489e24489f9e8000000008db3d0fcffff8974241c8d93b0fbff" +"ff8d8b30f7ffff894c24104c89f7e8000000008db300fdffff897424188d" +"93e0fbffff8d8b60f7ffff894c240c4c89f7e8000000008db330fdffff89" +"7424148d9310fcffff8d8b90f7ffff894c24304c89f7e8000000008dab60" +"fdffff8d9340fcffff8d8bc0f7ffff894c242c4c89f789eee80000000044" +"8dab90fdffff8d9370fcffff8d8bf0f7ffff894c24244c89f74489eee800" +"0000008db3c0fdffff897424284c89f78b542420448b6424344489e1e800" +"0000008db3f0fdffff8d8b50f8ffff4c89f78b54241ce8000000008db320" +"feffff8d8b80f8ffff4c89f78b542418e8000000008db350feffff8d8bb0" +"f8ffff4c89f78b542414e8000000008db380feffff8d8be0f8ffff4c89f7" +"89eae8000000008db3b0feffff8d8b10f9ffff4c89f74489eae800000000" +"8dabe0feffff4c89f789ee4489e2e8000000004c89f74c8b6424404489e6" +"89ea4489f9e800000000418d7424308d9310ffffff4c89f78b4c2410e800" +"000000418d7424608d9340ffffff4c89f78b4c240ce800000000418db424" +"900000008d9370ffffff4c89f78b4c2430e800000000418db424c0000000" +"8d53a04c89f78b4c242ce800000000418db424f00000008d53d04c89f78b" +"4c2424e8000000004181c4200100004c89f74489e68b542428b920010000" +"e800000000be0d000000488b7c245048395c2448730cbe0e00000048395c" +"243873134883c4585b415c415d415e415f5de900000000899fd001000048" +"83c4585b415c415d415e415f5dc30f1f8400000000005541574156415541" +"5453504889fb488b7f104c8b6330448bbfd0010000458db7c0fdffffb80d" +"0000004d39f473564c8b6b384d39f57307b80e000000eb4689d14489b7d0" +"01000048893c244889df89f54489f689eae8000000004889df89ee4489f2" +"b940020000e800000000b80d000000488b3c244d39fc730ab80e0000004d" +"39fd731589c64883c4085b415c415d415e415f5de9000000004489bfd001" +"00004883c4085b415c415d415e415f5dc390554157415641554154534883" +"ec784989fe488b7f10498b4e30448bafd0010000458da540f9ffffb80d00" +"00004c39e10f8318060000498b46384c39e0730ab80e000000e905060000" +"4189d748894424604489a7d001000048897c24704c89f7897424544489e6" +"4c8964245848894c2468b960000000e800000000418db5a0f9ffff897424" +"28418d57608954244c4c89f7b960000000e800000000418db500faffff89" +"742450418d97c0000000895424404c89f7b960000000e800000000418db5" +"60faffff89742438418d97200100008954243c4c89f7b960000000e80000" +"0000418db5c0faffff89742434418daf800100004c89f789ea896c240cb9" +"60000000e800000000418db520fbffff8974242c418d97e0010000895424" +"1c4c89f7b960000000e800000000418d9de0feffff4c89f789de4489fa89" +"e9e800000000418dad80fbffff4c89f789ee896c241889dab960000000e8" +"00000000418db5e0fbffff89742408418d9540ffffff895424304c89f7b9" +"60000000e8000000004c89f74489e689ea4489f94d89fc4c897c2420e800" +"000000458dbd70f9ffff418d95b0fbffff89542414418d4c24304c89f744" +"89fee8000000004c89f789de4c8b6424584489e24489e1e800000000418d" +"ad10ffffff4c89f789ee896c24104489fa4489f9e8000000004c89f74489" +"e689da8b4c2418e8000000004c89f74489fe89ea8b4c2414e8000000004c" +"89f7448b6424344489e68b5424088b4c240ce800000000418dadf0faffff" +"418d9510fcffff8954240c488b4424208d88b00100004c89f789eee80000" +"00004c89f789de4489e24489e1e8000000004c89f7448b7c24104489fe89" +"ea89e9e8000000004c89f74489e689da8b4c2408e8000000004c89f789ee" +"4489fa8b4c240ce8000000004c89f789de8b54243c8b4c2440e800000000" +"458da540fcffff4c89f74489e6448964240c89da895c2444b960000000e8" +"00000000418db5a0fcffff897424144c89f78b6c243089eab960000000e8" +"000000004c89f789de448b7c244c4489fa8b4c241ce800000000418db500" +"fdffff897424184c89f789dab960000000e800000000418db560fdffff89" +"7424484c89f789eab960000000e8000000004c89f78b5c242889de4489e2" +"4489f9e800000000418dadd0f9ffff418d9570fcffff89542408488b4424" +"208d88900000004c89f789eee8000000004c89f7448b6424444489e689da" +"89d9e8000000004c89f7448b7c24104489fe89ea89e9e8000000004c89f7" +"89de4489e28b4c240ce8000000004c89f789ee4489fa8b4c2408e8000000" +"004c89f78b5c242c89de8b5424148b4c241ce800000000418dad50fbffff" +"418d95d0fcffff8954241c488b4424208d88100200004c89f789eee80000" +"00004c89f74489e64589e789da89d9e8000000004c89f7448b6424104489" +"e689ea89e9e8000000004c89f789de4489fb4489fa8b4c2414e800000000" +"4c89f789ee4489e28b4c241ce800000000418dad90fdffff4c89f74489fe" +"448b7c24484489fa89e9e8000000004c89f74489e64489fa89e9e8000000" +"004c89f78b6c240c89ee89dab960000000e8000000004c89f7448b642438" +"4489e689ea8b4c243ce800000000418dad90faffff488b4424208d885001" +"00004c89f789ee8b542408e8000000004c89f789de4489e24489e1e80000" +"00004c89f7448b7c24104489fe89ea89e9e8000000004c89f74489e689da" +"8b4c240ce8000000004c89f789ee4489fa8b4c2408e8000000004c89f744" +"8b7c24504489fe8b5424188b4c2440e800000000418dad30faffff418d95" +"30fdffff89542408488b4c242081c1f00000004c89f789eee8000000004c" +"89f789de4489fa4489f9e8000000004c89f7448b6424104489e689ea89e9" +"e8000000004c89f74489fe89da8b4c2418e8000000004c89f789ee4489e2" +"8b4c2408e800000000418dadc0fdffff4c89f789ee488b542458b9600000" +"00e800000000418db520feffff4c89f78b542428b960000000e800000000" +"418db580feffff4c89f74489fab960000000e8000000004c89f789de8b54" +"2438b960000000e8000000004c89f78b7424308b542434b960000000e800" +"000000418d75a04c89f78b54242cb960000000e8000000004c89f7448b7c" +"24544489fe89eab920010000e8000000004181c7200100004c89f74489fe" +"89dab920010000e800000000b80d000000488b7c24704c396c2468730cb8" +"0e0000004c396c2460731589c64883c4785b415c415d415e415f5de90000" +"00004489afd00100004883c4785b415c415d415e415f5dc30f1f84000000" +"0000554157415641554154534883ec588954241089f24989fe488b7f1049" +"8b46308b9fd0010000448dab80fbffffbe0d0000004c39e80f8301020000" +"498b4e384c39e9730abe0e000000e9ee010000488954242848894c242048" +"8944243048897c24404489afd00100004c89f74489eee80000000048895c" +"24388d83c0fdffff8944241431dbbd3f00000049bf00000100000001d24c" +"897424184c896c2408eb28be0e00000049bf00000100000001d2e8000000" +"004c8b6c24084c8b7424184883c5ff0f83fb000000b801000000c462d1f7" +"e085db743b4c89f78b5c241489de4489eae8000000004c89f74489ee89da" +"b940020000e800000000bb010000004d85fc751bebb96666662e0f1f8400" +"0000000031db4d85fc0f95c34d85fc74a0498b7e104d8b7e30448ba7d001" +"0000458dac24c0fdffffbe0d0000004d39ef0f8362ffffff498b46384c39" +"e80f8250ffffff48894424484489afd001000048897c24504c89f74489ee" +"488b5424088b4c2410e8000000004c89f7488b7424084489eab940020000" +"e800000000be0d000000488b7c24504d39e749bf00000100000001d20f83" +"08ffffffbe0e0000004c396424480f82f8feffff4489a7d0010000e9f1fe" +"ffff4c8b7c2428418db720010000488b5c24388d93a0fcffff4c89f7e800" +"000000418db7800100008d9300fdffff4c89f7e800000000418db7e00100" +"008d9360fdffff4c89f7e8000000004c89f74489fe4489eab920010000e8" +"0000000048395c2430488b7c2440be0d000000730cbe0e00000048395c24" +"2073134883c4585b415c415d415e415f5de900000000899fd00100004883" +"c4585b415c415d415e415f5dc3666666662e0f1f84000000000055415741" +"56535089d389f54989fee8000000004189c783c53083c3304c89f789ee89" +"dae8000000004421f8498b4e10488b91780100008b89d001000083c1f088" +"440a0f4883c4085b415e415f5dc36690415741564154535089cb4189d641" +"89f74989fce800000000418d7730418d56308d4b304c89e7e80000000041" +"8d7760418d56608d4b604c89e7e800000000418db790000000418d969000" +"00008d8b900000004c89e7e800000000418db7c0000000418d96c0000000" +"8d8bc00000004c89e7e8000000004181c7f00000004181c6f000000081c3" +"f00000004c89e74489fe4489f289d94883c4085b415c415e415fe9000000" +"0066662e0f1f840000000000554157415641554154534883ec2889f04989" +"fc488b5f10488b7f308b8bd0010000448d79f0be0d0000004c39ff0f83fc" +"000000498b7424384c39fe730abe0e000000e9e800000048897424084889" +"7c2418894424044489bbd00100008d6a0848894c2420448d69f848895424" +"104189d64c89e74489ee89eae800000000488b837801000042807c380800" +"7567428b143085d27434428b4c300439ca742b48ba00000000080000004a" +"8954300cffc9488b837801000042894c3008488b837801000042894c3004" +"eba8488b54241083c2144c89e74489fee800000000488b8378010000420f" +"b60c384a8d143848ffc280e101eb0a4a8d14384883c209b101be0d000000" +"0fb6128b7c240488543801488b8378010000880c38488b44242048394424" +"18730cbe0e000000483944240873164889df4883c4285b415c415d415e41" +"5f5de9000000008983d00100004883c4285b415c415d415e415f5dc3660f" +"1f440000554157415641554154534189f24989f8488b7f10498b4030448b" +"8fd0010000418d59f0be0d0000004839d80f830a010000498b70384839de" +"730abe0e000000e9f700000044895424ec48897424f048894424f8899fd0" +"010000458d71f889c9ffc231edeb7666662e0f1f840000000000418d45ff" +"4189440b084d8b9f78010000458b140b470fb614134d8b5810498bb37801" +"0000458b9bd00100004183c3f083e007410fa3c20f92c0420f92441e0f4d" +"8b9f780100004539ec4388443301498b8778010000420f9c04304c8bbf78" +"010000ffca41807c1f0800743583fa0174224d8b78104d8b9f7801000045" +"8b640b04458b6c0b084539ec0f8c72ffffff31c0ebb44c8bbf78010000bd" +"0100000031d28b4424ec4189540704488b8f78010000892c014c394c24f8" +"be0d000000730cbe0e0000004c394c24f0730f5b415c415d415e415f5de9" +"0000000044898fd00100005b415c415d415e415f5dc30f1f400055415741" +"5641554154534883ec5889f04889fb488b7f10488b4b308bafd001000044" +"8da550fbffffbe0d0000004c39e10f83560300004189d0488b5338be0e00" +"00004c39e20f8241030000488954244048894c24488944243c48897c2450" +"4489a7d0010000418d5030895424184889df4489e64c89442410e8000000" +"00448db580fbffff4889df4489f64489e24489e1e800000000448dbdb0fb" +"ffff4889df4489fe4489f24489f1e8000000008db5e0fbffff8974243048" +"89df4489fa4489f9e8000000008db510fcffff89742434488b442410448d" +"68604889df8b5424184489e9e800000000448dbd40fcffff4889df4489fe" +"44896c24244489eae800000000448d6da04889df4489ee4489fa4489f9e8" +"00000000448d7dd04889df4489fe4489ea4489e9e800000000448db510ff" +"ffff4889df4489f6448974240c4489fa4489f9e800000000448dad70fcff" +"ff4889df4489ee4489f24489f9e8000000008db5a0fcffff8974242c4889" +"df4489ea448b7424304489f1e8000000008db5d0fcffff897424284889df" +"4489e24489e9e8000000008db500fdffff897424384889df8b5424344489" +"f1e800000000448db530fdffff4889df4489f64489ea4489e9e800000000" +"448dbd60fdffff4889df4489fe4489f24489e9e800000000448db590fdff" +"ff4889df4489f64489e24489f9e800000000448da5c0fdffff4889df4489" +"e64489f28b4c2428e800000000448dbdf0fdffff4889df4489fe8b54242c" +"4489e1e800000000448dad20feffff4889df4489ee488b5424108b4c2418" +"e800000000448da550feffff4889df4489e64489f24489e9e80000000044" +"8dad80feffff4889df4489ee4489e24489e1e8000000008db5b0feffff48" +"89df4489fab930000000e8000000008db5e0feffff4889df8b542438b930" +"000000e8000000004889df8b74240cba30000000e8000000008db570ffff" +"ff4889dfba30000000e8000000008db540ffffff4889dfba60031000b930" +"000000e800000000488b7b104c8b6330448bbfd0010000458d77d0be0d00" +"00004d39f4735b488b43384c39f07307be0e000000eb4b48894424104489" +"b7d001000048897c24184889df4489f6ba30000000e8000000004889df8b" +"7424244489f2e800000000be0d000000488b7c24184d39fc730cbe0e0000" +"004c397c24107360e8000000004531c04889df8b74243c4489ea8b4c240c" +"e800000000be0d00000048396c2448488b7c2450730cbe0e00000048396c" +"244073134883c4585b415c415d415e415f5de90000000089afd001000048" +"83c4585b415c415d415e415f5dc34189c04489bfd0010000eb9c55415741" +"5641554154534883ec584189f04989fe488b7f10498b4630448bafd00100" +"00458da570f9ffffbe0d0000004c39e00f83eb030000498b76384c39e673" +"0abe0e000000e9d803000089d548897424284489a7d001000048897c2450" +"4c89f74489e64c8944244048894424484889cbe800000000418db5a0f9ff" +"ff897424208d5530895424188d4b30894c24144c89f7e800000000418db5" +"d0f9ffff8974240c8d55608954241c48896c24308d4b60894c241048895c" +"24384c89f7e800000000458dbd00faffff4c89f74489fe89ea8b4c2418e8" +"00000000418dad30faffff4c89f789ee89da8b4c2414e800000000418d9d" +"60faffff4c89f789de4489fa89e9e800000000418dad90faffff4c89f789" +"ee4489e28b4c2420e800000000418db5c0faffff897424244c89f789da89" +"e9e800000000418dadf0faffff4c89f789ee8b5424188b4c241ce8000000" +"00458dbd20fbffff4c89f74489fe8b5424148b4c2410e800000000418d9d" +"50fbffff4c89f789de89ea4489f9e800000000418dad80fbffff4c89f789" +"ee8b5424208b4c240ce800000000418db5b0fbffff897424144c89f789da" +"89e9e800000000418dade0fbffff4c89f789ee488b5424308b4c241ce800" +"000000418d9d10fcffff4c89f789de488b5424388b4c2410e80000000045" +"8dbd40fcffff4c89f74489fe89ea89d9e800000000418d9d70fcffff4c89" +"f789de4489e28b6c240c89e9e800000000418db5a0fcffff8974241c4c89" +"f74489fa89d9e800000000418d9dd0fcffff4c89f789de4489e24489e1e8" +"00000000418db500fdffff897424104c89f789da4489e1e800000000418d" +"9d70ffffff4c89f789de89ea89e9e800000000418d6da04c89f789ee89da" +"89d9e800000000458d7dd04c89f74489fe89ea89e9e800000000458da530" +"fdffff4c89f74489e64489fa89e9e800000000418db560fdffff8974240c" +"4c89f78b5c242089da4489e1e800000000418dad90fdffff4c89f789ee89" +"6c241889da4489e1e800000000458da510ffffff4c89f74489e68b4c241c" +"89cae800000000418d9d40ffffff4c89f789de4489e24489e1e800000000" +"4c89f74589fc4489fe89da89d9e800000000458dbdc0fdffff4c89f74489" +"fe4489e289d9e800000000418d9df0fdffff4c89f789de8b5424144489f9" +"e800000000458da520feffff4c89f74489e68b54242489e9e8000000004c" +"89f7488b6c244089ee4489e289d9e800000000418d9d50feffff4c89f789" +"de4489fa8b4c2410e800000000458dbd80feffff4c89f74489fe8b542418" +"8b4c240ce8000000004989ec8d75304c89f74489fa89d9e800000000418d" +"9db0feffff4c89f789de8b5424108b4c2424e800000000418dade0feffff" +"4c89f789ee8b54240c8b4c2414e8000000004c89e683c6604c89f789ea89" +"d9e800000000be0d000000488b7c24504c396c2448730cbe0e0000004c39" +"6c242873134883c4585b415c415d415e415f5de9000000004489afd00100" +"004883c4585b415c415d415e415f5dc30f1f40004157415653488b47104c" +"8b8878010000410fb6c04989c049f7d84189d34189ca48ffc84b8b5c1928" +"4821c34f8b7411284d21c64909de89f34d897419284f8b7419204921c64f" +"8b7c11204d21c74d09f74d897c19204f8b7419184921c64f8b7c11184d21" +"c74d09f74d897c19184f8b7419104921c64f8b7c11104d21c74d09f74d89" +"7c19104f8b7419084921c64f8b7c11084d21c74d09f74d897c19084f8b1c" +"194921c34f8b14114d21c24d09da4d891419448d4e308d5a30448d59304c" +"8b57104d8b92780100004d8b741a284921c64f8b7c1a284d21c74d09f74f" +"897c0a284d8b741a204921c64f8b7c1a204d21c74d09f74f897c0a204d8b" +"741a184921c64f8b7c1a184d21c74d09f74f897c0a184d8b741a104921c6" +"4f8b7c1a104d21c74d09f74f897c0a104d8b741a084921c64f8b7c1a084d" +"21c74d09f74f897c0a08498b1c1a4821c34f8b1c1a4d21c34909db4f891c" +"0a83c66083c26083c160488b7f10488bbf780100004c8b4c17284921c14c" +"8b540f284d21c24d09ca4c895437284c8b4c17204921c14c8b540f204d21" +"c24d09ca4c895437204c8b4c17184921c14c8b540f184d21c24d09ca4c89" +"5437184c8b4c17104921c14c8b540f104d21c24d09ca4c895437104c8b4c" +"17084921c14c8b540f084d21c24d09ca4c89543708482304174c23040f49" +"09c04c8904375b415e415fc3662e0f1f8400000000005541574156415541" +"5453504c8b67108d5ef88d4efc498b8424780100008b0c084189ce4183e6" +"f8418d2c3683c5f8f6c1017576f6c1020f845403000089d98b14084101d6" +"29d33b989c0b1000754689e98b540104f7d2f6c203754e4489b0940b1000" +"498b84247801000083640804fe4489f083c801498b94247801000089de89" +"443204498b84247801000044893408e9fc0200004989ff89dee800000000" +"4c89ff498b84247801000089e9448b7c080441f6c7020f85150100003ba8" +"a00b10000f857a0100008998a00b1000498b8424780100004403b0980b10" +"004489b0980b10004489f083c801498b8c247801000089da89441104498b" +"84247801000039989c0b10007524c780940b100000000000498b84247801" +"0000c7809c0b100000000000498b8424780100008b88ac0b10004139ce0f" +"86570200008bb0a00b100085f60f84490200008b90980b100083fa297227" +"bf740a1000eb0b0f1f80000000008b7c380889ff448b04384439c672f144" +"034438044439c673e78bb87c0a100031f685ff741766662e0f1f84000000" +"0000ffc689ff8b7c380885ff75f481fe00100000bfff0f00000f43fe89b8" +"b40b100039d10f83d8010000498b842478010000c780ac0b1000ffffffff" +"e9c10100004183e7fe44897c08044489f083c801498b8c247801000089da" +"89441104428d0433498b8c2478010000448934014181fe000100000f8336" +"0100004489f181e1f80000008d81840a1000498b9424780100008bb28c0b" +"100041c1ee03440fa3f60f83ac0000008bb40a8c0a1000e9be0000003ba8" +"9c0b1000754489989c0b1000498b8424780100004403b0940b10004489b0" +"940b10004489f083c801498b8c247801000089da894411044401f3498b84" +"247801000044893418e9040100004183e7f84989fd89ee4489fae8000000" +"004501fe4489f083c801498b8c247801000089da89441104418d041e498b" +"8c247801000044893401498b8424780100003b989c0b1000755b4489b094" +"0b1000e9b0000000bf01000000c4e209f7ff09fe89b28c0b1000498b9424" +"7801000089c989c6899c0a8c0a1000498b8c247801000089f2895c110c49" +"8b8c247801000089da8944110c498b84247801000089741008eb614c89ef" +"4181fe000100000f82cafeffff89de4489f2e800000000498b8424780100" +"00ff88b40b10007537498b8424780100008b907c0a100031c985d2740f0f" +"1f00ffc189d28b54100885d275f481f900100000baff0f00000f43d18990" +"b40b10004883c4085b415c415d415e415f5dc39089f14889f8488b7f1044" +"8b8fd0010000418d71e041b80d000000483970300f838000000041b80e00" +"00004839703872745389b7d00100004c8b877801000041c7443010000000" +"004c8b877801000041c7443004010000004c8b877801000049c744300804" +"0000004c8b877801000041c744301c2e0000004c8b877801000041894c30" +"184183c1f8488b8f7801000044890c314889fb4889c7e8000000004889df" +"4531c05b4489c6e9000000000f1f4000488b4710488b807801000089f18b" +"7c080c81fa00010000725f8b54081839fe757231ff837c081400400f95c7" +"448d0cbe4183c110468b14084585d274730f1f004589c84489d74589d145" +"31d242837c081400410f95c2468d0c974183c110468b14084585d275d945" +"89c042c704000000000085d27540eb2e8b4c080839f97527c0ea03befeff" +"ffff89d1d3c621b08c0b1000c3448b44080842897c000c448944380885d2" +"7510c3897c080c894c3808c331ff85d274f0448b44081c468d0485f40910" +"00423b3400751b42893c0085ff752c0fb64c081cbafeffffffd3c2219090" +"0b1000c34531c039741010410f95c0428d348283c610893c3085ff74a989" +"fe895430188b5408104885d2740889543010897c10188b4c08144885c974" +"89894c3014897c0818c3662e0f1f84000000000055415741564155415453" +"504189d689f34c8b6710418d2c1e498b84247801000089f18b540804f6c2" +"017574f6c2020f84670200008b14084101d629d33b989c0b1000754689e9" +"8b540104f7d2f6c203754e4489b0940b1000498b84247801000083640804" +"fe4489f083c801498b94247801000089de89443204498b84247801000044" +"893408e9110200004989ff89dee8000000004c89ff498b84247801000089" +"e9448b7c080441f6c70275703ba8a00b10000f85b60000008998a00b1000" +"498b8424780100004403b0980b10004489b0980b10004183ce01498b8424" +"7801000089d94489740804498b8424780100003b989c0b10000f85a00100" +"00c780940b100000000000498b842478010000c7809c0b100000000000e9" +"7f0100004183e7fe44897c08044489f083c801498b8c247801000089da89" +"441104418d041e498b8c2478010000448934014181fe000100000f82c800" +"000089de4489f24883c4085b415c415d415e415f5de9000000003ba89c0b" +"1000754489989c0b1000498b8424780100004403b0940b10004489b0940b" +"10004489f083c801498b8c247801000089da894411044401f3498b842478" +"01000044893418e9e10000004183e7f84989fd89ee4489fae80000000045" +"01fe4489f083c801498b8c247801000089da89441104418d041e498b8c24" +"7801000044893401498b8424780100003b989c0b1000750c4489b0940b10" +"00e98d0000004c89ef4181fe000100000f8338ffffff4489f181e1f80000" +"008d81840a1000498b9424780100008bb28c0b100041c1ee03440fa3f673" +"098bb40a8c0a1000eb1ebf01000000c4e209f7ff09fe89b28c0b1000498b" +"94247801000089c989c6899c0a8c0a1000498b8c247801000089f2895c11" +"0c498b8c247801000089da8944110c498b842478010000897410084883c4" +"085b415c415d415e415f5dc3660f1f440000554157415641554154535048" +"8b4710488da87801000081fef40000007772488b4d008b918c0b1000448d" +"460b4181e0f801000083fe0b41bd10000000450f43e84589e841c1e803c4" +"e23bf7f240f6c6030f8425010000f7d683e6014401c68d04f50000000044" +"8d04f5840a10008bbc018c0a1000448b4c39084539c80f855a0100000fb3" +"f289918c0b1000e95d0100008d560b4189d54183e5f8488b4d00448b8190" +"0b10004585c00f84c501000041b91f00000081fef4ffff00771ec1ea08f3" +"0fbdd2be0600000029d601d24531c9410fa3f54183d13e4129d14489eaf7" +"da4489ce8bb4b1f409100085f60f841c0100004589ca41d1ea41b3194528" +"d34531d24183f91f450fb6db450f44dac44221f7dd31dbeb3d66662e0f1f" +"840000000000468b7431144589df41c1ef1f428d34be83c6108b34314139" +"f64589f7450f44fa4585f6450f45d74501db85f60f84c00000004189f646" +"8b7c31044183e7f84529ef72bd4139d773b84489fa89f34585ff75ae31d2" +"89f3e961010000443ba9940b10000f86eb00000085f60f8461030000c4e2" +"39f7c6be02000000c4e239f7f689f7f7df09f721c7f30fbcc78d34c50000" +"00008d3cc5840a10008b9c318c0a1000448b4419084439c70f85e9030000" +"0fb3c289918c0b1000e9ec030000468944090c488b4d0044898c018c0a10" +"0089c183c903488b5500894c3a0401f8488b4d00834c0104018d5f08e91f" +"0f00004531d231db89de4409d6740e4489d64585d20f85b7000000eb31be" +"02000000c46231f7ce4489cef7de4409ce4421c67435f30fbcf6448b94b1" +"f409100031db4489d64585d20f858400000085db74178bb1940b10004429" +"ee0f82e801000039f20f82e00100008b91940b100089d64429ee0f839700" +"00008b91980b10004429ea0f86ce0000008991980b1000488b45008b88a0" +"0b1000428d342989b0a00b100083ca01488b4500895430044183cd03488b" +"450044896c08048d5908e95f0e00000f1f004489c64585c00f847cffffff" +"4189da4189d34189f1428b5c0904468b44091083e3f889da4429ea4439da" +"410f43f2410f43d34439eb89f3410f42da410f42d34585c075bc468b4409" +"14ebb58b999c0b100083fe0f0f87ea000000c7819c0b100000000000488b" +"4500c780940b1000000000008d041383ca03488b4d0089541904488b4d00" +"834c01040183c308e9cb0d000048893c24458db52f0001004489f6c1ee10" +"448bb8680100004889c7e80000000084c00f94c04183ffff0f94c131db08" +"c10f85950d000041c1e7100f848b0d00004181e60000ffff488b45008b88" +"a40b10004401f18988a40b1000488b45008b90a80b100039d10f46ca8988" +"a80b1000488b45008bb0a00b10004885f60f849c030000b9740a1000488b" +"3c240f1f400089c9448b04088b540804468d0c024539f90f84e90700008b" +"4c080885c975e1e9f107000089b1940b1000428d042b488b4d0089819c0b" +"100089f183c901488b7d00894c070401da488b45008934104183cd03488b" +"450044896c180483c308e9d90c000089d88b74010c448b44011839f3756e" +"31f6837c011400400f95c6448d14b34183c210468b1c114585db0f84c201" +"000066666666662e0f1f8400000000004589d14489de4589da4531db4283" +"7c111400410f95c3468d149e4183c210468b1c114585db75d94589c942c7" +"0409000000004585c00f8584010000e918020000448b4c0108428974090c" +"488b4d0044894c31084585c00f8563010000e9f70100008b91900b100085" +"d20f8474fdfffff30fbcc28b9481f40910008b44110483e0f84429e889d3" +"eb1c0f1f84000000000089d68b74310483e6f84429ee39f00f43c60f47da" +"89d68b54311085d275e28b54311485d275da89da8b74110c8b7c111839f3" +"0f852a08000031f6837c111400400f95c6448d0cb34183c110468b140945" +"85d20f84fc0800000f1f8400000000004589c84489d64589d14531d24283" +"7c091400410f95c2468d0c964183c110468b14094585d275d94589c042c7" +"040100000000e9bf08000042897c010c488b4500448984308c0a10004489" +"e883c803488b4d0089441904428d0c2b89f04429e889c283ca01488b7d00" +"89540f0401de488b5500890432488b5500448b82940b10004585c00f84cf" +"0500004489c683e6f881c6840a1000448b8a8c0b10008bba9c0b100041c0" +"e803450fb6d0450fa3d10f835f0500004189f1468b440a084589c2e97105" +"000031f64585c00f8499000000488b4d00448b4c081c468d0c8df4091000" +"423b1c0975234289340985f67537488b75000fb64c061c41b8feffffff41" +"d3c0442186900b1000eb5f4531c942395c0110410f95c1478d0c884183c1" +"104289340985f674434c8b4d0089f145894409184c8b4500458b4c00104d" +"85c9741245894c08104c8b450043897408184c8b4500458b4c00144d85c9" +"740e45894c0814488b4d00428974091883fa10723d428d342b4183cd0348" +"8b4d0044896c010489d083c801488b4d00894431048d0416488b4d008914" +"0181fa000100007230e80000000083c308e9020a00004401ea89d183c903" +"488b7500894c060401da488b4500834c10040183c308e9df09000089d181" +"e1f80000008d81840a1000488b7d00448b878c0b1000c1ea03410fa3d00f" +"83270600008b940f8c0a1000e9380600008b88b00b1000ffc94439f9720b" +"4489b8b00b1000488b4500c780b40b1000ff0f0000488b45004489b0780a" +"1000488b45004489b8740a1000488b4500c780900a1000840a1000488b45" +"00c780980a10008c0a1000488b4500c7808c0a1000840a1000488b4500c7" +"80a00a1000940a1000488b4500c780940a10008c0a1000488b4500c780a8" +"0a10009c0a1000488b4500c7809c0a1000940a1000488b4500c780b00a10" +"00a40a1000488b4500c780a40a10009c0a1000488b4500c780b80a1000ac" +"0a1000488b4500c780ac0a1000a40a1000488b4500c780c00a1000b40a10" +"00488b4500c780b40a1000ac0a1000488b4500c780c80a1000bc0a100048" +"8b4500c780bc0a1000b40a1000488b4500c780800a100000000000488b45" +"00c780d00a1000c40a1000488b4500c780c40a1000bc0a1000488b4500c7" +"80cc0a1000c40a1000488b4500c780d80a1000cc0a1000488b4500c780d4" +"0a1000cc0a1000488b4500c780e00a1000d40a1000488b4500c780dc0a10" +"00d40a1000488b4500c780e80a1000dc0a1000488b4500c780e40a1000dc" +"0a1000488b4500c780f00a1000e40a1000488b4500c780ec0a1000e40a10" +"00488b4500c780f80a1000ec0a1000488b4500c780f40a1000ec0a100048" +"8b4500c780000b1000f40a1000488b4500c780fc0a1000f40a1000488b45" +"00c780080b1000fc0a1000488b4500c780040b1000fc0a1000488b4500c7" +"80100b1000040b1000488b4500c780180b10000c0b1000488b4500c7800c" +"0b1000040b1000488b4500c780200b1000140b1000488b4500c780140b10" +"000c0b1000488b4500c780280b10001c0b1000488b4500c7801c0b100014" +"0b1000488b4500c780300b1000240b1000488b4500c780240b10001c0b10" +"00488b4500c780380b10002c0b1000488b4500c7802c0b1000240b100048" +"8b4500c780400b1000340b1000488b4500c780340b10002c0b1000488b45" +"00c780480b10003c0b1000488b4500c7803c0b1000340b1000488b4500c7" +"80500b1000440b1000488b4500c780440b10003c0b1000488b4500c78058" +"0b10004c0b1000488b4500c7804c0b1000440b1000488b4500c780600b10" +"00540b1000488b4500c780540b10004c0b1000488b4500c780680b10005c" +"0b1000488b4500c7805c0b1000540b1000488b4500c780700b1000640b10" +"00488b4500c780640b10005c0b1000488b4500c780780b10006c0b100048" +"8b4500c7806c0b1000640b1000488b4500c780800b1000740b1000488b45" +"00c780740b10006c0b1000488b4500c780880b10007c0b1000488b4500c7" +"807c0b1000740b1000488b45004489b8a00b1000488b4500c780840b1000" +"7c0b1000418d46d8488b4d008981980b1000418d46d9488b4d004489fa89" +"441104438d043783c0d8488b4d00c744010428000000488b4500c780ac0b" +"100000002000e95505000041ba01000000c44239f7c24509c144898a8c0b" +"1000488b55004189f04d89c14189f242897c0a08488b550042897c020c48" +"8b550089743a0c488b55004489543a08488b5500898a9c0b1000488b4d00" +"8981940b100083c308e93c0500004439fe73104439c6720b837c080c000f" +"84020400008b88b00b10004439f9410f43cf8988b00b1000478d2437488b" +"4d00b8740a100066662e0f1f84000000000089c0443b2401740a8b440108" +"85c075f0eb0b837c010c000f84c5010000b8740a1000eb106666662e0f1f" +"8400000000008b44110889c28b041139c672f30344110439c673eb4489b9" +"a00b1000418d4ed8488b5500898a980b1000418d4ed9488b55004589f842" +"894c0204438d4c37d8488b5500c7440a0428000000488b4d00c781ac0b10" +"000000200089c183e1f883c1d88d561039d10f42ce488b5500c74411041b" +"000000488b5500448d41104c8b8a740a10004c8b927c0a10004e89140248" +"8b55004c894c0a08488b55004489b2780a1000488b55004489ba740a1000" +"8d51084c8b45004189907c0a1000488b5500c782800a10000000000089ca" +"83c21c904c8b45004189d143c704080700000083c20439c272ea39ce0f84" +"9a030000488b450083640804fe89ca29f289d083c8014c8b450041894430" +"04488b450089140881fa000100007268e800000000e966030000448b4411" +"08428974010c488b4d004489443108e9dc00000041b901000000c4c269f7" +"d14109d04489878c0b1000488b7d0089c989c289b40f8c0a1000488b4d00" +"89d78974390c488b4d008944310c488b45008954300883c308e94c030000" +"89d181e1f80000008d81840a1000488b7d00448b878c0b1000c1ea03410f" +"a3d00f83a40200008b940f8c0a1000e9b502000044893c01488b4d004401" +"7401044489e883c803488b4d004489fa89441104438d1c2f4529ee488b45" +"00443ba0a00b10000f851b0200008998a00b1000488b45004403b0980b10" +"004489b0980b10004183ce01488b450089d94489740804e9a703000031f6" +"85ff0f8495000000488b4d00448b440a1c468d0485f4091000423b1c0175" +"204289340185f67533488b75000fb64c161cbffeffffffd3c721be900b10" +"00eb5e4531c0395c3910410f95c0468d04874183c0104289340185f67443" +"4c8b450089f141897c0818488b7d00448b4417104d85c074124489440f10" +"488b7d004289740718488b7d00448b4417144d85c0740e4489440f14488b" +"4d00428974011883f8107270428d0c2b4183cd03488b750044896c160489" +"c283ca01488b750089540e048d1401488b7500890416488b5500448b8294" +"0b10004585c00f849b0000004489c683e6f881c6840a1000448b8a8c0b10" +"008bba9c0b100041c0e803450fb6d0450fa3d1732f4189f1468b440a0845" +"89c2eb444401e88d0c0383c803488b750089441604488b4500834c080401" +"83c308e98201000041ba01000000c44239f7c24509c144898a8c0b100048" +"8b55004189f04d89c14189f242897c0a08488b550042897c020c488b5500" +"89743a0c488b55004489543a08488b5500898a9c0b1000488b4d00898194" +"0b100083c308e9250100004401f289540804488b45008b88a00b10008d51" +"0f83e2f88d72f889b0a00b1000488b45004403b0980b100089cf29d7428d" +"143783c2088990980b100083ca01488b4500895430044101ce488b450042" +"c744300428000000e91dfbffff443ba09c0b10000f85cd00000089989c0b" +"1000488b45008b88940b10004101ce4489b0940b10004489f083c801488b" +"550089de894432044101cc488b450046893420e97101000041b901000000" +"c4c269f7d14109d04489878c0b1000488b7d0089c989c289b40f8c0a1000" +"488b4d0089d78974390c488b4d008944310c488b450089543008488b4d00" +"8b81980b10004429e876358981980b1000488b4d008b91a00b1000428d34" +"2a89b1a00b100083c801488b4d00894431044183cd03488b450044896c10" +"048d5a0889d84883c4085b415c415d415e415f5dc34489e1448b6c080444" +"89e983e10383f90175214183e5f84489e64489eae8000000004501ee4501" +"e5488b45004589ec468b6c28044183e5fe4489e144896c08044489f183c9" +"01488b550089d8894c0204418d0c1e488b55004489340a4181fe00010000" +"7210488b3c2489de4489f2e800000000eb694489f281e2f80000008d8a84" +"0a1000488b75008bbe8c0b100041c1ee03440fa3f773098bbc168c0a1000" +"eb1c41b801000000c44209f7c04409c789be8c0b1000488b750089d289cf" +"899c168c0a1000488b550089fe895c320c488b5500894c020c488b4d0089" +"7c01084183cf084489fbe905ffffff660f1f840000000000488b47104c8b" +"80780100004189d1438b4c0804438b54080839d17d4a448d52ff47895408" +"084c8b8078010000478b0c08470fb60408488b7f104c8b8f78010000448b" +"9fd00100004183c3f04183e207450fa3d0400f92c7430f9244190f4c8b80" +"78010000eb0231ff39d189f141887c0801488b80780100000f9c0408c30f" +"1f004831d64889f148f7d9488b57108bbad001000083c7f031c04809f10f" +"99c0488b8a780100000f9944390fc30f1f44000089f0f7d083e001488b4f" +"10488b91780100008b89d001000083c1f088440a0fc35541574156535041" +"89f24889f8488b7f108bb7d00100008d5e9041bb0d000000483958300f83" +"b401000041bb0e000000483958380f82a401000089d58b54243049bb0000" +"000002000000899fd00100004c8bb77801000041896c1e0c4c8bb7780100" +"004589541e084c8b97780100004589441a144c8b877801000041894c1810" +"488b8f78010000c744191c02000000488b8f78010000c7441918c0061000" +"4c8b87780100004489c941833c08000f8489000000448d56c0458d71104f" +"8b34304f893410448d46b84183c1084c8b97780100004f8b0c0a4f890c02" +"4c8b8778010000498b0c0849894c1820488b8f78010000c744195c040000" +"00488b8f78010000c744195828071000488b8f7801000048c74419640400" +"0000448d56a04d09da49b90000000004000000b9b0ffffff41b898ffffff" +"41be50000000eb3241c744185c03000000488b8f78010000c7441958f406" +"1000b998ffffff41b8a0ffffff41ba0300000041be640000004d89d94c8b" +"bf780100004901df4f89143e4101f04d09d84c8b97780100004d89441a48" +"01f14c09c94c8b877801000049894c18408d4ea849b80000000003000000" +"4909c8488b8f780100004c894419388d4ec84c8b877801000041894c1860" +"83c6e84889fb4889c7e8000000004889df4531db4489de4883c4085b415e" +"415f5de9000000005541574156415453488b4f104c8b77308b99d0010000" +"448d438041b90d0000004d39c60f83940100004c8b7f384d39c7730b41b9" +"0e000000e980010000448981d0010000488b817801000089f68b34304189" +"d1468b4c081441f6c1107554440fb61430410fb6f241f6c1200f858b0000" +"004180fa640f82e0000000448d0cb6468d14ce41c1ea0c4569ca9c000000" +"4101f1410fb6f10fb7b4707f071000664289740001488b81780100004531" +"c9e9ce0000000fb604304531c94189d889c6669041ffc84189c24183e20f" +"458d5a57418d6a304183fa0a4c8b9178010000400fb6ed450fb6db440f42" +"dd47881c02c1ee0441ffc183f80f89f077c6eb4e4531c94189d889f06666" +"662e0f1f84000000000041ffc84189f24183e20f458d5a37418d6a304183" +"fa0a4c8b9178010000400fb6ed450fb6db440f42dd47881c02c1e80441ff" +"c183fe0f89c677c64989cc89d6ba7d071000b902000000eb4441b9020000" +"004180fa0976194989cc0fb78c707f0710006642894c000141b901000000" +"eb0f4989cc438d0c014180ca30448814084501c84183f10389d6ba010000" +"0031c9e8000000004939de4c89e141b90d000000730b41b90e0000004939" +"df73164889cf4489cee80000000031c05b415c415e415f5dc38999d00100" +"00ebef0f1f440000554157415641554154534883ec58448944243048897c" +"2408488b5f10488b83780100004189f7468b5438144589d44183e4014c89" +"4c2440478d2c0c41f6c204750431d2eb4789ce83e603743a89d74531c980" +"3c38c0410f9dc183fe01742b8d7a014531c0803c38c0410f9dc04501c183" +"fe0274158d720231ff803c30c0400f9dc74101f9eb034531c94501cd4889" +"542438894c242c488b53284889542420488b5330488954241842833c3800" +"7457428b6c38044189ee4529ee764a41f6c2080f85da010000420fb64c38" +"1880f903ba010000000f45d1440fb6ea418d55ff83fa02b9020000000f42" +"ca83f9010f849b03000085c90f859f0300004589f54531f6e99403000042" +"8b6c381c468b7438204585e40f858e000000837c2438000f84f900000048" +"8b83780100004a6344300cbe080000003b83ec0100000f83d40000008b84" +"c3f4010000be09000000b9ffffffff4839c80f84ba00000048c1e0204889" +"c148c1f91ebe06000000488b542418833c0a030f859b00000048c1f81d48" +"8b7c240889ee488b5424388b4c242c4c8b44242041ff140041bc01000000" +"85c00f853a060000eb764a63443010be080000003b83ec010000735c8b84" +"c3f4010000be09000000b9ffffffff4839c8744648c1e0204889c148c1f9" +"1ebe06000000488b542418833c0a02752b48c1f81d488b7c240889eeba2b" +"000000488b4c2420ff140141bc0100000085c00f85cf050000e904ffffff" +"4889dfe800000000488b83780100004a6344300cbe080000003b83ec0100" +"000f839a0500008b84c3f4010000be09000000b9ffffffff4839c80f8480" +"05000048c1e0204889c148c1f91ebe06000000488b542418833c0a030f85" +"6105000048c1f81d488b4c2420488b0401488b7c240889ee8b542430488b" +"4c24404883c4585b415c415d415e415f5dffe0418b4c0710894c243441c7" +"44071030000000488b8378010000410fb64c0718884c241741c644071801" +"488b8378010000428b4c381c894c2404468b743820488b442408488b7810" +"4c8b4728488b57304585e40f8589000000837c2438000f840b010000488b" +"87780100004a6344300cbe080000003b87ec0100000f83e90000008b84c7" +"f4010000be09000000b9ffffffff4839c80f84cf00000048c1e0204889c1" +"48c1f91ebe06000000833c0a030f85b500000048c1f81d488b7c24088b74" +"2404488b5424388b4c242c41ff140041bc0100000085c00f8563040000e9" +"8d000000488b87780100004a63443010be080000003b87ec010000736f8b" +"84c7f4010000be09000000b9ffffffff4839c8745948c1e0204889c148c1" +"f91ebe06000000833c0a02754348c1f81d48897c2450488b7c24088b7424" +"044889542448ba2b0000004d89c441ff1400488b5424484d89e0488b7c24" +"5041bc0100000085c00f85db030000e9effeffffe800000000f7d54401ed" +"41bcffffffff4c8b6c24080f1f00488b8b780100008b83ec010000ffc50f" +"849f0100004a634c311039c10f838c0300008b84cbf40100004c39e00f84" +"c902000048c1e0204889c148c1f91e488b542418833c0a020f855b030000" +"48c1f81d4c89ef8b742404ba30000000488b4c2420ff140185c07498e997" +"0000004589f541d1ed41ffc641d1ee41ffc5428b4c3810894c2434428b4c" +"381c894c2404468b7c3820bdffffffff0f1f84000000000041ffcd746a48" +"8b83780100004a634438103b83ec0100000f83f10200008b84c3f4010000" +"4839e80f842e02000048c1e0204889c148c1f91e488b542418833c0a020f" +"85c002000048c1f81d488b7c24088b7424048b542434488b4c2420ff1401" +"85c0749c41bc01000000e9af020000488b442408488b78104c8b6f28488b" +"6f304585e40f8529010000837c2438000f8499010000488b87780100004a" +"6344380cbe080000003b87ec0100000f83770100008b84c7f4010000be09" +"000000b9ffffffff4839c80f845d01000048c1e0204889c148c1f91ebe06" +"000000837c0d00030f854201000048c1f81d488b7c24088b742404488b54" +"24388b4c242c41ff54050041bc0100000085c00f850f020000e919010000" +"4a634c310cbe0800000039c10f83ed0100008b84cbf4010000be09000000" +"b9ffffffff4839c80f84d301000048c1e0204889c148c1f91ebe06000000" +"488b542418833c0a030f85b401000048c1f81d488b7c24088b7424048b54" +"2430488b4c24404c8b44242041ff140041bc0100000085c00f8592010000" +"488b83780100000fb64c241742884c3818488b83780100008b4c24344289" +"4c3810e969010000488b87780100004a63443810be080000003b87ec0100" +"00735d8b84c7f4010000be09000000b9ffffffff4839c8744748c1e02048" +"89c148c1f91ebe06000000837c0d0002753048c1f81d4989fc488b7c2408" +"8b742404ba2b00000041ff5405004c89e741bc0100000085c00f85fb0000" +"00e961feffffe800000000488b83780100004a6344380cbe080000003b83" +"ec0100000f83c90000008b84c3f4010000b9ffffffff4839c8750abe0900" +"0000e9ae00000048c1e0204889c148c1f91e488b542418833c0a030f8588" +"00000048c1f81d488b7c24088b7424048b542430488b4c2440488b6c2420" +"ff54050041bc0100000085c0757641ffc641bdffffffff41ffce7465488b" +"83780100004a634438103b83ec01000073448b84c3f40100004c39e87485" +"48c1e0204889c148c1f91e488b542418833c0a02751b48c1f81d488b7c24" +"088b7424048b542434ff54050085c074aceb17be06000000eb05be080000" +"004889dfe8000000004531e44489e04883c4585b415c415d415e415f5dc3" +"415741564155415453488b4710488b807801000089d7488b0c3849b8abaa" +"fffffffffeb94531c94889ca4c29c2410f92c14d89c849f7d84c8b543808" +"4f8d1c1048bbfeff53b1feffab1e4531f64939db410f97c64d01d049f7d1" +"4d11ce49c1fe3f4c8b5438104d01f24983d6ff49b923f6b0f6a0d2306745" +"31db4d39ca410f97c34c8b4c38284d01f349c1fb3f488b5c38184c01db49" +"83d3ff49bebe1285f3844b77644531ff4c39f3410f97c74d01df49c1ff3f" +"4c8b6438204d01fc4983d7ff49bbd6ac4b43b6a71b4b4531f64d39dc410f" +"97c64d01fe49c1fe3f4f8d3c0e49bd99e67f39ea11011a4531db4d39ef41" +"0f97c34d89f74d01cf89f6c4c1f96ec4c4e1f96ecbc5f16cc0c4c1f96eca" +"c4c1f96ed0c5e96cc9c4e37538c001c5fdd4050000000049b8661980c615" +"eefee54f8d04074d11f34d8d53ff4d21d149f7db4d21d84d09c862d2fd28" +"7ccac5f5db4c38084c8944302862d2fd287cd362f3fd2825d1eac5fe7f54" +"30084921ca4921d34d09d34c891c305b415c415d415e415fc5f877c36666" +"662e0f1f8400000000005541565389cb89f54c8b771085c9740989dee800" +"00000089c2498b867801000089e9895c0804498b86780100008914085b41" +"5e5dc366662e0f1f84000000000055415741564155415453488b47104889" +"4424f84c8bb878010000450fb6c04d89c249f7da89d048894424f04189cb" +"4d8d70ff498b5c07284c21f34f8b641f284d21d44909dc89f34d89641f28" +"4d8b6407204d21f44f8b6c1f204d21d54d09e54d896c1f204d8b6407184d" +"21f44f8b6c1f184d21d54d09e54d896c1f184d8b6407104d21f44f8b6c1f" +"104d21d54d09e54d896c1f104d8b6407084d21f44f8b6c1f084d21d54d09" +"e54d896c1f084d8b24074d21f44f8b2c1f4d21d54d09e54d892c1f448d6a" +"30448d61304c8b7f104d8bbf780100004b8b6c2f284c21f54b8b4427284c" +"21d04809e88d6e304989442f284b8b442f204c21f04f8b4c27204d21d149" +"09c14d894c2f204b8b442f184c21f04f8b4c27184d21d14909c14d894c2f" +"184b8b442f104c21f04f8b4c27104d21d14909c14d894c2f104b8b442f08" +"4c21f04f8b4c27084d21d14909c14d894c2f084b8b042f4c21f04f8b0c27" +"4d21d14909c14d890c2f448d6a60448d6160488b47104c8bb8780100004b" +"8b442f284c21f04f8b4c27284d21d14909c18d6e604d894c2f284b8b442f" +"204c21f04f8b4c27204d21d14909c14d894c2f204b8b442f184c21f04f8b" +"4c27184d21d14909c14d894c2f184b8b442f104c21f04f8b4c27104d21d1" +"4909c14d894c2f104b8b442f084c21f04f8b4c27084d21d14909c14d894c" +"2f084b8b042f4c21f04f8b0c274d21d14909c14d890c2f81c69000000081" +"c29000000081c190000000488b4710488bb878010000488b4417284c21f0" +"4c8b4c0f284d21d14909c14c894c3728488b4417204c21f04c8b4c0f204d" +"21d14909c14c894c3720488b4417184c21f04c8b4c0f184d21d14909c14c" +"894c3718488b4417104c21f04c8b4c0f104d21d14909c14c894c3710488b" +"4417084c21f04c8b4c0f084d21d14909c14c894c37084c2334174c23140f" +"4d09f24c891437488b4424f8488b8078010000488b4c24f00fb68c08c000" +"0000420fb69418c000000030ca41f6d84120d04130c844888418c0000000" +"5b415c415d415e415f5dc30f1f4400004157415641554154534c8b4f104d" +"8bb978010000410fb6c04989c249f7da4189d04189cb4c8d70ff4b8b5c07" +"284c21f34f8b641f284d21d44909dc89f34d89641f284f8b6407204d21f4" +"4f8b6c1f204d21d54d09e54d896c1f204f8b6407184d21f44f8b6c1f184d" +"21d54d09e54d896c1f184f8b6407104d21f44f8b6c1f104d21d54d09e54d" +"896c1f104f8b6407084d21f44f8b6c1f084d21d54d09e54d896c1f084f8b" +"24074d21f44f8b2c1f4d21d54d09e54d892c1f83c63083c23083c130488b" +"7f10488bbf780100004c8b7c17284d21f74c8b640f284d21d44d09fc4c89" +"6437284c8b7c17204d21f74c8b640f204d21d44d09fc4c896437204c8b7c" +"17184d21f74c8b640f184d21d44d09fc4c896437184c8b7c17104d21f74c" +"8b640f104d21d44d09fc4c896437104c8b7c17084d21f74c8b640f084d21" +"d44d09fc4c896437084c2334174c23140f4d09f24c891437498b89780100" +"00420fb6540160420fb67419604030d6f6d84020f030d0884419605b415c" +"415d415e415fc30f1f00488b4f104c8b817801000089f089d2498b341049" +"3334004989f149f7d94909f18bb1d001000083c6f04d85c9410f9944300f" +"488bb1780100004c8b4416084c334406084c89c648f7de4c09c64c8b4710" +"458b90d00100004183c2f04885f64d8b8078010000430f9944100f4c09ce" +"4c8b4710458b88d00100004183c1f04885f64d8b8078010000430f994408" +"0f4c8b81780100004d8b4c10104d334c00104d89c849f7d84d09c84c8b4f" +"10458b91d00100004183c2f04d85c04d8b8978010000430f9944110f4909" +"f0488b7710448b8ed00100004183c1f04d85c0488bb678010000420f9944" +"0e0f488bb1780100004c8b5416184c335406184d89d149f7d94d09d1488b" +"7710448b96d00100004183c2f04d85c9488bb678010000420f9944160f4d" +"09c1488b7710448b86d00100004183c0f04d85c9488bb678010000420f99" +"44060f488bb1780100004c8b4416204c334406204c89c648f7de4c09c64c" +"8b4710458b90d00100004183c2f04885f64d8b8078010000430f9944100f" +"4c09ce4c8b4710458b88d00100004183c1f04885f64d8b8078010000430f" +"9944080f488b8978010000488b54112848335401284889d148f7d94809d1" +"488b47108b90d001000083c2f04885c9488b80780100000f9944100f488b" +"57108bbad001000083c7f031c04809f10f99c0488b8a780100000f994439" +"0fc3662e0f1f840000000000554157415641554154534883ec684189f148" +"89f8488b7f104c8b40308b8fd0010000448d71d0be0d0000004d39f00f83" +"8a0200004c8b5038be0e0000004d39f20f827802000044894c240c48894c" +"24584489b7d0010000488b8f7801000089d2488b34114a0f38f174312848" +"0fce4889742448488b8f78010000488b7411084a0f38f1743120480fce48" +"89742440488b8f78010000488b5c11104a0f38f15c3118488b8f78010000" +"488b6c11184a0f38f16c3110480fcb480fcd488b8f780100004c8b6c1120" +"4e0f38f16c3108490fcd488b8f780100004c8b7c11284e0f38f13c31490f" +"cf488b48104c8b48308b91d0010000448d62d0be0d0000004d39e148897c" +"246048894424104c894424504c895424387379488b70384c39e67307be0e" +"000000eb6948897424184489a1d00100004889c74489e648895424284489" +"f248894c2430b9900310004c894c2420e800000000488b7c24104489f644" +"89e2b930000000e800000000488b442428488b4c2430be0d000000483944" +"24207310be0e00000048394424180f83580100004889cfe80000000048b9" +"abaafffffffffeb931c04939cf0f92c04889c148f7d94a8d142948befeff" +"53b1feffab1e31ff4839f2400f97c74c01e948f7d04811f848c1f83f4801" +"c54883d0ff48b923f6b0f6a0d2306731d24839cd0f97c24801c248c1fa3f" +"4801d34883d2ff48b8be1285f3844b776431c94839c30f97c14801d148c1" +"f93f488b7424404801ce4883d1ff48b8d6ac4b43b6a71b4b31d24839c60f" +"97c24801ca48c1fa3f31c0488b7424484801d60f92c001d048b999e67f39" +"ea11011a31db4839ce0f97c301c3f6d380e301488b7c2410488b4710488b" +"88780100008b80d001000083c0f0885c010f8b6c240c89ee4489f2b93000" +"0000e800000000488b7c2460488b877801000089e9885c0830be0d000000" +"488b4424584839442450730cbe0e000000483944243873134883c4685b41" +"5c415d415e415f5de9000000008987d00100004883c4685b415c415d415e" +"415f5dc38981d0010000e9a5feffff6666666666662e0f1f840000000000" +"55415741564155415453504889fb488b7f104c8b6330448bbfd001000045" +"8d77d0b80d0000004d39f473564c8b6b384d39f57307b80e000000eb4689" +"d14489b7d001000048893c244889df89f54489f689eae8000000004889df" +"89ee4489f2b930000000e800000000b80d000000488b3c244d39fc730ab8" +"0e0000004d39fd731589c64883c4085b415c415d415e415f5de900000000" +"4489bfd00100004883c4085b415c415d415e415f5dc30f1f400055415741" +"5641554154534881eca800000089f04989f8488b4f10488b57304889cf8b" +"89d0010000448d8960fdffffbe0d0000004c39ca0f838c150000498b7038" +"4c39ce730abe0e000000e9791500004889b424900000004989fc44898fd0" +"0100008d719048890c24488b8f7801000048897c245089c0488944242848" +"8b040148bffdfffcfffcfff3894889c1480fafcf48899424a0000000498b" +"50104c89c74c8b827801000089ca49bd00000000010000004d8dbdabaaff" +"ff4c898c24880000004989d14d0fafcf498dadfffffeb94989d24c0fafd5" +"48c1e9204989cb4d0fafdf31db4d01d30f92c34d89da49c1e2204989ce4c" +"0faff548c1e32049c1eb204d01f34d01ca4d8914304911db4d895c300848" +"8b342483c6804c8b47104d8b8078010000498d9dffff53b148895c241849" +"89d14c0fafcb4c69d2feffab1e4989cb4c0fafdb4d01d34d89da49c1e220" +"4869d9feffab1e49c1eb204d01ca4d8914304911db4d895c30084d8d9524" +"f6b0f64c895424204889d6490faff24c69c2a0d230674989c94d0fafca45" +"31d24d01c1410f92c24d89c84c69d9a0d2306749c1e9204d01d94c8b1c24" +"4181c370ffffff49c1e02049c1e2204901f0488b7710488bb6780100004e" +"89041e4d11d14e894c1e084981c5bf1285f34c896c24484889d6490faff5" +"4c69c2844b77644989c94d0fafcd4531d24d01c1410f92c24d89c84c69d9" +"844b776449c1e9204d01d94c8b1c244181c360ffffff49c1e02049c1e220" +"4901f0488b7710488bb6780100004e89041e4d11d14e894c1e08488b3424" +"81c650ffffff4c69c2d7ac4b434c69cab6a71b4b4c69d1d7ac4b434d01ca" +"4d89d149c1e1204c69d9b6a71b4b49c1ea204d01c14c8b47104d8b807801" +"00004d890c304d11da4d89543008488b342481c640ffffff4c8b47104d8b" +"80780100004c69ca9ae67f394869d2ea11011a4c69d19ae67f394901d24c" +"89d248c1e2204869c9ea11011a49c1ea204c01ca498914304911ca4d8954" +"3008498b9424780100004c8b4c24284e8b6c0a084c8b9424880000004a8b" +"8c12200200004a8d34294c8b04244183c0984a038412300200004a8b1402" +"4811f24889d049b8fdfffcfffcfff389490fafc04189c04c89c3490fafdf" +"4d89c34989ec48896c24584c0fafdd48c1e8204989c24d0fafd74c89fd45" +"31f64d01da410f92c64989c74d0faffc4d89d349c1ea204d01fa49c1e320" +"49c1e6204901db4d11f2488b5f10488b9b780100004c8b34244181c630ff" +"ffff4e891c334e895433084d69d0feffab1e4989c3488b5c24184c0fafdb" +"4d01d34d89c24c0fafd34c89db48c1e32049c1eb204c69f0feffab1e4c01" +"d34d11f34c8b57104d8b92780100004c8b34244181c620ffffff4b891c32" +"4f895c32084d89c2488b5c24204c0fafd34989c34c0fafdb4969d8a0d230" +"674531f64901db410f92c64c89db49c1eb204c69f8a0d230674d01fb48c1" +"e32049c1e6204c01d34d11f34c8b57104d8b92780100004c8b34244181c6" +"b0feffff4b891c324f895c32084d89c2488b5c24484c0fafd34989c34c0f" +"afdb4969d8844b77644531f64901db410f92c64c89db49c1eb204c69f884" +"4b77644d01fb48c1e32049c1e6204c01d34d11f34c8b57104d8b92780100" +"004c8b34244181c640feffff4b891c324f895c32084d69d0b6a71b4b4c69" +"d8d7ac4b434d01d34d89da49c1e22049c1eb204969d8d7ac4b434c69f0b6" +"a71b4b4901da4d11f34969d8ea11011a4c69f09ae67f394901de4d69c09a" +"e67f394c89f348c1e3204869c0ea11011a49c1ee204c01c34911c631c048" +"39d60f97c04c01e9488b0c248d89d0fdffff488b7710488bb6780100004c" +"89140e4c8b0424458d40884c895c0e08488b4f10488b89780100004c8bbc" +"24880000004a891c394e89743908488b4c24504c8b91780100004b8b740a" +"104b8b8c3a100200004b1304024c8d040e4531c94c01c0410f92c14c894c" +"24104f8b843ac00100004c894424084901c04b03943ad0010000488b1424" +"8d9238ffffff498b14124883d2004531c94c01c2410f92c14989d249b8fd" +"fffcfffcfff3894d0fafd04589d04d89c64989ec4889ac24800000004c0f" +"aff54c89c34c8b5c2458490fafdb49c1ea204c89d5490fafec4531e44801" +"dd410f92c44d89d54d0fafeb4889eb48c1ed204c01ed48c1e32049c1e420" +"4c01f34c11e54c8b77104d8bb6780100004c8b24244181c410ffffff4b89" +"1c264b896c26084c89d34c8b5c2418490fafdb4d69f0feffab1e4c01f34d" +"89c64d0faff34989dc49c1e42048c1eb204d69eafeffab1e4d01f44c11eb" +"4c8b77104d8bb6780100004c8b2c244181c500ffffff4f89242e4b895c2e" +"084c89c34c8b5c2420490fafdb4d89d64d0faff34d69e0a0d230674531ed" +"4d01e6410f92c54d89f449c1ee204969eaa0d230674901ee49c1e42049c1" +"e5204901dc4d11ee488b5f10488b9b780100004c8b2c244181c5f0feffff" +"4e89242b4e89742b084c89c34c8b5c2448490fafdb4d89d64d0faff34d69" +"e0844b77644531ed4d01e6410f92c54d89f449c1ee204969ea844b776449" +"01ee49c1e42049c1e5204901dc4d11ee4989fb488b5f10488b9b78010000" +"4c8b2c244181c5e0feffff4e89242b4e89742b084969d8b6a71b4b4d69f2" +"d7ac4b434901de4c89f348c1e32049c1ee204d69e0d7ac4b434d69eab6a7" +"1b4b4c01e34d11ee4c8b67104d8ba424780100004c8b2c244181c5d0feff" +"ff4b891c2c4f89742c084969d8ea11011a4d69f29ae67f394901de4d69c0" +"9ae67f394c89f348c1e3204d69d2ea11011a49c1ee204c01c34d11d64c8b" +"47104d8b80780100004c8b14244181c2c0feffff4b891c104f897410084c" +"8b04244181c078ffffff4801ce488b4c2450488b8978010000488b7c2410" +"4a133c01488b342481c628ffffff4803442408488b442428488b6c01184c" +"130c314a8b84390002000048894424384801e831f64801c748897c24104a" +"8b8439500100004889442408400f92c648897424404801f84531d24901c1" +"410f92c24a039439b0010000488b04248d8018ffffff488b3c014a8b8439" +"a001000048894424304883d7004c01c84531c04801c7410f92c04889f948" +"b8fdfffcfffcfff389480fafc889ce4989f64c8ba424800000004d0faff4" +"4889f3488b442458480fafd848c1e9204889ca490fafd44531e44801da41" +"0f92c44989cd4c0fafe84889d348c1ea204c01ea48c1e32049c1e4204c01" +"f34c11e24d8b73104d8bb6780100004c8b24244181c4a0feffff4b891c26" +"4b895426084889ca488b442418480fafd04869defeffab1e4801da4889f3" +"480fafd84989d649c1e62048c1ea204c69e1feffab1e4901de4c11e2498b" +"5b10488b9b780100004c8b24244181c490feffff4e8934234a8954230848" +"89f2488b442420480fafd04889cb480fafd84c69f6a0d230674531e44c01" +"f3410f92c44989de48c1eb204c69e9a0d230674c01eb49c1e62049c1e420" +"4901d64c11e3498b5310488b92780100004c8b24244181c480feffff4e89" +"34224a895c22084889f2488b442448480fafd04889cb480fafd84c69f684" +"4b77644531e44c01f3410f92c44989de48c1eb204c69e9844b77644c01eb" +"49c1e62049c1e4204901d64c11e3498b5310488b92780100004c8b242441" +"81c470feffff4e8934224a895c22084869d6b6a71b4b4869d9d7ac4b4348" +"01d34889da48c1e22048c1eb204c69f6d7ac4b434c69e1b6a71b4b4c01f2" +"4c11e34d8b73104d8bb6780100004c8b24244181c460feffff4b8914264b" +"895c26084869d6ea11011a4869d99ae67f394801d34869c69ae67f394889" +"da48c1e2204869c9ea11011a48c1eb204801c24811cb498b4310488b8078" +"010000488b0c2481c150feffff4889140848895c080848036c2438488b04" +"248d8868ffffff488b442450488b8078010000488b6c244048132c08488b" +"4c241048034c2408488b0c248d89b8feffff4c131408488b0c2481c108ff" +"ffff4c034c2430488b542428488b54102048895424604a8bb438f0010000" +"48897424684c130408488d0c3231d24801cd48896c24400f92c248895424" +"104a8b8c38e000000048894c24784801e931ed4901ca4c89542430400f92" +"c54a8b8c389001000048894c24384c01d14531d24901c8410f92c24a03bc" +"3840010000488b0c248d89a8feffff488b14084a8b843830010000488944" +"24704883d2004c01c031c94801c20f92c148894c24084889d148b8fdfffc" +"fffcfff389480fafc889c84989c64c8b8c24800000004d0faff14889c348" +"8b7c2458480fafdf48c1e9204889ce490faff14531e44801de410f92c449" +"89cd4c0fafef4889f348c1ee204c01ee48c1e32049c1e4204c01f34c11e6" +"4d8b73104d8bb6780100004c8b24244181c430feffff4b891c264b897426" +"084889ce488b7c2418480faff74869d8feffab1e4801de4889c3480fafdf" +"4989f649c1e62048c1ee204c69e1feffab1e4901de4c11e6498b5b10488b" +"9b780100004c8b24244181c420feffff4e8934234a897423084889c6488b" +"7c2420480faff74889cb480fafdf4c69f0a0d230674531e44c01f3410f92" +"c44989de48c1eb204c69e9a0d230674c01eb49c1e62049c1e4204901f64c" +"11e3498b7310488bb6780100004c8b24244181c410feffff4e8934264a89" +"5c26084889c6488b7c2448480faff74889cb480fafdf4c69f0844b776445" +"31e44c01f3410f92c44989de48c1eb204c69e9844b77644c01eb49c1e620" +"49c1e4204901f64c11e3498b7310488bb6780100004c8b24244181c400fe" +"ffff4e8934264a895c26084869f0b6a71b4b4869d9d7ac4b434801f34889" +"de48c1e62048c1eb204c69f0d7ac4b434c69e1b6a71b4b4c01f64c11e34d" +"8b73104d8bb6780100004c8b24244181c4f0fdffff4b8934264b895c2608" +"4869f0ea11011a4869d99ae67f394801f34869c09ae67f394889de48c1e6" +"204869c9ea11011a48c1eb204801c64811cb498b4310488b807801000048" +"8b0c2481c1e0fdffff4889340848895c0808488b4424604803442468488b" +"04248d8058ffffff488b4c2450488b8978010000488b7c241048133c0148" +"8b4424404803442478488b04248d8048feffff48132c01488b4424304803" +"442438488b04248d80f8feffff4c1314014c03442470488b04248d8098fe" +"ffff488b742428488b7431284889742460488b5c240848131c014a8b8439" +"e001000048894424684801c631c04801f748897c24100f92c04a8b743970" +"48897424784c8d043731f64c01c548896c2430400f92c64a8bbc39800100" +"0048897c24384c8d0c2f4531c04d01ca4c89542440410f92c04a8bbc3920" +"01000048897c24284d8d0c3a4531d24889df4c01cf48897c2408410f92c2" +"4a039439d0000000488b14248d9238feffff4c8b0c114a8b8c39c0000000" +"48894c24704983d1004801f931ed4901c9400f92c548bafdfffcfffcfff3" +"89490fafd189d14989ce488bbc24800000004c0faff74889cb4c8b6c2458" +"490fafdd48c1ea20480faffa4531e44801df410f92c44c0fafea4889fb48" +"c1ef204c01ef48c1e32049c1e4204c01f34c11e74d8b73104d8bb6780100" +"004c8b24244181c4c0fdffff4b891c264b897c26084889cb488b7c241848" +"0fafdf480faffa4c69f1feffab1e4c01f74989fe49c1e62048c1ef204c69" +"e2feffab1e4901de4c11e7498b5b10488b9b780100004c8b24244181c4b0" +"fdffff4e8934234a897c23084889cb488b7c2420480fafdf480faffa4c69" +"f1a0d230674531e44c01f7410f92c44989fe48c1ef204c69eaa0d230674c" +"01ef49c1e62049c1e4204901de4c11e7498b5b10488b9b780100004c8b24" +"244181c4a0fdffff4e8934234a897c23084889cb488b7c2448480fafdf48" +"0faffa4c69f1844b77644531e44c01f7410f92c44989fe48c1ef204c69ea" +"844b77644c01ef49c1e62049c1e4204901de4c11e7498b5b10488b9b7801" +"00004c8b24244181c490fdffff4e8934234a897c23084869f9b6a71b4b48" +"69dad7ac4b434801fb4889df48c1e72048c1eb204c69f1d7ac4b434c69e2" +"b6a71b4b4c01f74c11e34d8b73104c899c24980000004d8bb6780100004c" +"8b24244181c480fdffff4b893c264b895c26084869f9ea11011a4869da9a" +"e67f394801fb4869c99ae67f394889df48c1e7204c69f2ea11011a48c1eb" +"204801cf4c11f3498b4b10488b89780100004c8b34244181c670fdffff4a" +"893c314a895c3108488b4c246048034c2468488b0c248db948ffffff4c8b" +"6c2450498b8d7801000048130439488b5424104803542478488b3c248dbf" +"d8fdffff48133439488b3c2481c7e8feffff488b54243048035424384c13" +"0439488b3c2481c788feffff488b54244048035424284c131439488b3c24" +"81c728feffff488b542408480354247048132c39488b3c248d9f18feffff" +"488b3c24448db7d8feffff4531db4a030439488b3c248dbf68fdffff410f" +"92c34801f04c131c3931ff4a03843970010000400f92c74c01c04a133c31" +"488b342481c678feffff4531c04a03843910010000410f92c04c01d04c13" +"04314531d24a038439b0000000410f92c24801e84c13141931db4a034439" +"500f92c3488b142481c2c8fdffff4c8b34114e034c39604a8bac39600100" +"004983d600498d142b4531e44801d74a8b9439000100004889542418410f" +"92c44801fa31f64901d04a8b9439a00000004889542420400f92c64d8d0c" +"1031d24d01ca0f92c24531c94e03543940410f92c14901c6488b04248d80" +"a8fdffff488b04014e89b43970020000488b0c248d89b8fdffff4d8bb578" +"01000049131c0e4901eb4a8d0c134b898c3e78020000488b0c248d89c8fe" +"ffff4d8b9d780100004d13240b48037c2418488b0c248d8968feffff4913" +"340b488b0c2481c108feffff4c034424204913140b4c01d34f8b843bf000" +"00004911c14b8d040431c94801c64b8b9c3b900000000f92c1488d041e31" +"ff4801c24f8b543b30400f92c74e8d341231c04d01f10f92c04d01c44f89" +"8c3b800200004c8b0424458d8858feffff4d8b85780100004b130c084801" +"de488b34248db6f8fdffff49133c30488b342481c698fdffff4c01d24913" +"043031d24b038c38800000000f92c24c8d0c0f31f64f034c3820400f92c6" +"4801f94a8d0c084b898c3888020000488b0c248d89e8fdffff498bbd7801" +"00004813140f4901c1488b04248d8088fdffff4813340731c04a03543f10" +"0f92c04801f24a89943f90020000488b0c248d8978fdffff498b95780100" +"004813040a4a89843a98020000488b04248d70a0488b04248d50d04c8bb4" +"24980000004c89f7e800000000be0d0000004c89ef498b857801000048ba" +"56d5ffffff7fffdc31c94a399438400200000f92c14889ca48f7da4e8b84" +"38480200004e8d0c0249bafeffa958ffff550f4531db4d39d1410f97c34c" +"01c248f7d14c11d948c1f93f4a8b9438500200004801ca4883d1ff49b811" +"7b587b506998b34531c94c39c2410f97c14901c949c1f93f4a8b8c385802" +"00004c01c94983d1ff48ba5e89c279c2a53bb24531c04839d1410f97c04d" +"01c849c1f83f4a8b8c38600200004c01c14983d0ff48ba6ad6a521dbd38d" +"254531c94839d1410f97c14d01c149c1f93f4a8b8c3868020000498d1409" +"49b84cf3bf1cf588000d31c04c39c20f97c04c01c94411c883e001498b4e" +"10488b91780100008b89d001000083c1f04189c04180f0014488440a0f49" +"8b4e10488b91780100008b89d001000083c1f088440a0f488b0c2448398c" +"24a0000000730fbe0e00000048398c24900000007319e80000000031c048" +"81c4a80000005b415c415d415e415f5dc3898fd0010000ebe60f1f800000" +"0000554157415641554154534883ec5848894c24208954241889f0488b4f" +"10488b573048890c248b99d0010000448d73a0be0d0000004c39f20f8390" +"0100004989ff488b4f384c39f1730abe0e000000e97a01000048894c2428" +"488954243089442414488b04244489b0d00100004c89ff4489f6ba600310" +"00b930000000e800000000488b4424208d483048895c24388d43d0894424" +"1c4c89742408eb130f1f4000488b4c2440394c24200f84ed00000083c1f8" +"488b0424488b807801000048894c2440488b0408488944245041bc3f0000" +"00eb18be0e0000004c89f7e8000000004c8b7424084983c4ff73b54c89ff" +"8b5c241c89de4489f2e8000000004c89ff4489f689dab930000000e80000" +"0000488b4424504c0fa3e073cc4d8b7710498b5f30458baed0010000418d" +"6dd0be0d0000004839eb73a2498b47384839e8729448894424484189aed0" +"0100004c89ff89ee488b5424088b4c2418e8000000004c89ff488b742408" +"89eab930000000e800000000be0d0000004c39eb0f8358ffffffbe0e0000" +"004c396c24480f8248ffffff4589aed0010000e944ffffff4c89ff8b7424" +"144489f2b930000000e800000000488b4c243848394c2430be0d00000073" +"0cbe0e00000048394c24287317488b3c244883c4585b415c415d415e415f" +"5de900000000488b04248988d00100004883c4585b415c415d415e415f5d" +"c30f1f00554157415641554154534883ec18897424084889fb488b7f104c" +"8b6330448bbfd0010000458d77d0be0d0000004d39f473544c8b6b384d39" +"f57307be0e000000eb444489b7d00100004889fd4889df4489f6ba300000" +"00e8000000004889df8b7424084489f2e800000000be0d0000004889ef4d" +"39fc730ebe0e0000004d39fd0f83bd000000e8000000004531f6488b7b10" +"4c8b6b30448ba7d0010000458d7c24d0be0d0000004d39fd7366488b6b38" +"4c39fd7307be0e000000eb564489742414448b7424084183c6304489bfd0" +"01000048897c24084889df4489feba30000000e8000000004889df4489f6" +"448b7424144489fae800000000be0d000000488b7c24084d39e5730abe0e" +"0000004c39e57340e80000000031c04421f0488b4b10488b91780100008b" +"89d001000083c1f088440a0f4883c4185b415c415d415e415f5dc34189c6" +"4489bfd0010000e93cffffff4489a7d0010000ebbe0f1f44000055415741" +"5641554154534881ec280100004189d2488b4710488b5730488944240844" +"8b88d0010000458db110ffffff41b80d0000004c39f20f8351090000488b" +"47384c39f0730b41b80e000000e93d09000048894424488974243c488954" +"245048be0000000001000000488b4424084489b0d0010000418d51c04889" +"942418010000418d51b04889942410010000418d51a04889942408010000" +"418d51904889942400010000418d518048899424f8000000418d9170ffff" +"ff48899424f0000000418d9178ffffff48899424e8000000418d51884889" +"9424e0000000418d519848899424d8000000418d51a848899424d0000000" +"418d51b848899424c8000000418d51c848899424c00000004489d589ca48" +"899424b8000000418d9160ffffff48899424b0000000418d9150ffffff48" +"899424a8000000418d9140ffffff48899424a0000000418d9130ffffff48" +"89942498000000418d9120ffffff4889942490000000418d9118ffffff48" +"89942488000000418d9128ffffff4889942480000000418d9138ffffff48" +"89542478418d9148ffffff4889542470418d9158ffffff48895424684c89" +"4c2458418d8968ffffff48894c24604c8bb8780100004531c931c94531d2" +"4531db31db31d2c744242c000000004c89b4242001000048897c24106666" +"6666662e0f1f8400000000004531ed4531e448896c24400f1f4400004889" +"4c24184c896424204c894c24304c8ba424b8000000478d042c4f8b040748" +"8b442440428d2c284d8b3c2f4589f94489c04c89cf480faff849c1ef2049" +"0fafc749c1e8204c89cd490fafe84801c5b800000000480f42c64989ee4d" +"0fafc748c1ed204c01c5488b4c24104c8b41104d8b807801000049c1e620" +"4901fe488bbc24180100004d8934384811c549896c3808438d3c2c83c708" +"488b4424084c8b8078010000498b3c384189f84d89c64d0faff14d0fafc7" +"48c1ef204889fd490fafe94c01c541b8000000004c0f42c64889ee490faf" +"ff48c1ed204801fd488b7910488bbf7801000048c1e6204c01f64c8bb424" +"100100004a8934374c11c54a896c3708438d342c83c610488bb878010000" +"488b343789f74989f84d0fafc1490fafff48c1ee204989f64d0faff14901" +"febf0000000048bd0000000001000000480f42fd4c89f5490faff749c1ee" +"204901f6488b7110488bb67801000048c1e5204c01c54c8b842408010000" +"4a892c064911fe4e89740608438d342c83c618488bb878010000488b3437" +"89f74989f84d0fafc1490fafff48c1ee204989f64d0faff14901febf0000" +"000048bd0000000001000000480f42fd4c89f5490faff749c1ee204901f6" +"488b7110488bb67801000048c1e5204c01c54c8b8424000100004a892c06" +"4911fe4e89740608438d342c83c620488bb878010000488b343789f74989" +"f84d0fafc1490fafff48c1ee204989f64d0faff14901febf0000000048bd" +"0000000001000000480f42fd4c89f5490faff749c1ee204901f648c1e520" +"4c01c5488b7110488bb6780100004c8b8424f80000004a892c064911fe4e" +"89740608438d342c83c6284c8b642420488bb878010000488b3437488b79" +"104c8b877801000089f74989fe4d0faff1490fafff48c1ee204c0fafce49" +"01f9bf0000000048bd0000000001000000480f42fd490faff74d89cf49c1" +"e72049c1e9204901f14d01f74c8bb42420010000488b8c24f00000004d89" +"3c084911f94d894c08084c8b4c24304c8bb8780100004c89d54b036c3760" +"488b8424e80000004d1324074d89d84f03443770488b8424e00000004d8b" +"14074911ea4889d84b03843780000000488b8c24d80000004d8b1c0f4d11" +"c34889d64b03b43790000000488b8c24d0000000498b1c0f4811c3488b7c" +"24184b03bc37a0000000488b8c24c8000000498b140f4811f24f038c37b0" +"000000488b8c24c0000000498b0c0f4811f94839f94883d2004839f248be" +"00000000010000004883d3004839c34983d3004d39c34983d2004939ea48" +"8b6c24404983d400428d042e83c0d04983c530a9f0ffffff0f853efcffff" +"ff44242c4d89cf48b8fdfffcfffcfff3894c0faff84489ff48897c24204c" +"8d86abaaffff4889f8490fafc048894424184881c6fffffeb9480faffe49" +"c1ef204d0fafc74901f8bf000000004c894c243049b90000000001000000" +"490f42f94d89c1490faff749c1e8204901f04c8b6c2410498b7510488bb6" +"7801000049c1e1204c034c2418488b8424b00000004c890c064911f84c89" +"440608498b4510488b807801000048be00000000010000004881c6ffff53" +"b14c8b6c24204c89ef480faffe4d69c5feffab1e490faff74c01c64989f0" +"49c1e0204d69cffeffab1e48c1ee204901f8488bbc24a80000004c890438" +"4c11ce488974380848b80000000001000000480524f6b0f64c89ee480faf" +"f04969fda0d23067490fafc74801f8bf0000000049b80000000001000000" +"490f42f84989c04d69cfa0d2306748c1e8204c01c84c8b6c24104d8b4d10" +"4d8b897801000049c1e0204901f0488bb424a00000004d8904314811f849" +"8944310848b800000000010000004805bf1285f3488b7c24204889fe480f" +"aff04869ff844b7764490fafc74801f8bf0000000049b800000000010000" +"00490f42f84989c04d69cf844b776448c1e8204c01c849c1e0204901f049" +"8b7510488bb6780100004c8b8c24980000004e89040e4811f84a89440e08" +"4c8b6c24204969c5d7ac4b434969f5b6a71b4b4969ffd7ac4b434801f748" +"89fe48c1e6204d69c7b6a71b4b4c8944241848c1ef204801c64c8b442410" +"498b4010488b80780100004c8b8c24900000004a89340848137c24184a89" +"7c0808498b4010488b80780100004969f59ae67f394969fdea11011a4d69" +"c79ae67f394901f84c89c748c1e7204d69cfea11011a49c1e8204801f74a" +"893c304d11c84e89443008488b4424084c8bb8780100004f031437488b84" +"24880000004d1324074f035c3710488b8424800000004d8b04074d11d04b" +"035c3720488b442478498b04074c11d84b03543730488b742470498b3437" +"4811de4b034c3740488b7c2468498b3c3f4811d74c8b4c24304f034c3750" +"4c8b4c24604f8b0c0f4911c94939c94889f94883d1004839d14889f248be" +"00000000010000004883d2004839da4889c34883d3004c39db4d89c34983" +"d3004d39d34d89e24983d2004883c508837c242c06488b7c24100f85e4f8" +"ffff4f899437e8000000488b442408488bb0780100004e899c36e0000000" +"488bb0780100004a899c36d8000000488bb0780100004a899436d0000000" +"488b90780100004a898c32c8000000488b80780100004e898c30c0000000" +"488b5c24588d53d08b74243ce80000000048395c245041b80d000000730d" +"41b80e00000048395c2448731e488b7c24084489c64881c4280100005b41" +"5c415d415e415f5de900000000488b4424088998d00100004881c4280100" +"005b415c415d415e415f5dc3660f1f4400005541574156415541545389d3" +"48897c24f8488b47104c8bb07801000089d04d8b04064d8b54060831ff49" +"bcabaafffffffffeb94d29c441bb000000004d19db498b540628498b4c06" +"204d8b4c06184d09d04989d74909cf4d09c74d09cf4d89dd4d29d54983db" +"0049ba0000ac4e010054e14531c04d39d5410f97c04189f24d01d8498b6c" +"061049c1f83f4c89c04829e84983d80049bbdb094f095f2dcf9831f64c39" +"d8400f97c64c01c648c1fe3f4989f04d29c84883de0049b940ed7a0c7bb4" +"889b4531db4d39c8410f97c34901f349c1fb3f4d89d94929c94983db0048" +"be2853b4bc4958e4b431c94939f10f97c14c01d948c1f93f4829d148ba9a" +"e67f39ea11011a4801d14909ef48baffff53b1feffab1e498d741500480f" +"44f74589d34b89741e084c0f44e74f89241e48ba24f6b0f6a0d23067488d" +"0410480f44c74b89441e1049bdbf1285f3844b77644b8d0428480f44c74b" +"89441e1848bdd7ac4b43b6a71b4b498d0429480f44c74b89441e20480f44" +"cf4b894c1e284183c23083c330488b4424f8488b4010488bb87801000048" +"8b041f49bbabaafffffffffeb94929c3b9000000004819c94c8b441f084c" +"09c04c8b7c1f284c8b4c1f204d89fe4d09ce4909c6488b441f184909c648" +"89ce4c29c64883d90031d249b80000ac4e010054e14c39c60f97c24801ca" +"4c8b441f1048c1fa3f4889d34c29c34883da0031c949bcdb094f095f2dcf" +"984c39e30f97c14801d148c1f93f4889ca4829c24883d90031c049bc40ed" +"7a0c7bb4889b4c39e20f97c04801c848c1f83f4889c14c29c94883d80045" +"31c949bc2853b4bc4958e4b44c39e1410f97c14901c149c1f93f4d29f948" +"b89ae67f39ea11011a4901c14d09c648b8ffff53b1feffab1e488d0406be" +"00000000480f44c64a894417084c0f44de4e891c1748b824f6b0f6a0d230" +"67488d0403480f44c64a894417104a8d042a480f44c64a89441718488d04" +"29480f44c6b9000000004a894417204c0f44c94e894c17285b415c415d41" +"5e415f5dc36666666666662e0f1f84000000000055415741564155415453" +"4881ecb800000048894c246089d589f2488b4710488b4f3048894424188b" +"98d0010000448db340ffffffbe0d0000004c39f10f83d40600004989ff48" +"8b4738be0e0000004c39f00f82bf06000048894424688954245448894c24" +"70488b4424184489b0d00100008db370ffffff4c89ff4889742440ba3000" +"0000e8000000004c89ff4489f6ba60031000b930000000e800000000488b" +"4424608d4830448d63a048895c24788d43d089442458896c245c4c897424" +"204489642414eb1c662e0f1f840000000000488b8c2480000000394c2460" +"0f840306000083c1f8488b442418488b807801000048898c248000000048" +"8b040848898424b000000041bd3f000000eb090f1f004983c5ff73ba498b" +"5f10498b4f308b83d0010000448da070ffffffbe0d0000004c39e10f8327" +"050000498b5738be0e0000004c39e20f821505000048899424a000000044" +"89a3d0010000498b7f104d8b4730448bb7d0010000418d56d0be0d000000" +"4939d0488944244848898c24a80000000f8348010000498b47384839d073" +"0abe0e000000e93501000048894424088997d0010000488bb7780100004c" +"8b542440c4a17e6f441608488b442420c5fdd44c060862f3f5281ec001c4" +"e37930d003c4e37930c802c4e37930d8014c89442428c57b93c0c5fb93ca" +"4c8b0c06488b440628450fb6c04183e0014a034416284e030c164c890c16" +"c4e1f97ece4883d6004c8b8f780100004989741108c5fb93f1c57b93cbc4" +"c3f916ca014d11d04c8b9f780100004d89441310450fb6c94183e1014d39" +"d0c4e37d39c801c4c1f97ec04d11c14c8b97780100004d894c1218400fb6" +"f683e6014d39c1c4c3f916c0014c11c64c8b8f7801000049897411200fb6" +"c983e1014c39c64811c1488b877801000048894c10284889fd4c89ff4489" +"e6c5f877e800000000be0d0000004889ef4c39742428731abe0e0000004c" +"397424080f83fc030000662e0f1f840000000000e800000000488b442448" +"83c0a089442428498b7f10498b4f308b87d00100008d50d0be0d00000048" +"39d10f83f0010000498b77384839d6730abe0e000000e9dd0100004889b4" +"24880000008997d00100004889442438498b4710488b8078010000488b6c" +"244048894c2430488b0c284c8b5c280848beabaafffffffffeb94829ce41" +"be000000004d19f64c8b4428284c898424980000004c8b5428204c8b4c28" +"184c09d948897c24084c89c74c09d74809cf4c09cf4d89f04d29d8488b6c" +"28104889ac24900000004983de0031c949bb0000ac4e010054e14d39d80f" +"97c14c01f148c1f93f4989cb4929eb4883d9004531f648bddb094f095f2d" +"cf984939eb410f97c64901ce49c1fe3f4c89f14c29c94983de0031ed49b9" +"40ed7a0c7bb4889b4c39c9400f97c54c01f548c1fd3f4989ee4d29d64883" +"dd004531c949ba2853b4bc4958e4b44d39d6410f97c14901e949c1f93f4c" +"2b8c249800000049ba9ae67f39ea11011a4d01d1480bbc249000000048bf" +"ffff53b1feffab1e498d3c3841b800000000490f44f848897c1008490f44" +"f04889341048be24f6b0f6a0d23067498d3433490f44f0488974101048be" +"bf1285f3844b7764488d0c31490f44c848894c101848b9d7ac4b43b6a71b" +"4b498d0c0e490f44c848894c10204d0f44c84c894c10284c89ff8b742428" +"488b4c2420e800000000488b442438be0d000000488b7c24084839442430" +"7316be0e00000048398424880000000f83e10100000f1f00e80000000048" +"8b44244883c0d0894424084d8b7710498b6f30418b86d00100008d50d0be" +"0d0000004839d50f83df000000498b4f384839d1730abe0e000000e9cc00" +"000048894c2430418996d00100004889442438498b86780100004c8b5424" +"204a8b0c104a8b7410084a8b7c10284e8b4410204e8b4c10184e8b541010" +"4c8d1c094c891c10480facf13f498b867801000048894c10084c0facd63f" +"498b867801000048897410104d0facca3f498b86780100004c895410184d" +"0facc13f498b86780100004c894c10204c0fa4c701498b86780100004889" +"7c10284c89ff8b742408e800000000488b442438be0d0000004839c5731a" +"be0e00000048394424300f83e3000000662e0f1f8400000000004c89f7e8" +"000000004c89ff8b7424144489e28b4c2428e8000000004c89ff8b742458" +"8b542408488b4c2440e800000000be0d000000488b44244848398424a800" +"00008b6c245c4c8b7424207313be0e00000048398424a0000000735e0f1f" +"40004889dfe8000000004c89ff4489f6448b6424144489e2b960000000e8" +"00000000488b8424b00000004c0fa3e80f837efaffff4c89ff4489e64489" +"f289e9e8000000004c89ff4489f64489e2b960000000e800000000e956fa" +"ffff8983d0010000eba64489b7d0010000e907fcffff8987d0010000e91c" +"feffff418986d0010000e923ffffff4c89ff8b7424544489f2b960000000" +"e800000000be0d000000488b4c247848394c2470730cbe0e00000048394c" +"2468731b488b7c24184881c4b80000005b415c415d415e415f5de9000000" +"00488b4424188988d00100004881c4b80000005b415c415d415e415f5dc3" +"6690554157415641554154534883ec2889f54889fb488b7f10488b433044" +"8bafd0010000458db550feffffbe0d0000004c39f00f8357010000488b4b" +"384c39f1730abe0e000000e94401000048894c24104889442418896c240c" +"48897c24204489b7d00100004889df4489f64189d7ba30000000e8000000" +"00418db5b0feffff4889dfba30000000e800000000418db580feffff4889" +"dfba60031000b930000000e800000000458da5e0feffff4889df4489e644" +"89fab990000000e800000000458dbd70ffffff48bd0080000000800069eb" +"1e6666666666662e0f1f8400000000004889e848d1e84883fd014889c576" +"4d4889df4489fe4489e2e8000000004889df4489e64489fab990000000e8" +"0000000040f6c50174ca4889df4489fe4489f24489e1e8000000004889df" +"4489f64489fab990000000e800000000eba44889df4489fe4489f2e80000" +"00004889df4489f64489fab990000000e8000000004889df8b74240c4489" +"f2b990000000e8000000004c396c2418488b7c2420be0d000000730cbe0e" +"0000004c396c241073134883c4285b415c415d415e415f5de90000000044" +"89afd00100004883c4285b415c415d415e415f5dc3660f1f840000000000" +"5541574156415541545350488914244989fe448d5230488b4710488b8078" +"0100004e8b0c104e8b5c100831db48baabaafffffffffeb94c29ca41bc00" +"0000004d19e44e8b4410284e8b7c10204e8b6c10184d09d94c89c74c09ff" +"4c09cf4c09ef4d89e14d29d94e8b5410104983dc0049bb0000ac4e010054" +"e131ed4d39d9400f97c54c01e548c1fd3f4989eb4d29d34883dd0048b9db" +"094f095f2dcf984531e44939cb410f97c44901ec49c1fc3f4c89e54c29ed" +"4983dc0048b940ed7a0c7bb4889b4531ed4839cd410f97c54d01e549c1fd" +"3f4c89e94c29f94983dd0049bf2853b4bc4958e4b44531e44c39f9410f97" +"c44189f74d01ec49c1fc3f4d29c448be9ae67f39ea11011a4c01e64c09d7" +"48bfffff53b1feffab1e498d3c39458d4730480f44fb4a897c0008480f44" +"d34a89140048ba24f6b0f6a0d23067498d1413480f44d34a8954001048ba" +"bf1285f3844b7764488d541500480f44d34a8954001848bad7ac4b43b6a7" +"1b4b488d0c11480f44cb4a894c0020480f44f34a89740028418d7760488b" +"1c248d53604c89f7b930000000e8000000004c89f74489fe89dab9300000" +"004883c4085b415c415d415e415f5de9000000000f1f8400000000005541" +"574156415541545389f04889f9488b7f104c8b4930448b87d0010000458d" +"58f0be0d0000004d39d90f83fd0000004c8b51384d39da730abe0e000000" +"e9ea00000044899fd0010000488b9f7801000089d2833c13007470458d68" +"f8488b59104c8ba378010000458b741404458b7c14084539fe7d5644896c" +"24fc458d6fff45896c14084c8ba378010000418b2c14410fb62c2c488b49" +"104c8ba1780100008b89d001000083c1f04183e507440fa3ed448b6c24fc" +"400f92c5410f92440c0f4c8ba378010000eb0631c9eb3e31ed4539fe4489" +"e941886c0c01488b9b780100000f9c040b488b9f78010000420fb64c1b09" +"40b50142807c1b08007510c7041300000000488b9f7801000031ed89c088" +"4c0301488b8f7801000040882c014d39c1730abe0e0000004d39c2730f5b" +"415c415d415e415f5de900000000448987d00100005b415c415d415e415f" +"5dc36690554157415641554154535089f34989ff488b7f104d8b6f30448b" +"a7d0010000458d7424a0be0d0000004d39f50f83a9000000498b6f384c39" +"f5730abe0e000000e9960000004489b7d0010000418d7424d048893c244c" +"89ffba30000000e8000000004c89ff4489f6ba60031000b930000000e800" +"000000498b4710488b88780100008b80d001000083c0f0c644010f014c89" +"ff89deba60000000e8000000008d73604c89ff4489f2b960000000e80000" +"0000be0d000000488b3c24488b877801000089d9c68408c0000000014d39" +"e5730abe0e0000004c39e573134883c4085b415c415d415e415f5de90000" +"00004489a7d00100004883c4085b415c415d415e415f5dc36666662e0f1f" +"840000000000554157415641554154534883ec284189f0488b5f10488b47" +"30448bbbd0010000418daf40ffffffbe0d0000004839e80f830a02000048" +"8b4f384839e9730abe0e000000e9f701000048894c240889abd001000041" +"8d7060488954241883c2604989fcb96000000048894424204c89442410e8" +"00000000458daf70ffffff4c89e74489eeba30000000e8000000004c89e7" +"89eeba60031000b930000000e800000000458d77a04c89e74489f6ba6000" +"0000e8000000004c8b5c2410458d8bc0000000488b8378010000488b5424" +"1889d10fb68408c0000000498b4c2410488bb1780100004889c148f7d948" +"ffc8488b7c2e284821c74e8b4436284921c84909f84e89440e28488b7c2e" +"204821c74e8b4436204921c84909f84e89440e20488b7c2e184821c74e8b" +"4436184921c84909f84e89440e18488b7c2e104821c74e8b4436104921c8" +"4909f84e89440e10488b7c2e084821c74e8b4436084921c84909f84e8944" +"0e08488b3c2e4821c74e8b04364921c84909f84e89040e458d93f0000000" +"4c89de418d7fd04d8b4424104d8b98780100004f8b442b284921c04d8b4c" +"3b284921c94d09c14f894c13284f8b442b204921c04d8b4c3b204921c94d" +"09c14f894c13204f8b442b184921c04d8b4c3b184921c94d09c14f894c13" +"184f8b442b104921c04d8b4c3b104921c94d09c14f894c13104f8b442b08" +"4921c04d8b4c3b084921c94d09c14f894c13084b23042b49230c3b4809c1" +"4b890c134c89e7b960000000e800000000be0d0000004c397c2420730cbe" +"0e0000004c397c240873164889df4883c4285b415c415d415e415f5de900" +"0000004489bbd00100004883c4285b415c415d415e415f5dc30f1f440000" +"554157415641554154534883ec584189d689f24989ff488b7f10498b4730" +"448ba7d0010000418dac2420feffffbe0d0000004839e80f832c02000049" +"8b77384839ee730abe0e000000e9190200004489c3488974244089afd001" +"000048897c24504c89ff89ee48895424304489f2488944244848894c2438" +"e800000000418db42480feffff89742428418d5660895424244c89ff89d9" +"e800000000458d6c24a0418d96c00000008954242c4c89ff4489ee44896c" +"241c89d9e800000000418db42440ffffff8974240c895c2418418d5c24d0" +"895c24144c89ff4489ea89d9e800000000418db42470ffffff897424104c" +"89ff4489ea89d9e8000000004c89ff488b5c243089de448b6c240c4489ea" +"89e9e8000000008d7330418d8c2450feffff894c24204c89ff8b542410e8" +"000000004c89ff4489ee488b5c243889da448b6c24184489e9e800000000" +"8d53304183c5304c89ff8b7424104489e9e8000000004c89ff448b6c241c" +"4489ee4489f28b4c2424e800000000418d56304181c6900000004c89ff8b" +"7424144489f1e800000000418d9c24e0feffff4c89ff89de8b54240c4489" +"e9e8000000004c89ff4489ee89da89e9e800000000418d942410ffffff4c" +"89ff8b5c241489de8b4c2420e8000000004c8b742430418d76604c89ff44" +"89ea8b6c242889e9e800000000418db690000000418d8c24b0feffff894c" +"240c4c89ff89dae8000000004c89ff4489ee8b54242c488b4c2438e80000" +"0000418db6c00000004c89ff4489ea89e9e8000000004181c6f00000004c" +"89ff4489f689da8b4c240ce800000000be0d000000488b7c24504c396424" +"48730cbe0e0000004c3964244073134883c4585b415c415d415e415f5de9" +"000000004489a7d00100004883c4585b415c415d415e415f5dc355415741" +"5641554154534881ec280100004189d2488b4710488b5730488944240844" +"8b88d0010000458db110ffffff41b80d0000004c39f20f8353090000488b" +"47384c39f0730b41b80e000000e93f09000048894424488974243c488954" +"245048be0000000001000000488b4424084489b0d0010000418d51c04889" +"942418010000418d51b04889942410010000418d51a04889942408010000" +"418d51904889942400010000418d518048899424f8000000418d9170ffff" +"ff48899424f0000000418d9178ffffff48899424e8000000418d51884889" +"9424e0000000418d519848899424d8000000418d51a848899424d0000000" +"418d51b848899424c8000000418d51c848899424c00000004489d589ca48" +"899424b8000000418d9160ffffff48899424b0000000418d9150ffffff48" +"899424a8000000418d9140ffffff48899424a0000000418d9130ffffff48" +"89942498000000418d9120ffffff4889942490000000418d9118ffffff48" +"89942488000000418d9128ffffff4889942480000000418d9138ffffff48" +"89542478418d9148ffffff4889542470418d9158ffffff48895424684c89" +"4c2458418d8968ffffff48894c24604c8bb8780100004531c931c94531d2" +"4531db31db31d2c744242c000000004c89b4242001000048897c24106666" +"6666662e0f1f8400000000004531ed4531e448896c24400f1f4400004889" +"4c24184c896424204c894c24304c8ba424b8000000478d042c4f8b040748" +"8b442440428d2c284d8b3c2f4589f94489c04c89cf480faff849c1ef2049" +"0fafc749c1e8204c89cd490fafe84801c5b800000000480f42c64989ee4d" +"0fafc748c1ed204c01c5488b4c24104c8b41104d8b807801000049c1e620" +"4901fe488bbc24180100004d8934384811c549896c3808438d3c2c83c708" +"488b4424084c8b8078010000498b3c384189f84d89c64d0faff14d0fafc7" +"48c1ef204889fd490fafe94c01c541b8000000004c0f42c64889ee490faf" +"ff48c1ed204801fd488b7910488bbf7801000048c1e6204c01f64c8bb424" +"100100004a8934374c11c54a896c3708438d342c83c610488bb878010000" +"488b343789f74989f84d0fafc1490fafff48c1ee204989f64d0faff14901" +"febf0000000048bd0000000001000000480f42fd4c89f5490faff749c1ee" +"204901f6488b7110488bb67801000048c1e5204c01c54c8b842408010000" +"4a892c064911fe4e89740608438d342c83c618488bb878010000488b3437" +"89f74989f84d0fafc1490fafff48c1ee204989f64d0faff14901febf0000" +"000048bd0000000001000000480f42fd4c89f5490faff749c1ee204901f6" +"488b7110488bb67801000048c1e5204c01c54c8b8424000100004a892c06" +"4911fe4e89740608438d342c83c620488bb878010000488b343789f74989" +"f84d0fafc1490fafff48c1ee204989f64d0faff14901febf0000000048bd" +"0000000001000000480f42fd4c89f5490faff749c1ee204901f648c1e520" +"4c01c5488b7110488bb6780100004c8b8424f80000004a892c064911fe4e" +"89740608438d342c83c6284c8b642420488bb878010000488b3437488b79" +"104c8b877801000089f74989fe4d0faff1490fafff48c1ee204c0fafce49" +"01f9bf0000000048bd0000000001000000480f42fd490faff74d89cf49c1" +"e72049c1e9204901f14d01f74c8bb42420010000488b8c24f00000004d89" +"3c084911f94d894c08084c8b4c24304c8bb8780100004c89d54b036c3760" +"488b8424e80000004d1324074d89d84f03443770488b8424e00000004d8b" +"14074911ea4889d84b03843780000000488b8c24d80000004d8b1c0f4d11" +"c34889d64b03b43790000000488b8c24d0000000498b1c0f4811c3488b7c" +"24184b03bc37a0000000488b8c24c8000000498b140f4811f24f038c37b0" +"000000488b8c24c0000000498b0c0f4811f94839f94883d2004839f248be" +"00000000010000004883d3004839c34983d3004d39c34983d2004939ea48" +"8b6c24404983d400428d042e0510ffffff4983c530a9f0ffffff0f853cfc" +"ffffff44242c4d89cf48b8fdfffcfffcfff3894c0faff84489ff48897c24" +"204c8d86abaaffff4889f8490fafc048894424184881c6fffffeb9480faf" +"fe49c1ef204d0fafc74901f8bf000000004c894c243049b9000000000100" +"0000490f42f94d89c1490faff749c1e8204901f04c8b6c2410498b751048" +"8bb67801000049c1e1204c034c2418488b8424b00000004c890c064911f8" +"4c89440608498b4510488b807801000048be00000000010000004881c6ff" +"ff53b14c8b6c24204c89ef480faffe4d69c5feffab1e490faff74c01c649" +"89f049c1e0204d69cffeffab1e48c1ee204901f8488bbc24a80000004c89" +"04384c11ce488974380848b80000000001000000480524f6b0f64c89ee48" +"0faff04969fda0d23067490fafc74801f8bf0000000049b8000000000100" +"0000490f42f84989c04d69cfa0d2306748c1e8204c01c84c8b6c24104d8b" +"4d104d8b897801000049c1e0204901f0488bb424a00000004d8904314811" +"f8498944310848b800000000010000004805bf1285f3488b7c24204889fe" +"480faff04869ff844b7764490fafc74801f8bf0000000049b80000000001" +"000000490f42f84989c04d69cf844b776448c1e8204c01c849c1e0204901" +"f0498b7510488bb6780100004c8b8c24980000004e89040e4811f84a8944" +"0e084c8b6c24204969c5d7ac4b434969f5b6a71b4b4969ffd7ac4b434801" +"f74889fe48c1e6204d69c7b6a71b4b4c8944241848c1ef204801c64c8b44" +"2410498b4010488b80780100004c8b8c24900000004a89340848137c2418" +"4a897c0808498b4010488b80780100004969f59ae67f394969fdea11011a" +"4d69c79ae67f394901f84c89c748c1e7204d69cfea11011a49c1e8204801" +"f74a893c304d11c84e89443008488b4424084c8bb8780100004f03143748" +"8b8424880000004d1324074f035c3710488b8424800000004d8b04074d11" +"d04b035c3720488b442478498b04074c11d84b03543730488b742470498b" +"34374811de4b034c3740488b7c2468498b3c3f4811d74c8b4c24304f034c" +"37504c8b4c24604f8b0c0f4911c94939c94889f94883d1004839d14889f2" +"48be00000000010000004883d2004839da4889c34883d3004c39db4d89c3" +"4983d3004d39d34d89e24983d2004883c508837c242c06488b7c24100f85" +"e2f8ffff4f899437e8000000488b442408488bb0780100004e899c36e000" +"0000488bb0780100004a899c36d8000000488bb0780100004a899436d000" +"0000488b90780100004a898c32c8000000488b80780100004e898c30c000" +"0000488b5c24588d53d08b74243ce80000000048395c245041b80d000000" +"730d41b80e00000048395c2448731e488b7c24084489c64881c428010000" +"5b415c415d415e415f5de900000000488b4424088998d00100004881c428" +"0100005b415c415d415e415f5dc30f1f4000554157415641554154534883" +"ec4889f34989fe488b7f10498b4630448ba7d0010000458dbc2480feffff" +"be0d0000004c39f80f83ac01000089cd498b4e38be0e0000004c39f90f82" +"980100004189d548894c2430488944243848897c24404489bfd00100004c" +"89f74489fee80000000048895c2420418d9c24e0feffff4c89f789de89ea" +"e800000000418db42440ffffff893424896c24084c89e54181c410ffffff" +"4c89f789da4489e1e8000000008db570ffffff897424044c89f7895c241c" +"89da488b5c242044896424184489e14989ece8000000004c89f789de8b2c" +"2489ea4489f9e8000000008d7330418d8c24b0feffff4c89f78b5c240489" +"da894c2414e8000000004c89f789ee4489ea8b6c240889e9e80000000041" +"83c53083c5304c89f789de4489ea89e9e8000000004c89642408418d6c24" +"a04c89f789ee448b2c244489eae8000000004c89f74489ee89eab9600000" +"00e800000000498b7e10498b5e308bafd0010000448d6da0be0d0000004c" +"39eb730e4d8b66384d39ec7376be0e000000448b7c2404e800000000488b" +"5c24208d73604c89f78b14248b4c241ce80000000081c3900000004c89f7" +"89de4489fa8b4c2418e800000000be0d000000488b442408483944243848" +"8b7c24407310be0e00000048394424300f83860000004883c4485b415c41" +"5d415e415f5de9000000004489afd001000048897c24284c89f74489ee8b" +"14244489f9e8000000008d75d04c89f7448b7c24044489fa8b4c2414e800" +"0000004c89f78b34244489eab960000000e800000000be0d000000488b7c" +"24284839eb0f833affffffbe0e0000004939ec0f822cffffff89afd00100" +"00e926ffffff8987d00100004883c4485b415c415d415e415f5dc3905541" +"57415641554154534883ec1889f34989ff488b7f104d8b6f30448ba7d001" +"0000458d7424a0be0d0000004d39f57374498b4f384c39f17307be0e0000" +"00eb6448894c24084489b7d001000048897c24104c89ff4489f689d589da" +"89e9e800000000418d7424d08d533083c5304c89ff89e9e8000000004c89" +"ff89de4489f2b960000000e800000000be0d000000488b7c24104d39e573" +"0cbe0e0000004c3964240873134883c4185b415c415d415e415f5de90000" +"00004489a7d00100004883c4185b415c415d415e415f5dc3669055415741" +"5641554154534881ec980000004189f04989fe488b7f10498b4630448ba7" +"d0010000418d942460f7ffffbe0d0000004839d00f830d070000498b4e38" +"be0e0000004839d10f82fb06000048894c247848898424880000004889bc" +"249000000048899424800000008997d0010000458dac2480f8ffff4c89f7" +"4489ee44896c240c4489c24d89c7e800000000418d9c24e0f8ffff895c24" +"3c418d57608914244c89f789dee800000000418db42440f9ffff89742440" +"4c89f789dae800000000418d6c24a04c89f789ee896c241489da4c897c24" +"504489f9e800000000418d7424d089742408418d942410f9ffff89542434" +"418d4f30894c24484c89f7e800000000418d9c2440ffffff895c24204c89" +"f789de89eae800000000418dac24e0feffff4c89f789ee896c243889da44" +"89e9e800000000458dbc2410ffffff418d942470ffffff89542410418d8c" +"24b0f8ffff894c242c4c89f74489fe44897c2430e800000000418d9c24a0" +"f9ffff4c89f789de89ea8b4c2440e800000000458dac24d0f9ffff418d8c" +"2470f9ffff894c24604c89f74489ee4489fae800000000418db42400faff" +"ff897424284c89f789da89d9e800000000418db42430faffff897424244c" +"89f74489ea4489e9e8000000004c89f78b5c241489de448b6c240c4489ea" +"4489e9e8000000004c89f78b6c240889ee448b7c242c4489fa4489f9e800" +"000000418db42460faffff897424044c89f789da4489e9e800000000418d" +"9c2490faffff4c89f789de89ea4489f9e800000000418db424c0faffff4c" +"89f789742468488b6c245089ea8b4c24044189cfe800000000418db424f0" +"faffff4c89f78b54244889d9e800000000458dac2420fbffff4c89f74489" +"ee4489fae800000000418db42480fbffff8974241c8d95c0000000895424" +"184c89f7e8000000004c89f74c89642470448b6424144489e644896c246c" +"4489ea448b7c24284489f9e800000000488b4424708d9050fbffff4c89f7" +"448b6c24084489ee895424648b6c242489e9e8000000004c89f78b5c2420" +"89de4489e24489f9e8000000004c89f78b7424104489ea4589ef89e9e800" +"0000004c89f7488b6c245089ee89da4189ddb960000000e8000000004c89" +"f74489e34c8b64247089de8b5424188b0c24e8000000008d95f00000008d" +"8d900000004c89f74489fe894c245ce8000000004c89f74489ee89dae800" +"0000004c89f78b5c243889de4489ea8b4c243ce8000000004c89f7448b7c" +"24304489fe8b6c241089ea8b4c2434e8000000004c89f74489ee89da8b4c" +"241ce800000000418d8c24b0fbffff4c89f789ee4489fae8000000004c89" +"f78b7424184489eab960000000e8000000004c89f78b5c241489de8b5424" +"28488b4c2450e8000000004c89f78b7424088b5424248b4c2448e8000000" +"004c89f74489ee89da8b4c2404e8000000004c89f78b34244489eab96000" +"0000e800000000418d9c24e0fbffff4c89f789de8b4c244089cae8000000" +"00458dbc2410fcffff4c89f74489fe8b4c246089cae800000000458dac24" +"40fcffff4c89f74489ee89da89d9e800000000418d9c2470fcffff4c89f7" +"89de4489fa4489f9e800000000458dbc24a0fcffff4c89f74489fe4489ea" +"4489e9e800000000458dac24d0fcffff4c89f74489ee89da89d9e8000000" +"00498b7e10498b46308bafd00100008d5da0be0d0000004839d87376498b" +"4e384839d97307be0e000000eb6648894c2440899fd001000048897c2448" +"4c89f789de8b14244489f94989c7e8000000008d75d04c89f78b54245c44" +"89e9e8000000004c89f78b342489dab960000000e800000000be0d000000" +"488b7c24484939ef7310be0e00000048396c24400f8332020000e8000000" +"00418d9c2400fdffff4c89f789de8b5424048b4c241ce800000000458dbc" +"2460fdffff4c89f74489fe89da89d9e800000000418db42490fdffff418d" +"8c2430fdffff4c89f789cae800000000418db424c0fdffff897424044c89" +"f74489fae8000000004c89f7448b6c24144489ee8b542468e8000000004c" +"89f78b5c242089de4489ea8b4c240ce8000000004c89f78b6c241089ee8b" +"5424088b4c242ce800000000418db42420feffff8934244c89f789da8b4c" +"246ce800000000418db42450feffff8974240c4c89f789ea8b4c2464e800" +"000000418d9c2480feffff4c89f789de8b4c243c89cae800000000418dac" +"24b0feffff4c89f789ee8b4c243489cae8000000004c89f7448b7c243844" +"89fe89da89d9e8000000004c89f78b5c243089de89ea89e9e8000000004c" +"89f78b6c242089ee8b14244489f9e8000000004c89f78b7424108b54240c" +"89d9e8000000004c89f74489ee8b5424188b4c241ce8000000004c89f748" +"8b9c248000000089de4489ea4489e9e800000000418db42490f7ffff4c89" +"f78b4c240889cae800000000418db424c0f7ffff4c89f78b542404b96000" +"0000e800000000418db42420f8ffff4c89f789eab960000000e800000000" +"488b74245081c6e80100004c89f789dab92c061000e800000000be0d0000" +"004c39a42488000000488bbc2490000000730cbe0e0000004c3964247873" +"164881c4980000005b415c415d415e415f5de9000000004489a7d0010000" +"4881c4980000005b415c415d415e415f5dc389afd0010000e9c8fdffff66" +"6666662e0f1f840000000000554157415641554154534883ec18488b5f10" +"4c8b83780100004189f6478b7c3008473b3c300f85a80000004c8b6f3044" +"8ba3d0010000418d6c24f0b80d0000004939ed0f8351010000488b473848" +"39e8730ab80e000000e93e010000488944241089542404890c2489abd001" +"0000418d4424f8438b0c3048897c240889f289c641b80100000041b92001" +"0000e8000000004c8b8378010000418b54280881fa0100008075624d39e5" +"b80d0000000f83e7000000b80e0000004c396424100f82d70000004489a3" +"d0010000488b7c24088b542404438d34ffc1e6054303743004b920010000" +"e80000000041ffc7488b837801000046897c30084883c4185b415c415d41" +"5e415f5dc3488b442408488b7810b90000000085d275788bb7d00100008d" +"56e0b90d000000483950307364b90e0000004839503872598997d0010000" +"488b8f78010000c744111800000000488b8f78010000c744110c01000000" +"488b8f78010000c7441108d0021000488b8f7801000048c7441110040000" +"0083c6e84989fe4889c78b1424e8000000004c89f731c989cee800000000" +"31c04889df89c64883c4185b415c415d415e415f5de90000000066666666" +"662e0f1f840000000000488b4710488b807801000089f18b3408e9000000" +"0066662e0f1f8400000000005541574156415541545350488b4f104c8b77" +"308b99d00100008d43f041b80d0000004939c60f837f0100004c8b473849" +"39c0730b41b80e000000e96b0100004c8904248981d001000041b80a0000" +"0081fe10270000730789f0e989000000448d4bfe41b80a00000041ba5917" +"b7d16690458d59fe89f0490fafc248c1e82d69e8f0d8000001f5440fb7e5" +"41c1ec024569e47b14000041c1ec114c8ba978010000470fb7bc657f0710" +"006647897c1d004569dc9cff00004101eb450fb7db4c8bb978010000470f" +"b79c5f7f0710004589cc6647891c274183c0fc4183c1fc81feffe0f50589" +"c6778983f8647244428d340383c6f44183c0fe440fb7c841c1e9024569c9" +"7b14000041c1e9114569d19cff00004101c2410fb7c24c8b917801000041" +"0fb784427f07100066418904324489c8448d4bf64489c683f80a722583c6" +"fe4501c84183c0fe89c04989cc488b89780100000fb784417f0710006642" +"890401eb18ffce4501c841ffc84989cc488b89780100000c304288040141" +"b90a0000004129f189d6ba0100000031c9e8000000004939de4c89e141b8" +"0d000000730c41b80e00000048391c24731c4889cf4489c6e80000000031" +"c04883c4085b415c415d415e415f5dc38999d0010000ebe9669055415741" +"5641554154534883ec184c8b57104d8b72284d8b7a3081f900001100757d" +"4585c00f840b010000498b827801000089d148634c080cb808000000413b" +"8aec0100000f83e1000000418b8ccaf4010000b809000000baffffffff48" +"39d10f84c600000048c1e1204889ca48c1fa1eb80600000041833c17030f" +"85ab00000048c1f91d498b040e4489c24489c94883c4185b415c415d415e" +"415f5dffe0498b82780100004189d34e635c1810b808000000453b9aec01" +"00007370478b9cdaf4010000b809000000bbffffffff4939db745949c1e3" +"204c89db48c1fb1eb80600000041833c1f02754249c1fb1d4889fb4c8954" +"241089f58954240c89ca4589cc4589c543ff141e8b54240c4c8b54241048" +"89df89ee4589e84589e189c1b80100000085c97511e9f6feffff4c89d789" +"c6e80000000031c04883c4185b415c415d415e415f5dc3660f1f84000000" +"0000488b4710488b88780100004189f0428b7401044c634c310cbe080000" +"00443b88ec0100007345468b8cc8f4010000be0900000041baffffffff4d" +"39d1742d4c8b503049c1e1204d89cb49c1fb1ebe0600000043833c1a0275" +"12488b4028428b340149c1f91d4a8b0408ffe0504889c7e80000000031c0" +"59c30f1f84000000000089f1488b4710488b807801000089d28b74101c8b" +"541020e9000000000f1f4000554157415641554154534883ec5889f0488b" +"5f104c8b6f30448bbbd0010000418d6fd0be0d0000004939ed73114989fe" +"488b7f38be0e0000004839ef73194889dfe80000000031c04883c4585b41" +"5c415d415e415f5dc3488b73284889742428488b7330488974243089abd0" +"010000488bb3780100008954352c488b937801000089441528488b837801" +"0000c644052403488b837801000048c744051c20000000488b8378010000" +"c744051400000000488b8378010000c744050c00000000488b8378010000" +"89c9448b6408104585e40f84590200008b54081485d20f84bd0300004889" +"7c24084c896c241089d6c1e60589742448ffca81e2ffffff07ffc2488954" +"2438448b2c0848894c24408b440808488944242083c00448894424504c89" +"7c2418418d47dc8944244c4531ff418d4d04488b83780100008b0c0885c9" +"746e8b54282c486354100c3b93ec0100000f83fe030000448b84d3f40100" +"00baffffffff4939d00f84f203000049c1e0204c89c248c1fa1e488b7424" +"30833c16030f85e20300008b7428284489ea8b141049c1f81d4c89f7488b" +"44242842ff140085c00f85ca030000488b8378010000438d0c3c83c1108b" +"0c08894c281c438d443c1c488b8b780100000fb6040188442924438d443c" +"18488b8b780100008b040189442920438d443c0c488b8b780100008b1401" +"438d043c83c0088b3401ffce83fe02b8020000000f43f031c083fe017422" +"85f67517488b7424208d3cd6833c3900be00000000750d8b543904be0100" +"0000eb0231f6438d3c3c89542910488b8b780100008974290c438d143c83" +"c204488b8b780100008b141189fe8b3431ffce83fe02bf020000000f43f7" +"83fe01741b85f67512488b7424208d34d6833c310075098b543104b80100" +"000089542918488b8b7801000089442914438d0c3c83c114488b83780100" +"008b1408488b4c24508d0cd148630c083b8bec0100000f83910200008b8c" +"cbf4010000beffffffff4839f10f848602000048c1e1204889ce48c1fe1e" +"488b7c2430833c37020f8576020000488b7424208d14d68b341048c1f91d" +"4c89f78b54244c488b442428ff140885c00f855a0200004183c5084183c7" +"2044397c24480f8504feffffe9440100008b74080c85f60f846401000048" +"897c24084c896c24104889ca4c89f9448b3c104889542440448b64100844" +"8d2cf500000000ffce81e6ffffff1fffc6488974243848894c24188d41dc" +"89442420418d4f04488b83780100008b0c0885c9746e8b54282c48635410" +"0c3b93ec0100000f83b0010000448b84d3f4010000baffffffff4939d00f" +"84a401000049c1e0204c89c248c1fa1e488b742430833c16030f85940100" +"008b7428284489fa8b141049c1f81d4c89f7488b44242842ff140085c00f" +"857c010000488b8378010000418d4c240448630c083b8bec0100000f8342" +"0100008b8ccbf4010000baffffffff4839d10f843701000048c1e1204889" +"ca48c1fa1e488b742430833c16020f85270100004489e28b341048c1f91d" +"4c89f78b542420488b442428ff140885c00f85100100004183c7084183c4" +"084183c5f80f8509ffffff4c8b7c24184c8b6c2410488b7c2408488b4c24" +"404c8b542438488b8378010000443b540804721ae9a20000004531d2488b" +"8378010000443b5408040f838d0000004989c98b4c282c48634c080cbe08" +"0000003b8bec0100000f836dfbffff448b84cbf4010000be09000000b9ff" +"ffffff4939c80f8452fbffff49c1e0204c89c148c1f91ebe06000000488b" +"542430833c0a030f8533fbffff8b74282841c1e20346031408428b141042" +"8b4c100449c1f81d4989fc4c89f7488b44242842ff14004c89e789c1b801" +"00000085c9750231c0be0d0000004d39fd0f83edfaffffeb40be08000000" +"e9e1faffffbe09000000e9d7faffffbe06000000e9cdfaffffb801000000" +"4c8b7c24184c8b6c2410488b7c2408be0d0000004d39fd0f83abfaffffbe" +"0e0000004c39ff0f829dfaffff4489bbd0010000e99bfaffff0f1f005541" +"57415641554154534883ec18488b47104c8b70284c8b7830488b88780100" +"0089f68b1c31448b643104448b6c310842803c29000f848e0000004a634c" +"210cbe080000003b88ec0100000f83e1000000448b84c8f4010000be0900" +"0000b9ffffffff4939c80f84c600000049c1e0204c89c148c1f91ebe0600" +"000041833c0f030f85ab00000048894424108954240c49c1f81d4889fd89" +"deba74071000b90400000043ff140689c1b80100000085c90f8586000000" +"488b442410488b88780100008b54240c4889ef83fa0a420f940429488b88" +"780100004a634c2110be080000003b88ec01000073488b8cc8f4010000be" +"0900000041b8ffffffff4c39c1743148c1e1204989c849c1f81ebe060000" +"0043833c0702751a48c1f91d498b040e89de4883c4185b415c415d415e41" +"5f5dffe04889c7e80000000031c04883c4185b415c415d415e415f5dc30f" +"1f44000089d1ba5c071000e9000000000f1f400055415741564154534889" +"f8488b7f104c8b70308b9fd0010000448d4380b90d0000004d39c60f832d" +"0100004c8b78384d39c7730ab90e000000e91a010000448987d001000048" +"8b8f7801000089f68b34314189d0468b44011441f6c010752a8b343141f6" +"c02075744989fc4889c7e8000000004939de4c89e7b90d0000000f82ca00" +"0000e9cf0000008b0c314531c94189d889ce6666662e0f1f840000000000" +"41ffc84189ca4183e20f458d5a57418d6a304183fa0a4c8b977801000040" +"0fb6ed450fb6db440f42dd47881c02c1ee0441ffc183f90f89f177c6eb4e" +"4531c94189d889f16666662e0f1f84000000000041ffc84189f24183e20f" +"458d5a37418d6a304183fa0a4c8b9778010000400fb6ed450fb6db440f42" +"dd47881c02c1e90441ffc183fe0f89ce77c64989fc4889c789d6ba7d0710" +"00b902000000e8000000004939de4c89e7b90d000000730ab90e00000049" +"39df731289cee80000000031c05b415c415e415f5dc3899fd0010000ebef" +"66666666662e0f1f840000000000488b4710488b807801000089f1c70408" +"00000000c366662e0f1f840000000000534189f04889f8488b7f108bb7d0" +"010000448d5ef0b90d0000004c3958300f83cf000000b90e0000004c3958" +"380f82c00000004c8b4f284c8b573044899fd0010000488b8f7801000044" +"8b99f0091000418d5b018999f009100031c94585db0f888e0000004c8b9f" +"780100004180bbbc0b100000745fb9080000003b97ec01000073704863ca" +"448b9ccff4010000b909000000baffffffff4939d3745649c1e3204c89da" +"48c1fa1eb90600000041833c1200753f83c6f849c1fb1d4889fb4889c744" +"89c243ff14194889df31c989ce5be90000000041ff83b80b1000488b8778" +"01000083b8ec091000007807c680bc0b10000089ce5be9000000000f1f44" +"0000488b4710488b807801000089d1488b0c0889f248890c10c30f1f8400" +"00000000488b4710488b807801000089f148c74408100000000041b81f00" +"000081faffffff00772289d7c1ef08f30fbdff41b9060000004129f901ff" +"4531c0440fa3ca4183d03e4129f8448944081c428d3c85f4091000448b88" +"900b1000450fa3c173198b3c38448b4c38044183e1f84439ca75284989f9" +"4189faeb76ba01000000c4e239f7d2893438897c08188974080c89740808" +"0990900b1000c34589c141d0e941b2194528ca4180e21f4531c94183f81f" +"450fb6c2450f44c1c46239f7c20f1f004589c141c1e91f468d148f4183c2" +"10468b0c104d85c974374501c0468b5c08044183e3f84489cf4589ca4139" +"d375d1428b5408088974100c4289740808c744081800000000448954080c" +"89540808c342893410897c08188974080c89740808c389f0488b4f10488b" +"897801000083fa100f82cf000000f7de83e6038d3c0639c70f8697000000" +"85f6742a4189c042c604010083fe010f8482000000448d400142c6040100" +"83fe027474448d400242c6040100eb694531c0660f1f840000000000468d" +"0c0042c6040900468d0c004183c10742c6040900468d4c000642c6040900" +"468d4c000542c6040900468d4c000442c6040900468d4c000342c6040900" +"468d4c000242c6040900468d0c0041ffc142c60409004183c0084439c675" +"a329f289d683e6fc01fe39fe7618660f1f4400004189f842c70401000000" +"0083c70439f772ee83e2038d3c1639fe0f83c5000000448d42ff83e20774" +"694189f142c6040900448d4e0183fa0174554589c942c6040900448d4e02" +"83fa0274444589c942c6040900448d4e0383fa0374334589c942c6040900" +"448d4e0483fa0474224589c942c6040900448d4e0583fa0574114589c942" +"c6040900448d4e0683fa0675574489ce4183f807724df7df83c6030f1f00" +"8d56fdc60411008d5604c60411008d5603c60411008d5602c60411008d56" +"01c604110089f2c60411008d56ffc60411008d56fec60411008d143783c2" +"0883c60883fa0375bbc34489cac604110083c6074183f80772efeba00f1f" +"84000000000055415741565389f0488b7710488bb67801000083f9107314" +"89c7448d040f4439c70f82ca010000e94b0300004189c141f7d94183e103" +"458d04014139c00f86f40000004585c9744689d70fb63c3e4189c242883c" +"164183f9010f84d80000008d7801448d5201460fb614164488143e4183f9" +"020f84be0000008d7802448d5202460fb614164488143ee9a900000031ff" +"448d1438448d1c3a460fb61c1e46881c16448d143841ffc2448d5c3a0146" +"0fb61c1e46881c16448d543a02448d5c3802460fb614164688141e448d54" +"3803448d5c3a03460fb61c1e46881c16448d543804448d5c3a04460fb61c" +"1e46881c16448d543a05448d5c3805460fb614164688141e448d54380644" +"8d5c3a06460fb61c1e46881c16448d543807448d1c3a4183c307460fb61c" +"1e46881c1683c7084139f90f8559ffffff4429c94189ca4183e2fc438d3c" +"024401caf6c203745c4439c70f8685000000448d0cd5000000004589cb41" +"83e31889d383e3fc41f7d94183e1188b2c1e83c304660f1f840000000000" +"c46223f7f54189df428b2c3ec46231f7fd4509f74589c646893c364183c0" +"0483c3044139f872d9eb324439c7762d4189d16666666666662e0f1f8400" +"000000004589cb468b1c1e4489c344891c1e4183c1044183c0044139f872" +"e583e1034101d24489d2448d040f4439c70f8386010000448d49ff83e107" +"0f84b60000004189d2460fb614164189fb4688141e448d5a01448d570183" +"f9010f84900000004589db460fb61c1e4589d246881c16448d5a02448d57" +"0283f90274744589db460fb61c1e4589d246881c16448d5a03448d570383" +"f90374584589db460fb61c1e4589d246881c16448d5a04448d570483f904" +"743c4589db460fb61c1e4589d246881c16448d5a05448d570583f9057420" +"4589db460fb61c1e4589d246881c16448d5a06448d570683f9060f85d000" +"00004489da4489d74183f9070f82b90000004129f831c9666666662e0f1f" +"840000000000448d0c0a448d140f460fb60c0e46880c16448d0c0f41ffc1" +"448d540a01460fb614164688140e448d4c0a02448d540f02460fb60c0e46" +"880c16448d4c0f03448d540a03460fb614164688140e448d4c0f04448d54" +"0a04460fb614164688140e448d4c0a05448d540f05460fb60c0e46880c16" +"448d4c0f06448d540a06460fb614164688140e448d4c0f07448d140a4183" +"c207460fb614164688140e83c1084139c80f8559ffffff5b415e415f5dc3" +"4489d90fb60c0e4589d242880c1683c20783c7074183f9070f8322ffffff" +"ebd96690488b4710488b807801000089cf4189d04989f94d0fafc848c1e9" +"204c0fafc148c1ea20480faffa4531d24c01c7410f92c24989f849c1e020" +"480fafd149c1e22048c1ef204801d74d01c889f14c8904084c11d748897c" +"0808c30f1f80000000005541574156415453488b4710488b807801000089" +"f729d739f9767a8d3c11448d043183f9100f82e20100004589c24183e203" +"4589c14183e1fc4539c10f84290100004585d20f84bb000000418d70ff44" +"8d5fff460fb61c1844881c304183fa010f8405010000418d70fe448d5ffe" +"460fb61c1844881c304183fa020f84ea0000004183c0fd8d77fd0fb63430" +"42883400e9d600000083f9100f82940300004189f041f7d84183e003418d" +"3c3039f70f86e40200004585c00f84250200004189d1460fb60c084189f2" +"46880c104183f8010f84c2020000448d4e01448d5201460fb61410468814" +"084183f8020f84a702000083c602448d4a02460fb60c0844880c30e99202" +"0000448d46ff448d5aff89cb458d341b4183c6fd458d3c18458d241b420f" +"b62c2042882c38458d7c18ff458d641bff420fb62c2042882c38458d7c18" +"fe458d641bfe420fb62c2042882c38458d7c18fd420fb62c3042882c388d" +"2c1e83c5fc83c3fc4439cd77a589ce4429d64189f34183e3fc4589c84529" +"d84429d740f6c70374504539c8737a8d0cfd0000000089ca83e2184189fa" +"4183e2fcf7d983e118428b1c104183c2fc0f1f440000c4e271f7eb4183c1" +"fc4489d38b1c18c4626bf7f34109ee468934084183c2fc4539c872dceb2f" +"4539c8732a01d14429d183c1fc666666662e0f1f8400000000004183c1fc" +"89ca8b14104289140883c1fc4539c872eb83e6034429df89f14489c229ca" +"4439c20f839b030000448d51ff83e103743b418d70ff448d4fff460fb61c" +"0844881c3083f901742b418d70fe448d4ffe460fb61c0844881c3083f902" +"74154183c0fd83c7fd0fb60c3842880c004189f94489c64183fa030f8247" +"03000041ffc98d4eff31ff660f1f840000000000458d04394183c0fd448d" +"1439458d1c39460fb61c1846881c10448d5439ff458d5c39ff460fb61c18" +"46881c10448d5439fe458d5c39fe460fb61c1846881c10448d5439fd460f" +"b6040046880410448d043e4183c0fc83c7fc4139d077a3e9d40200004531" +"c966662e0f1f840000000000468d140e468d1c0a460fb61c1846881c1046" +"8d140e41ffc2468d5c0a01460fb61c1846881c10468d540a02468d5c0e02" +"460fb6141046881418468d540e03468d5c0a03460fb61c1846881c10468d" +"540e04468d5c0a04460fb61c1846881c10468d540a05468d5c0e05460fb6" +"141046881418468d540e06468d5c0a06460fb61c1846881c10468d540e07" +"468d1c0a4183c307460fb61c1846881c104183c1084539c80f8558ffffff" +"4429c14189c94183e1fc418d34394401c2f6c203745939fe7677448d04d5" +"000000004589c24183e2184189d34183e3fc41f7d84183e018428b1c1841" +"83c304660f1f840000000000c4e22bf7eb4489db8b1c18c46239f7f34109" +"ee4189ff4689343883c7044183c30439f772dbeb2239fe761e4189d06690" +"4589c2468b14104189fb468914184183c00483c70439f772e783e1034101" +"d14489ca8d3c3139fe0f8379010000448d41ff83e1070f84b60000004189" +"d1460fb60c084189f246880c10448d5201448d4e0183f9010f8490000000" +"4589d2460fb614104589c946881408448d5202448d4e0283f90274744589" +"d2460fb614104589c946881408448d5203448d4e0383f90374584589d246" +"0fb614104589c946881408448d5204448d4e0483f904743c4589d2460fb6" +"14104589c946881408448d5205448d4e0583f90574204589d2460fb61410" +"4589c946881408448d5206448d4e0683f9060f85c50000004489d24489ce" +"4183f8070f82ac00000029f731c96690448d040a448d0c0e460fb6040046" +"880408448d040e41ffc0448d4c0a01460fb60c0846880c00448d440a0244" +"8d4c0e02460fb6040046880408448d440e03448d4c0a03460fb60c084688" +"0c00448d440e04448d4c0a04460fb60c0846880c00448d440a05448d4c0e" +"05460fb6040046880408448d440e06448d4c0a06460fb60c0846880c0044" +"8d440e07448d0c0a4183c107460fb60c0846880c0083c10839cf0f855aff" +"ffff5b415c415e415f5dc34489d10fb60c084589c942880c0883c20783c6" +"074183f8070f832dffffffebd70003000000600900000000000000000000" +"30000000000000004000000000000000c001000000000000d00100000000" +"0000e001000000000000f001000000000000a003000000000000c0040000" +"000000002006000000000000600c000000000000000d000000000000a00e" +"000000000000d01100000000000080120000000000006016000000000000" +"7022000000000000e0250000000000009027000000000000b02700000000" +"00004028000000000000f029000000000000602b000000000000002c0000" +"00000000202f0000000000003030000000000000303c000000000000403f" +"0000000000008064000000000000f0220100000000001024010000000000" +"3024010000000000a0250100000000003027010000000000202801000000" +"000010520100000000007052010000000000105301000000000090540100" +"000000003064010000000000506501000000000050720100000000004073" +"010000000000b07a010000000000107c010000000000507c010000000000" +"d07d010000000000e0800100000000001096010000000000909901000000" +"0000a09a010000000000509b010000000000909d010000000000209f0100" +"0000000030a001000000000070a0010000000000b0a001000000000070c1" +"010000000000c0c501000000000070c6010000000000f0cc010000000000" +"60cf010000000000b0cf01000000000060d0010000000000c0d101000000" +"000020d3010000000000e0d601000000000030db01000000000030dd0100" +"00000000d0e001000000000080e1010000000000b0e201000000000060e5" +"01000000000090f701000000000010f801000000000040f8010000000000" +"60f801000000000050fa01000000000030fc010000000000200402000000" +"0000b005020000000000f005020000000000e008020000000000600a0200" +"00000000600c020000000000600f02000000000010100200000000000026" +"020000000000002802000000000060290200000000003033020000000000" +"2036020000000000703d020000000000303f020000000000f04002000000" +"000040420200000000005043020000000000c04502000000000050480200" +"000000002052020000000000a0540200000000007055020000000000005d" +"020000000000c05e020000000000e05e020000000000b060020000000000" +"00620200000000008062020000000000a062020000000000506802000000" +"0000a069020000000000b069020000000000306b020000000000506b0200" +"00000000506c020000000000706c020000000000906d020000000000606f" +"020000000000007302000000000060730200000000000600000000000000" +"010000000000000000000000000000000100000001000000070000000700" +"000000000000040000000000000004000000020000000300000003000000" +"040000000200000001000000040000000800000005000000000000000000" +"00000000000001000000000000000a000000000000000500000000000000" +"000000000000000001000000060000000500000004000000000000000600" +"0000010000000b0000000400000004000000000000000000000001000000" +"010000000000000000000000010000000100000001000000000000000100" +"000001000000000000000100000000000000000000000000000002000000" +"010000000000000001000000000000000100000004000000060000000000" +"0000000000000000000005000000000000000c0000000500000008000000" +"020000000900000000000000010000000400000004000000020000000000" +"000000000000050000000100000005000000010000000000000001000000" +"000000000000000000000000060000000000000004000000010000000100" +"000000000000060000000100000002000000020000000900000002000000" +"020000000300000002000000020000000200000000000000010000000000" +"00000000000002000000030000000d000000010000000100000002000000" +"050000000200000002000000020000000600000005000000070000000f00" +"000002000000080000001600000008000000060000000e0000000f000000" +"050000000200000004000000050000000600000002000000030000000300" +"000009000000040000001700000088000000120000000200000006000000" +"03000000020000009c0000000200000002000000040000000d0000000200" +"000018000000040000000600000004000000020000001400000008000000" +"19000000040000000500000003000000040000001c000000040000000300" +"000003000000790000000600000003000000090000000700000002000000" +"030000000600000008000000050000000800000004000000060000000300" +"000006000000040000000b00000005000000040000000100000009000000" +"050000000d0000001c000000030000000400000004000000020000000f00" +"0000030000003000000009000000010000001a0000000200000009000000" +"0500000002000000040000000300000003000000080000001a0000000500" +"000003000000040000000600000002000000080000000500000002000000" +"020000000d00000004000000020000000500000002000000050000000200" +"000006000000060000000b0000000d0000000a0000000200000003000000" +"060000000300000003000000030000000500000005000000040000000700" +"000003000000050000001100000007000000040000000600000004000000" +"030000000300000006000000030000000500000005000000060000000500" +"000006000000060000000700000011000000090000000200000003000000" +"040000000300000019000000030000000300000004000000060000000300" +"000006000000050000000500000004000000030000001100000004000000" +"040000000400000004000000040000000300000009000000040000000400" +"000004000000170000000400000003000000040000000400000004000000" +"040000000400000002000000040000000400000004000000050000000300" +"000005000000040000000600000004000000060000000200000005000000" +"060000000500000009000000020000000400000004000000050000000b00" +"0000030000001100000004000000030000001c0000000300000004000000" +"0400000003000000020000000300000004000000040000001c0000000400" +"000003000000040000000500000002000000060000000400000003000000" +"030000000400000004000000030000000600000002000000030000000300" +"00000500000003000000040000000b00000004000000040000008c000000" +"0600000000000000020007006d656d6f727900001600000000000900616c" +"6c6f63617465000000001700000000001400646573657269616c697a655f" +"67315f7761736d001c0000000000150062656c6c6d616e5f67726f746831" +"365f74657374000000000100000003000b005f5f646174615f656e640000" +"0200000003000c005f5f686561705f62617365000500000048a100005d00" +"0000000000000e0000001c0000002a000000380000005400000062000000" +"72000000800000008e0000009c000000aa000000b8000000c6000000d400" +"0000e2000000ec000000fc0000000a0100001a0100002801000036010000" +"440100005401000062010000700100007e0100008c0100009a010000a801" +"0000b6010000c4010000d2010000e0010000ee010000fc0100000a020000" +"18020000260200003402000042020000500200005e0200006c0200007a02" +"00008802000096020000a4020000b2020000c0020000ce020000dc020000" +"ea020000f8020000060300001403000022030000300300003e0300004c03" +"00005a03000068030000760300008403000092030000a0030000ae030000" +"bc030000ca030000d8030000e6030000f403000002040000100400001e04" +"00002c0400003a0400004804000056040000660400007404000084040000" +"94040000a2040000b0040000be040000cc040000da040000ea0400000005" +"00000e0500001e0500002e0500003e0500000b002e72656c612e74657874" +"00000b00616f745f66756e63233200000c00616f745f66756e6323363800" +"0c00616f745f66756e63233331001a00616f745f7365745f657863657074" +"696f6e5f776974685f6964000b00616f745f66756e63233900000d00616f" +"745f66756e632331313700000b00616f745f66756e63233800000c00616f" +"745f66756e63233131000c00616f745f66756e63233639000c00616f745f" +"66756e63233732000c00616f745f66756e63233731000c00616f745f6675" +"6e63233730000c00616f745f66756e63233135000c00616f745f66756e63" +"2331360008002e726f64617461000d002e726f646174612e637374340000" +"0c00616f745f66756e63233736000d00616f745f66756e63233131390000" +"0c00616f745f66756e63233235000c00616f745f66756e63233230000c00" +"616f745f66756e63233834000d00616f745f66756e632331313600000c00" +"616f745f66756e63233536000c00616f745f66756e63233334000c00616f" +"745f66756e63233532000c00616f745f66756e63233837000c00616f745f" +"66756e63233833000c00616f745f66756e63233836000c00616f745f6675" +"6e63233337000c00616f745f66756e63233332000c00616f745f66756e63" +"233932000c00616f745f66756e63233933000c00616f745f66756e632332" +"37000c00616f745f66756e63233137000c00616f745f66756e6323393500" +"0c00616f745f66756e63233838000c00616f745f66756e63233533000c00" +"616f745f66756e63233436000c00616f745f66756e63233931000c00616f" +"745f66756e63233930000c00616f745f66756e63233832000c00616f745f" +"66756e63233831000c00616f745f66756e63233936000c00616f745f6675" +"6e63233531000c00616f745f66756e63233233000c00616f745f66756e63" +"233236000b00616f745f66756e63233600000c00616f745f66756e632331" +"30000c00616f745f66756e63233636000c00616f745f66756e6323363400" +"0c00616f745f66756e63233633000c00616f745f66756e63233635000c00" +"616f745f66756e63233637000c00616f745f66756e63233333000c00616f" +"745f66756e63233133000c00616f745f66756e63233335000c00616f745f" +"66756e63233336000c00616f745f66756e63233338000c00616f745f6675" +"6e63233132000c00616f745f66756e63233339000c00616f745f66756e63" +"233437000c00616f745f66756e63233439000c00616f745f66756e632334" +"30000c00616f745f66756e63233432000c00616f745f66756e6323343400" +"0c00616f745f66756e63233435000c00616f745f66756e63233438000c00" +"616f745f66756e63233530000c00616f745f66756e63233534000c00616f" +"745f66756e63233535000c00616f745f66756e63233433000c00616f745f" +"66756e63233537000c00616f745f66756e63233538000c00616f745f6675" +"6e63233539000c00616f745f66756e63233630000c00616f745f66756e63" +"233631000c00616f745f66756e63233139000d00616f745f66756e632331" +"313300000c00616f745f66756e63233739000d00616f745f66756e632331" +"303100000d00616f745f66756e632331303200000c00616f745f66756e63" +"233937000c00616f745f66756e63233839000c00616f745f66756e632339" +"38000c00616f745f66756e63233939000c00616f745f66756e6323393400" +"0d00616f745f66756e632331313500001300616f745f656e6c617267655f" +"6d656d6f727900000c00616f745f66756e63233738000e002e726f646174" +"612e6373743332000d00616f745f66756e632331303400000d00616f745f" +"66756e632331303800000000010000000000000070060000360000000000" +"0000fcffffffffffffff04000000010000002101000000000000fcffffff" +"ffffffff0400000002000000a301000000000000fcffffffffffffff0400" +"000003000000af01000000000000fcffffffffffffff0400000004000000" +"ba01000000000000fcffffffffffffff0400000004000000c60100000000" +"0000fcffffffffffffff0400000001000000d601000000000000fcffffff" +"ffffffff0400000001000000e601000000000000fcffffffffffffff0400" +"0000010000007d02000000000000fcffffffffffffff0400000005000000" +"d202000000000000fcffffffffffffff0400000006000000750300000000" +"0000fcffffffffffffff04000000030000008103000000000000fcffffff" +"ffffffff04000000040000009b03000000000000fcffffffffffffff0400" +"0000040000001e04000000000000fcffffffffffffff0400000007000000" +"4504000000000000fcffffffffffffff04000000060000009b0400000000" +"0000fcffffffffffffff04000000040000001805000000000000fcffffff" +"ffffffff0400000008000000b005000000000000fcffffffffffffff0400" +"000003000000bc05000000000000fcffffffffffffff0400000004000000" +"0106000000000000fcffffffffffffff04000000040000002c0700000000" +"0000fcffffffffffffff04000000090000005407000000000000fcffffff" +"ffffffff040000000a0000008c07000000000000fcffffffffffffff0400" +"00000a000000a708000000000000fcffffffffffffff0400000009000000" +"5509000000000000fcffffffffffffff0400000004000000000a00000000" +"0000fcffffffffffffff040000000b0000009e0a000000000000fcffffff" +"ffffffff040000000a000000df0a000000000000fcffffffffffffff0400" +"000006000000ea0a000000000000fcffffffffffffff0400000002000000" +"a70b000000000000fcffffffffffffff040000000c000000340c00000000" +"0000fcffffffffffffff040000000b000000700c000000000000fcffffff" +"ffffffff0400000004000000e60c000000000000fcffffffffffffff0400" +"000003000000f30c000000000000fcffffffffffffff0400000004000000" +"b90d000000000000fcffffffffffffff040000000a000000780e00000000" +"0000fcffffffffffffff04000000040000006911000000000000fcffffff" +"ffffffff0400000006000000ab11000000000000fcffffffffffffff0400" +"0000040000004814000000000000fcffffffffffffff040000000d000000" +"7e15000000000000fcffffffffffffff040000000d0000009a1500000000" +"0000fcffffffffffffff0400000004000000c415000000000000fcffffff" +"ffffffff040000000e000000111a000000000000fcffffffffffffff0200" +"00000f0000002e1b000000000000fcffffffffffffff020000000f000000" +"011d000000000000fcffffffffffffff0200000010000000462200000000" +"0000fcffffffffffffff0400000004000000c225000000000000fcffffff" +"ffffffff04000000040000006326000000000000fcffffffffffffff0400" +"0000060000006227000000000000fcffffffffffffff0400000011000000" +"6c27000000000000fcffffffffffffff0400000004000000882700000000" +"0000fcffffffffffffff0400000004000000a927000000000000fcffffff" +"ffffffff040000000d0000002128000000000000fcffffffffffffff0400" +"0000110000003428000000000000fcffffffffffffff0400000004000000" +"c028000000000000fcffffffffffffff0400000006000000bf2900000000" +"0000fcffffffffffffff0400000011000000c929000000000000fcffffff" +"ffffffff0400000004000000e529000000000000fcffffffffffffff0400" +"000004000000142b000000000000fcffffffffffffff0400000003000000" +"292b000000000000fcffffffffffffff0400000004000000bc2b00000000" +"0000fcffffffffffffff0400000007000000d82b000000000000fcffffff" +"ffffffff04000000040000002d2d000000000000fcffffffffffffff0400" +"000003000000392d000000000000fcffffffffffffff0400000004000000" +"432e000000000000fcffffffffffffff04000000030000004f2e00000000" +"0000fcffffffffffffff0400000004000000a52e000000000000fcffffff" +"ffffffff0400000012000000b92e000000000000fcffffffffffffff0400" +"000013000000d32e000000000000fcffffffffffffff0400000014000000" +"012f000000000000fcffffffffffffff0400000004000000183000000000" +"0000fcffffffffffffff04000000030000002730000000000000fcffffff" +"ffffffff04000000040000002331000000000000fcffffffffffffff0400" +"0000060000004b31000000000000fcffffffffffffff0400000015000000" +"6231000000000000fcffffffffffffff0400000016000000f83100000000" +"0000fcffffffffffffff04000000160000003032000000000000fcffffff" +"ffffffff0400000006000000d732000000000000fcffffffffffffff0400" +"0000040000004333000000000000fcffffffffffffff0400000017000000" +"6033000000000000fcffffffffffffff0400000018000000763300000000" +"0000fcffffffffffffff04000000190000008733000000000000fcffffff" +"ffffffff040000001a0000009833000000000000fcffffffffffffff0400" +"000017000000a933000000000000fcffffffffffffff040000001b000000" +"c933000000000000fcffffffffffffff0400000006000000f23300000000" +"0000fcffffffffffffff0400000016000000b935000000000000fcffffff" +"ffffffff040000001c0000003436000000000000fcffffffffffffff0400" +"000006000000a536000000000000fcffffffffffffff0400000006000000" +"f436000000000000fcffffffffffffff040000001d000000543700000000" +"0000fcffffffffffffff04000000160000008537000000000000fcffffff" +"ffffffff0400000006000000bc37000000000000fcffffffffffffff0400" +"00001d000000cd37000000000000fcffffffffffffff040000001e000000" +"df37000000000000fcffffffffffffff040000001f000000f03700000000" +"0000fcffffffffffffff040000001f000000ff37000000000000fcffffff" +"ffffffff04000000200000001238000000000000fcffffffffffffff0400" +"0000060000006138000000000000fcffffffffffffff0400000016000000" +"7038000000000000fcffffffffffffff040000001b000000c33800000000" +"0000fcffffffffffffff0400000018000000d438000000000000fcffffff" +"ffffffff0400000006000000fb38000000000000fcffffffffffffff0400" +"0000040000000e39000000000000fcffffffffffffff040000001e000000" +"2a39000000000000fcffffffffffffff0400000018000000423900000000" +"0000fcffffffffffffff04000000180000005d39000000000000fcffffff" +"ffffffff04000000180000007239000000000000fcffffffffffffff0400" +"000018000000bb39000000000000fcffffffffffffff0400000016000000" +"c939000000000000fcffffffffffffff040000001b000000eb3900000000" +"0000fcffffffffffffff04000000040000003c3a000000000000fcffffff" +"ffffffff04000000160000004a3a000000000000fcffffffffffffff0400" +"00001b000000733a000000000000fcffffffffffffff0400000004000000" +"ff3a000000000000fcffffffffffffff040000001b0000002c3b00000000" +"0000fcffffffffffffff040000001b0000009a3b000000000000fcffffff" +"ffffffff0400000006000000e13b000000000000fcffffffffffffff0400" +"000004000000503d000000000000fcffffffffffffff0400000003000000" +"5c3d000000000000fcffffffffffffff0400000004000000663e00000000" +"0000fcffffffffffffff0400000003000000723e000000000000fcffffff" +"ffffffff0400000004000000c43e000000000000fcffffffffffffff0400" +"000012000000d83e000000000000fcffffffffffffff0400000021000000" +"f23e000000000000fcffffffffffffff0400000022000000203f00000000" +"0000fcffffffffffffff04000000040000006440000000000000fcffffff" +"ffffffff04000000060000008940000000000000fcffffffffffffff0400" +"000015000000a640000000000000fcffffffffffffff0400000015000000" +"bd40000000000000fcffffffffffffff04000000160000005e4100000000" +"0000fcffffffffffffff0400000016000000e541000000000000fcffffff" +"ffffffff0400000006000000f941000000000000fcffffffffffffff0400" +"0000230000005c42000000000000fcffffffffffffff0400000024000000" +"c042000000000000fcffffffffffffff0400000025000000e54200000000" +"0000fcffffffffffffff0400000026000000ff42000000000000fcffffff" +"ffffffff04000000190000002b43000000000000fcffffffffffffff0400" +"0000190000003643000000000000fcffffffffffffff0400000024000000" +"4d43000000000000fcffffffffffffff04000000160000009d4300000000" +"0000fcffffffffffffff0400000027000000af43000000000000fcffffff" +"ffffffff0400000025000000c943000000000000fcffffffffffffff0400" +"000026000000e943000000000000fcffffffffffffff0400000026000000" +"8345000000000000fcffffffffffffff0400000006000000974500000000" +"0000fcffffffffffffff0400000016000000b245000000000000fcffffff" +"ffffffff0400000006000000ca45000000000000fcffffffffffffff0400" +"000028000000de45000000000000fcffffffffffffff040000001b000000" +"0246000000000000fcffffffffffffff040000001b000000354600000000" +"0000fcffffffffffffff04000000060000007e46000000000000fcffffff" +"ffffffff04000000160000009246000000000000fcffffffffffffff0400" +"000006000000b746000000000000fcffffffffffffff0400000019000000" +"d446000000000000fcffffffffffffff0400000019000000fa4600000000" +"0000fcffffffffffffff04000000270000000f47000000000000fcffffff" +"ffffffff04000000260000005947000000000000fcffffffffffffff0400" +"0000290000006847000000000000fcffffffffffffff0400000016000000" +"2c48000000000000fcffffffffffffff04000000250000003d4800000000" +"0000fcffffffffffffff040000001b0000005348000000000000fcffffff" +"ffffffff040000001b0000009f48000000000000fcffffffffffffff0400" +"000006000000d448000000000000fcffffffffffffff0400000029000000" +"e448000000000000fcffffffffffffff0400000016000000964900000000" +"0000fcffffffffffffff0400000028000000ac49000000000000fcffffff" +"ffffffff040000001c000000064a000000000000fcffffffffffffff0400" +"000016000000164a000000000000fcffffffffffffff040000001b000000" +"3b4a000000000000fcffffffffffffff04000000040000004d4a00000000" +"0000fcffffffffffffff040000001c000000684b000000000000fcffffff" +"ffffffff0400000006000000d74b000000000000fcffffffffffffff0400" +"0000060000001e4c000000000000fcffffffffffffff040000002a000000" +"774c000000000000fcffffffffffffff0400000006000000e74c00000000" +"0000fcffffffffffffff0400000023000000054d000000000000fcffffff" +"ffffffff040000002a0000001e4d000000000000fcffffffffffffff0400" +"00002b000000304d000000000000fcffffffffffffff0400000016000000" +"6a50000000000000fcffffffffffffff0400000006000000815000000000" +"0000fcffffffffffffff0400000026000000ff51000000000000fcffffff" +"ffffffff04000000060000001b52000000000000fcffffffffffffff0400" +"0000260000009153000000000000fcffffffffffffff0400000006000000" +"ae53000000000000fcffffffffffffff0400000006000000bf5300000000" +"0000fcffffffffffffff0400000016000000d353000000000000fcffffff" +"ffffffff0400000006000000ee53000000000000fcffffffffffffff0400" +"0000160000000854000000000000fcffffffffffffff0400000006000000" +"2054000000000000fcffffffffffffff04000000160000005c5700000000" +"0000fcffffffffffffff04000000250000007357000000000000fcffffff" +"ffffffff04000000190000008c57000000000000fcffffffffffffff0400" +"000019000000a057000000000000fcffffffffffffff0400000019000000" +"b757000000000000fcffffffffffffff0400000019000000d05700000000" +"0000fcffffffffffffff0400000019000000e357000000000000fcffffff" +"ffffffff0400000019000000fc57000000000000fcffffffffffffff0400" +"0000260000001158000000000000fcffffffffffffff0400000025000000" +"2c58000000000000fcffffffffffffff0400000026000000425800000000" +"0000fcffffffffffffff04000000260000005958000000000000fcffffff" +"ffffffff04000000190000007558000000000000fcffffffffffffff0400" +"0000190000008a58000000000000fcffffffffffffff0400000026000000" +"a358000000000000fcffffffffffffff0400000019000000b85800000000" +"0000fcffffffffffffff0400000019000000d158000000000000fcffffff" +"ffffffff0400000019000000e858000000000000fcffffffffffffff0400" +"0000190000000159000000000000fcffffffffffffff040000002c000000" +"1759000000000000fcffffffffffffff040000002c000000345900000000" +"0000fcffffffffffffff04000000260000005259000000000000fcffffff" +"ffffffff04000000190000006f59000000000000fcffffffffffffff0400" +"0000190000008659000000000000fcffffffffffffff0400000026000000" +"9b59000000000000fcffffffffffffff0400000026000000ad5900000000" +"0000fcffffffffffffff0400000019000000c759000000000000fcffffff" +"ffffffff0400000019000000e159000000000000fcffffffffffffff0400" +"000006000000fe59000000000000fcffffffffffffff0400000006000000" +"125a000000000000fcffffffffffffff04000000160000002a5a00000000" +"0000fcffffffffffffff04000000060000003f5a000000000000fcffffff" +"ffffffff0400000016000000595a000000000000fcffffffffffffff0400" +"000006000000705a000000000000fcffffffffffffff0400000016000000" +"7c5a000000000000fcffffffffffffff0400000024000000315c00000000" +"0000fcffffffffffffff0400000006000000655c000000000000fcffffff" +"ffffffff0400000026000000825c000000000000fcffffffffffffff0400" +"000026000000995c000000000000fcffffffffffffff0400000026000000" +"af5c000000000000fcffffffffffffff0400000019000000cc5c00000000" +"0000fcffffffffffffff0400000019000000e55c000000000000fcffffff" +"ffffffff0400000019000000065d000000000000fcffffffffffffff0400" +"0000190000001e5d000000000000fcffffffffffffff0400000026000000" +"3d5d000000000000fcffffffffffffff04000000190000005b5d00000000" +"0000fcffffffffffffff04000000190000006c5d000000000000fcffffff" +"ffffffff040000002c000000855d000000000000fcffffffffffffff0400" +"00002c0000009e5d000000000000fcffffffffffffff0400000019000000" +"bb5d000000000000fcffffffffffffff0400000019000000d65d00000000" +"0000fcffffffffffffff0400000019000000f25d000000000000fcffffff" +"ffffffff0400000019000000055e000000000000fcffffffffffffff0400" +"0000260000002a5e000000000000fcffffffffffffff0400000019000000" +"465e000000000000fcffffffffffffff0400000019000000575e00000000" +"0000fcffffffffffffff040000002c0000006c5e000000000000fcffffff" +"ffffffff040000002c000000885e000000000000fcffffffffffffff0400" +"000019000000a55e000000000000fcffffffffffffff0400000019000000" +"bd5e000000000000fcffffffffffffff0400000019000000d75e00000000" +"0000fcffffffffffffff0400000019000000ee5e000000000000fcffffff" +"ffffffff04000000260000000d5f000000000000fcffffffffffffff0400" +"000019000000305f000000000000fcffffffffffffff0400000019000000" +"455f000000000000fcffffffffffffff040000002c0000005d5f00000000" +"0000fcffffffffffffff040000002c000000765f000000000000fcffffff" +"ffffffff04000000190000008d5f000000000000fcffffffffffffff0400" +"000019000000a35f000000000000fcffffffffffffff0400000019000000" +"b75f000000000000fcffffffffffffff0400000019000000d65f00000000" +"0000fcffffffffffffff0400000026000000f45f000000000000fcffffff" +"ffffffff04000000190000001460000000000000fcffffffffffffff0400" +"0000190000002c60000000000000fcffffffffffffff040000002c000000" +"4060000000000000fcffffffffffffff040000002c0000005e6000000000" +"0000fcffffffffffffff04000000260000007760000000000000fcffffff" +"ffffffff04000000260000008d60000000000000fcffffffffffffff0400" +"000026000000a060000000000000fcffffffffffffff040000002c000000" +"ba60000000000000fcffffffffffffff040000002c000000d76000000000" +"0000fcffffffffffffff0400000026000000f260000000000000fcffffff" +"ffffffff04000000260000000761000000000000fcffffffffffffff0400" +"0000190000002661000000000000fcffffffffffffff0400000019000000" +"3c61000000000000fcffffffffffffff0400000026000000536100000000" +"0000fcffffffffffffff04000000260000006861000000000000fcffffff" +"ffffffff04000000190000008561000000000000fcffffffffffffff0400" +"0000190000009e61000000000000fcffffffffffffff0400000006000000" +"c361000000000000fcffffffffffffff0400000028000000e06100000000" +"0000fcffffffffffffff0400000006000000fe61000000000000fcffffff" +"ffffffff04000000060000001062000000000000fcffffffffffffff0400" +"0000060000002762000000000000fcffffffffffffff0400000026000000" +"4262000000000000fcffffffffffffff0400000026000000586200000000" +"0000fcffffffffffffff04000000260000006762000000000000fcffffff" +"ffffffff04000000260000007162000000000000fcffffffffffffff0400" +"0000240000007e62000000000000fcffffffffffffff0400000024000000" +"ff62000000000000fcffffffffffffff040000001b000000196300000000" +"0000fcffffffffffffff040000001b0000006163000000000000fcffffff" +"ffffffff040000001b0000007563000000000000fcffffffffffffff0400" +"00001b0000000064000000000000fcffffffffffffff0400000006000000" +"5164000000000000fcffffffffffffff04000000040000007f6f00000000" +"0000fcffffffffffffff0400000007000000aa6f000000000000fcffffff" +"ffffffff0400000006000000fa6f000000000000fcffffffffffffff0400" +"0000040000001470000000000000fcffffffffffffff040000002d000000" +"8b70000000000000fcffffffffffffff0400000007000000b67000000000" +"0000fcffffffffffffff04000000060000000671000000000000fcffffff" +"ffffffff04000000040000003271000000000000fcffffffffffffff0400" +"00002d0000006771000000000000fcffffffffffffff0400000004000000" +"9471000000000000fcffffffffffffff040000002e000000107200000000" +"0000fcffffffffffffff04000000070000003a72000000000000fcffffff" +"ffffffff0400000006000000df72000000000000fcffffffffffffff0400" +"0000070000000973000000000000fcffffffffffffff0400000006000000" +"5a73000000000000fcffffffffffffff04000000040000008c7300000000" +"0000fcffffffffffffff040000002e0000000274000000000000fcffffff" +"ffffffff04000000070000002d74000000000000fcffffffffffffff0400" +"0000060000007d74000000000000fcffffffffffffff0400000004000000" +"9674000000000000fcffffffffffffff040000002d0000000e7500000000" +"0000fcffffffffffffff04000000070000003875000000000000fcffffff" +"ffffffff04000000060000008975000000000000fcffffffffffffff0400" +"000004000000bb75000000000000fcffffffffffffff040000002e000000" +"3176000000000000fcffffffffffffff0400000007000000587600000000" +"0000fcffffffffffffff0400000006000000a676000000000000fcffffff" +"ffffffff0400000004000000d077000000000000fcffffffffffffff0400" +"000003000000dc77000000000000fcffffffffffffff0400000004000000" +"8e78000000000000fcffffffffffffff0400000007000000b87800000000" +"0000fcffffffffffffff04000000060000000a79000000000000fcffffff" +"ffffffff04000000040000002879000000000000fcffffffffffffff0400" +"00002d0000004879000000000000fcffffffffffffff040000002f000000" +"247a000000000000fcffffffffffffff0400000003000000307a00000000" +"0000fcffffffffffffff0400000004000000e67a000000000000fcffffff" +"ffffffff0400000007000000107b000000000000fcffffffffffffff0400" +"000006000000687b000000000000fcffffffffffffff0400000004000000" +"927b000000000000fcffffffffffffff0400000001000000e67b00000000" +"0000fcffffffffffffff040000002d000000fa7b000000000000fcffffff" +"ffffffff040000002f000000d07c000000000000fcffffffffffffff0400" +"000003000000dc7c000000000000fcffffffffffffff0400000004000000" +"897d000000000000fcffffffffffffff0400000007000000b57d00000000" +"0000fcffffffffffffff04000000060000000f7e000000000000fcffffff" +"ffffffff0400000004000000347e000000000000fcffffffffffffff0400" +"000001000000757e000000000000fcffffffffffffff040000002d000000" +"887e000000000000fcffffffffffffff040000002f000000c87e00000000" +"0000fcffffffffffffff0400000006000000e07e000000000000fcffffff" +"ffffffff0400000006000000ff7e000000000000fcffffffffffffff0400" +"0000060000001e7f000000000000fcffffffffffffff0400000006000000" +"367f000000000000fcffffffffffffff0400000006000000557f00000000" +"0000fcffffffffffffff04000000060000006e7f000000000000fcffffff" +"ffffffff04000000130000008f7f000000000000fcffffffffffffff0400" +"000014000000a17f000000000000fcffffffffffffff0400000021000000" +"c57f000000000000fcffffffffffffff0400000022000000d77f00000000" +"0000fcffffffffffffff0400000013000000fb7f000000000000fcffffff" +"ffffffff04000000140000001a80000000000000fcffffffffffffff0400" +"0000060000003580000000000000fcffffffffffffff0400000006000000" +"5280000000000000fcffffffffffffff0400000006000000b98000000000" +"0000fcffffffffffffff04000000070000005281000000000000fcffffff" +"ffffffff04000000050000001399000000000000fcffffffffffffff0400" +"00001e000000fe99000000000000fcffffffffffffff0400000003000000" +"0d9a000000000000fcffffffffffffff0400000004000000f79a00000000" +"0000fcffffffffffffff0400000011000000019b000000000000fcffffff" +"ffffffff04000000040000007d9b000000000000fcffffffffffffff0400" +"000030000000919b000000000000fcffffffffffffff0400000001000000" +"b19b000000000000fcffffffffffffff04000000010000006e9e00000000" +"0000fcffffffffffffff04000000060000008a9e000000000000fcffffff" +"ffffffff04000000310000009c9e000000000000fcffffffffffffff0400" +"000006000000d69e000000000000fcffffffffffffff040000001e000000" +"c6a8000000000000fcffffffffffffff0400000016000000daa800000000" +"0000fcffffffffffffff0400000016000000f3a8000000000000fcffffff" +"ffffffff04000000060000008ca9000000000000fcffffffffffffff0400" +"000032000000ffa9000000000000fcffffffffffffff0400000032000000" +"67aa000000000000fcffffffffffffff0400000032000000baaa00000000" +"0000fcffffffffffffff0400000033000000e7aa000000000000fcffffff" +"ffffffff0400000034000000faaa000000000000fcffffffffffffff0400" +"0000060000000cab000000000000fcffffffffffffff0400000031000000" +"29ab000000000000fcffffffffffffff04000000350000003bab00000000" +"0000fcffffffffffffff04000000060000008cab000000000000fcffffff" +"ffffffff0400000036000000a0ab000000000000fcffffffffffffff0400" +"000016000000c2ab000000000000fcffffffffffffff0400000037000000" +"d6ab000000000000fcffffffffffffff0400000018000000fcab00000000" +"0000fcffffffffffffff04000000180000002fac000000000000fcffffff" +"ffffffff040000003800000041ac000000000000fcffffffffffffff0400" +"00003900000056ac000000000000fcffffffffffffff040000001d000000" +"70ac000000000000fcffffffffffffff040000003a0000008aac00000000" +"0000fcffffffffffffff040000003a000000a4ac000000000000fcffffff" +"ffffffff040000003a000000c1ac000000000000fcffffffffffffff0400" +"00003a000000d6ac000000000000fcffffffffffffff040000003b000000" +"eeac000000000000fcffffffffffffff040000003b00000007ad00000000" +"0000fcffffffffffffff040000003b000000dbad000000000000fcffffff" +"ffffffff040000003c00000042b2000000000000fcffffffffffffff0400" +"0000060000005db2000000000000fcffffffffffffff040000003d000000" +"75b2000000000000fcffffffffffffff040000001900000092b200000000" +"0000fcffffffffffffff0400000019000000afb2000000000000fcffffff" +"ffffffff0400000019000000ccb2000000000000fcffffffffffffff0400" +"000019000000edb2000000000000fcffffffffffffff0400000019000000" +"0ab3000000000000fcffffffffffffff04000000190000001db300000000" +"0000fcffffffffffffff040000003e00000037b3000000000000fcffffff" +"ffffffff040000001900000054b3000000000000fcffffffffffffff0400" +"00001900000071b3000000000000fcffffffffffffff0400000019000000" +"8eb3000000000000fcffffffffffffff0400000019000000a7b300000000" +"0000fcffffffffffffff0400000019000000c4b3000000000000fcffffff" +"ffffffff0400000019000000dcb3000000000000fcffffffffffffff0400" +"00003d000000f2b3000000000000fcffffffffffffff040000002c000000" +"0eb4000000000000fcffffffffffffff040000002c0000002ab400000000" +"0000fcffffffffffffff040000002c00000046b4000000000000fcffffff" +"ffffffff040000002c00000064b4000000000000fcffffffffffffff0400" +"00002c00000084b4000000000000fcffffffffffffff040000002c000000" +"9cb4000000000000fcffffffffffffff0400000019000000b4b400000000" +"0000fcffffffffffffff0400000019000000ccb4000000000000fcffffff" +"ffffffff0400000019000000e5b4000000000000fcffffffffffffff0400" +"000019000000f9b4000000000000fcffffffffffffff0400000019000000" +"17b5000000000000fcffffffffffffff040000001900000028b500000000" +"0000fcffffffffffffff040000003e0000003bb5000000000000fcffffff" +"ffffffff040000002c00000057b5000000000000fcffffffffffffff0400" +"00002c00000073b5000000000000fcffffffffffffff040000002c000000" +"8fb5000000000000fcffffffffffffff040000002c000000abb500000000" +"0000fcffffffffffffff040000002c000000c7b5000000000000fcffffff" +"ffffffff040000002c000000e0b5000000000000fcffffffffffffff0400" +"000006000000f4b5000000000000fcffffffffffffff0400000006000000" +"45b6000000000000fcffffffffffffff040000000600000059b600000000" +"0000fcffffffffffffff040000003f00000077b6000000000000fcffffff" +"ffffffff0400000006000000f9b6000000000000fcffffffffffffff0400" +"00004000000045bb000000000000fcffffffffffffff0400000006000000" +"5cbb000000000000fcffffffffffffff04000000060000006ebb00000000" +"0000fcffffffffffffff040000000600000091bc000000000000fcffffff" +"ffffffff04000000030000009dbc000000000000fcffffffffffffff0400" +"000004000000c7bc000000000000fcffffffffffffff0400000006000000" +"dbbc000000000000fcffffffffffffff040000003f000000f1bc00000000" +"0000fcffffffffffffff040000004100000003bd000000000000fcffffff" +"ffffffff040000000600000015bd000000000000fcffffffffffffff0400" +"0000060000002cbd000000000000fcffffffffffffff0400000006000000" +"43bd000000000000fcffffffffffffff040000004200000058bd00000000" +"0000fcffffffffffffff04000000060000006ebd000000000000fcffffff" +"ffffffff04000000420000008abd000000000000fcffffffffffffff0400" +"000006000000a1bd000000000000fcffffffffffffff0400000042000000" +"babd000000000000fcffffffffffffff0400000006000000c9bd00000000" +"0000fcffffffffffffff04000000160000005cbe000000000000fcffffff" +"ffffffff040000002600000070be000000000000fcffffffffffffff0400" +"00001600000005bf000000000000fcffffffffffffff0400000026000000" +"1fbf000000000000fcffffffffffffff040000000600000035bf00000000" +"0000fcffffffffffffff040000004200000050bf000000000000fcffffff" +"ffffffff040000000600000067bf000000000000fcffffffffffffff0400" +"0000420000007ebf000000000000fcffffffffffffff0400000006000000" +"95bf000000000000fcffffffffffffff0400000042000000abbf00000000" +"0000fcffffffffffffff0400000006000000bebf000000000000fcffffff" +"ffffffff040000001600000071c0000000000000fcffffffffffffff0400" +"00002600000085c0000000000000fcffffffffffffff0400000016000000" +"38c1000000000000fcffffffffffffff040000002600000055c100000000" +"0000fcffffffffffffff0400000006000000a2c2000000000000fcffffff" +"ffffffff0400000016000000b6c2000000000000fcffffffffffffff0400" +"00003d000000cec2000000000000fcffffffffffffff0400000006000000" +"e4c2000000000000fcffffffffffffff0400000042000000f6c200000000" +"0000fcffffffffffffff04000000060000000ac3000000000000fcffffff" +"ffffffff040000004200000021c3000000000000fcffffffffffffff0400" +"00000600000039c3000000000000fcffffffffffffff0400000042000000" +"55c3000000000000fcffffffffffffff040000000600000069c300000000" +"0000fcffffffffffffff04000000160000001ac4000000000000fcffffff" +"ffffffff04000000260000002fc4000000000000fcffffffffffffff0400" +"000016000000e0c4000000000000fcffffffffffffff0400000026000000" +"fdc4000000000000fcffffffffffffff040000000600000019c500000000" +"0000fcffffffffffffff040000004200000034c5000000000000fcffffff" +"ffffffff04000000060000004bc5000000000000fcffffffffffffff0400" +"0000420000006ac5000000000000fcffffffffffffff0400000006000000" +"7cc5000000000000fcffffffffffffff04000000420000009bc500000000" +"0000fcffffffffffffff0400000006000000aac5000000000000fcffffff" +"ffffffff040000001600000076c6000000000000fcffffffffffffff0400" +"0000260000008ec6000000000000fcffffffffffffff0400000016000000" +"5ac7000000000000fcffffffffffffff040000002600000075c700000000" +"0000fcffffffffffffff0400000006000000fdc8000000000000fcffffff" +"ffffffff040000001600000012c9000000000000fcffffffffffffff0400" +"00003d00000029c9000000000000fcffffffffffffff0400000006000000" +"3bc9000000000000fcffffffffffffff040000004200000055c900000000" +"0000fcffffffffffffff04000000060000006dc9000000000000fcffffff" +"ffffffff040000004200000087c9000000000000fcffffffffffffff0400" +"0000060000009fc9000000000000fcffffffffffffff0400000042000000" +"b6c9000000000000fcffffffffffffff0400000006000000cbc900000000" +"0000fcffffffffffffff040000001600000099ca000000000000fcffffff" +"ffffffff0400000026000000adca000000000000fcffffffffffffff0400" +"0000160000007bcb000000000000fcffffffffffffff0400000026000000" +"92cb000000000000fcffffffffffffff0400000006000000a9cb00000000" +"0000fcffffffffffffff0400000042000000c5cb000000000000fcffffff" +"ffffffff0400000006000000dccb000000000000fcffffffffffffff0400" +"000042000000f4cb000000000000fcffffffffffffff0400000006000000" +"07cc000000000000fcffffffffffffff040000004200000021cc00000000" +"0000fcffffffffffffff040000000600000031cc000000000000fcffffff" +"ffffffff040000001600000001cd000000000000fcffffffffffffff0400" +"00002600000017cd000000000000fcffffffffffffff0400000016000000" +"e7cd000000000000fcffffffffffffff040000002600000006ce00000000" +"0000fcffffffffffffff04000000060000008ccf000000000000fcffffff" +"ffffffff0400000016000000a1cf000000000000fcffffffffffffff0400" +"00003d000000bacf000000000000fcffffffffffffff0400000006000000" +"cbcf000000000000fcffffffffffffff0400000042000000decf00000000" +"0000fcffffffffffffff0400000006000000f5cf000000000000fcffffff" +"ffffffff04000000420000000dd0000000000000fcffffffffffffff0400" +"00000600000027d0000000000000fcffffffffffffff0400000042000000" +"44d0000000000000fcffffffffffffff040000000600000054d000000000" +"0000fcffffffffffffff040000001600000022d1000000000000fcffffff" +"ffffffff040000002600000034d1000000000000fcffffffffffffff0400" +"00001600000003d2000000000000fcffffffffffffff0400000026000000" +"22d2000000000000fcffffffffffffff040000000600000039d200000000" +"0000fcffffffffffffff040000004200000055d2000000000000fcffffff" +"ffffffff04000000060000006cd2000000000000fcffffffffffffff0400" +"00004200000084d2000000000000fcffffffffffffff0400000006000000" +"96d2000000000000fcffffffffffffff0400000042000000aed200000000" +"0000fcffffffffffffff0400000006000000bed2000000000000fcffffff" +"ffffffff04000000160000008dd3000000000000fcffffffffffffff0400" +"0000260000009fd3000000000000fcffffffffffffff0400000016000000" +"6ed4000000000000fcffffffffffffff040000002600000086d400000000" +"0000fcffffffffffffff04000000060000000fd6000000000000fcffffff" +"ffffffff04000000160000002ed6000000000000fcffffffffffffff0400" +"00003d00000049d6000000000000fcffffffffffffff0400000006000000" +"5dd6000000000000fcffffffffffffff04000000420000006fd600000000" +"0000fcffffffffffffff040000000600000083d6000000000000fcffffff" +"ffffffff040000004200000098d6000000000000fcffffffffffffff0400" +"000006000000aed6000000000000fcffffffffffffff0400000042000000" +"c9d6000000000000fcffffffffffffff0400000006000000d9d600000000" +"0000fcffffffffffffff0400000016000000a8d7000000000000fcffffff" +"ffffffff0400000026000000bdd7000000000000fcffffffffffffff0400" +"0000160000008bd8000000000000fcffffffffffffff0400000026000000" +"aad8000000000000fcffffffffffffff0400000006000000cbd800000000" +"0000fcffffffffffffff0400000042000000e6d8000000000000fcffffff" +"ffffffff0400000006000000fdd8000000000000fcffffffffffffff0400" +"00004200000015d9000000000000fcffffffffffffff0400000006000000" +"27d9000000000000fcffffffffffffff040000004200000045d900000000" +"0000fcffffffffffffff040000000600000055d9000000000000fcffffff" +"ffffffff040000001600000024da000000000000fcffffffffffffff0400" +"0000260000003bda000000000000fcffffffffffffff0400000016000000" +"09db000000000000fcffffffffffffff04000000260000002cdb00000000" +"0000fcffffffffffffff0400000006000000b4dc000000000000fcffffff" +"ffffffff0400000016000000d3dc000000000000fcffffffffffffff0400" +"00003d000000ecdc000000000000fcffffffffffffff0400000006000000" +"fadc000000000000fcffffffffffffff04000000420000000ddd00000000" +"0000fcffffffffffffff040000000600000024dd000000000000fcffffff" +"ffffffff040000004200000042dd000000000000fcffffffffffffff0400" +"00000600000059dd000000000000fcffffffffffffff0400000042000000" +"71dd000000000000fcffffffffffffff040000000600000089dd00000000" +"0000fcffffffffffffff04000000160000005ade000000000000fcffffff" +"ffffffff040000002600000070de000000000000fcffffffffffffff0400" +"0000160000003fdf000000000000fcffffffffffffff0400000026000000" +"59df000000000000fcffffffffffffff040000000600000084df00000000" +"0000fcffffffffffffff04000000420000009fdf000000000000fcffffff" +"ffffffff0400000006000000badf000000000000fcffffffffffffff0400" +"000042000000d9df000000000000fcffffffffffffff0400000006000000" +"f7df000000000000fcffffffffffffff04000000420000001ce000000000" +"0000fcffffffffffffff04000000060000002ce0000000000000fcffffff" +"ffffffff0400000016000000fbe0000000000000fcffffffffffffff0400" +"0000260000000ae1000000000000fcffffffffffffff0400000016000000" +"dbe1000000000000fcffffffffffffff0400000026000000fae100000000" +"0000fcffffffffffffff040000000600000082e3000000000000fcffffff" +"ffffffff04000000160000009be3000000000000fcffffffffffffff0400" +"00003d000000b6e3000000000000fcffffffffffffff0400000006000000" +"cde3000000000000fcffffffffffffff0400000043000000e5e300000000" +"0000fcffffffffffffff0400000043000000f7e3000000000000fcffffff" +"ffffffff040000003e00000008e4000000000000fcffffffffffffff0400" +"00004400000025e4000000000000fcffffffffffffff0400000026000000" +"48e4000000000000fcffffffffffffff040000002c00000064e400000000" +"0000fcffffffffffffff040000001900000076e4000000000000fcffffff" +"ffffffff04000000250000008fe4000000000000fcffffffffffffff0400" +"0000450000009de4000000000000fcffffffffffffff0400000025000000" +"bce4000000000000fcffffffffffffff040000002c000000d9e400000000" +"0000fcffffffffffffff0400000019000000f8e4000000000000fcffffff" +"ffffffff04000000260000000fe5000000000000fcffffffffffffff0400" +"00004500000025e5000000000000fcffffffffffffff0400000025000000" +"3be5000000000000fcffffffffffffff040000002600000052e500000000" +"0000fcffffffffffffff040000004500000067e5000000000000fcffffff" +"ffffffff04000000260000007be5000000000000fcffffffffffffff0400" +"00002600000091e5000000000000fcffffffffffffff0400000046000000" +"aee5000000000000fcffffffffffffff040000002c000000c2e500000000" +"0000fcffffffffffffff0400000019000000d8e5000000000000fcffffff" +"ffffffff0400000026000000ece5000000000000fcffffffffffffff0400" +"000046000000f9e5000000000000fcffffffffffffff0400000017000000" +"0ee6000000000000fcffffffffffffff040000001700000031e600000000" +"0000fcffffffffffffff040000001900000043e6000000000000fcffffff" +"ffffffff040000003600000057e6000000000000fcffffffffffffff0400" +"00001600000087e6000000000000fcffffffffffffff0400000037000000" +"a7e6000000000000fcffffffffffffff0400000018000000bae600000000" +"0000fcffffffffffffff0400000042000000cee6000000000000fcffffff" +"ffffffff0400000018000000e4e6000000000000fcffffffffffffff0400" +"0000060000000fe7000000000000fcffffffffffffff0400000016000000" +"27e7000000000000fcffffffffffffff04000000470000003ce700000000" +"0000fcffffffffffffff040000002600000055e7000000000000fcffffff" +"ffffffff04000000260000006ee7000000000000fcffffffffffffff0400" +"00002600000084e7000000000000fcffffffffffffff0400000006000000" +"a8e7000000000000fcffffffffffffff0400000016000000c0e700000000" +"0000fcffffffffffffff0400000047000000e1e7000000000000fcffffff" +"ffffffff040000004700000004e8000000000000fcffffffffffffff0400" +"0000470000001de8000000000000fcffffffffffffff040000003d000000" +"2be8000000000000fcffffffffffffff040000004100000045e800000000" +"0000fcffffffffffffff040000003d00000057e8000000000000fcffffff" +"ffffffff040000000600000084e8000000000000fcffffffffffffff0400" +"000016000000a7e8000000000000fcffffffffffffff0400000047000000" +"c8e8000000000000fcffffffffffffff0400000047000000eae800000000" +"0000fcffffffffffffff04000000470000000ce9000000000000fcffffff" +"ffffffff04000000470000002ee9000000000000fcffffffffffffff0400" +"00004700000050e9000000000000fcffffffffffffff0400000047000000" +"68e9000000000000fcffffffffffffff040000000600000087e900000000" +"0000fcffffffffffffff0400000006000000a1e9000000000000fcffffff" +"ffffffff0400000048000000b2e9000000000000fcffffffffffffff0400" +"000006000000c8e9000000000000fcffffffffffffff0400000042000000" +"e2e9000000000000fcffffffffffffff0400000006000000f6e900000000" +"0000fcffffffffffffff040000004200000011ea000000000000fcffffff" +"ffffffff04000000060000002bea000000000000fcffffffffffffff0400" +"00004200000046ea000000000000fcffffffffffffff0400000006000000" +"56ea000000000000fcffffffffffffff040000001600000025eb00000000" +"0000fcffffffffffffff04000000260000003aeb000000000000fcffffff" +"ffffffff040000001600000009ec000000000000fcffffffffffffff0400" +"00002600000021ec000000000000fcffffffffffffff0400000006000000" +"3dec000000000000fcffffffffffffff040000004200000060ec00000000" +"0000fcffffffffffffff040000000600000077ec000000000000fcffffff" +"ffffffff04000000420000008eec000000000000fcffffffffffffff0400" +"000006000000a1ec000000000000fcffffffffffffff0400000042000000" +"beec000000000000fcffffffffffffff0400000006000000d0ec00000000" +"0000fcffffffffffffff04000000160000009bed000000000000fcffffff" +"ffffffff0400000026000000b3ed000000000000fcffffffffffffff0400" +"0000160000007fee000000000000fcffffffffffffff0400000026000000" +"9dee000000000000fcffffffffffffff040000000600000025f000000000" +"0000fcffffffffffffff04000000160000003bf0000000000000fcffffff" +"ffffffff040000003d00000057f0000000000000fcffffffffffffff0400" +"00000600000069f0000000000000fcffffffffffffff0400000042000000" +"7bf0000000000000fcffffffffffffff040000000600000093f000000000" +"0000fcffffffffffffff0400000042000000adf0000000000000fcffffff" +"ffffffff0400000006000000c4f0000000000000fcffffffffffffff0400" +"000042000000dff0000000000000fcffffffffffffff0400000006000000" +"f3f0000000000000fcffffffffffffff0400000016000000c1f100000000" +"0000fcffffffffffffff0400000026000000d9f1000000000000fcffffff" +"ffffffff0400000016000000a7f2000000000000fcffffffffffffff0400" +"000026000000c4f2000000000000fcffffffffffffff0400000006000000" +"dbf2000000000000fcffffffffffffff0400000042000000f7f200000000" +"0000fcffffffffffffff04000000060000000ef3000000000000fcffffff" +"ffffffff040000004200000025f3000000000000fcffffffffffffff0400" +"00000600000037f3000000000000fcffffffffffffff0400000042000000" +"4ff3000000000000fcffffffffffffff040000000600000064f300000000" +"0000fcffffffffffffff040000001600000033f4000000000000fcffffff" +"ffffffff040000002600000043f4000000000000fcffffffffffffff0400" +"00001600000013f5000000000000fcffffffffffffff0400000026000000" +"2ef5000000000000fcffffffffffffff0400000006000000b4f600000000" +"0000fcffffffffffffff0400000016000000ccf6000000000000fcffffff" +"ffffffff040000003d000000e3f6000000000000fcffffffffffffff0400" +"000006000000fcf6000000000000fcffffffffffffff0400000006000000" +"11f7000000000000fcffffffffffffff040000004900000025f700000000" +"0000fcffffffffffffff040000004a00000038f7000000000000fcffffff" +"ffffffff04000000410000004ef7000000000000fcffffffffffffff0400" +"00000600000060f7000000000000fcffffffffffffff0400000006000000" +"74f7000000000000fcffffffffffffff040000004b00000089f700000000" +"0000fcffffffffffffff040000004a000000a1f7000000000000fcffffff" +"ffffffff0400000048000000aff7000000000000fcffffffffffffff0400" +"00004b000000c3f7000000000000fcffffffffffffff040000004b000000" +"d4f7000000000000fcffffffffffffff040000004b000000e1f700000000" +"0000fcffffffffffffff0400000049000000eef7000000000000fcffffff" +"ffffffff040000004b0000000bf8000000000000fcffffffffffffff0400" +"00004100000023f8000000000000fcffffffffffffff0400000006000000" +"36f8000000000000fcffffffffffffff04000000060000004df800000000" +"0000fcffffffffffffff04000000480000005bf8000000000000fcffffff" +"ffffffff04000000490000006cf8000000000000fcffffffffffffff0400" +"0000410000007ef8000000000000fcffffffffffffff0400000006000000" +"91f8000000000000fcffffffffffffff0400000006000000a4f800000000" +"0000fcffffffffffffff0400000049000000c5f8000000000000fcffffff" +"ffffffff0400000042000000dcf8000000000000fcffffffffffffff0400" +"000006000000eff8000000000000fcffffffffffffff0400000042000000" +"09f9000000000000fcffffffffffffff04000000060000001ef900000000" +"0000fcffffffffffffff040000004200000039f9000000000000fcffffff" +"ffffffff04000000060000004ef9000000000000fcffffffffffffff0400" +"00001600000022fa000000000000fcffffffffffffff0400000026000000" +"39fa000000000000fcffffffffffffff04000000160000000efb00000000" +"0000fcffffffffffffff040000002600000028fb000000000000fcffffff" +"ffffffff04000000060000003dfb000000000000fcffffffffffffff0400" +"00004200000055fb000000000000fcffffffffffffff0400000006000000" +"6afb000000000000fcffffffffffffff040000004200000080fb00000000" +"0000fcffffffffffffff040000000600000095fb000000000000fcffffff" +"ffffffff0400000042000000b0fb000000000000fcffffffffffffff0400" +"000006000000c0fb000000000000fcffffffffffffff0400000016000000" +"90fc000000000000fcffffffffffffff04000000260000009ffc00000000" +"0000fcffffffffffffff04000000160000006ffd000000000000fcffffff" +"ffffffff04000000260000008cfd000000000000fcffffffffffffff0400" +"00000600000014ff000000000000fcffffffffffffff0400000016000000" +"29ff000000000000fcffffffffffffff040000003d00000042ff00000000" +"0000fcffffffffffffff040000000600000059ff000000000000fcffffff" +"ffffffff04000000420000006cff000000000000fcffffffffffffff0400" +"00000600000083ff000000000000fcffffffffffffff0400000042000000" +"9aff000000000000fcffffffffffffff0400000006000000b2ff00000000" +"0000fcffffffffffffff0400000042000000cdff000000000000fcffffff" +"ffffffff0400000006000000e2ff000000000000fcffffffffffffff0400" +"000016000000b900010000000000fcffffffffffffff0400000026000000" +"cd00010000000000fcffffffffffffff0400000016000000a40101000000" +"0000fcffffffffffffff0400000026000000bb01010000000000fcffffff" +"ffffffff0400000006000000d801010000000000fcffffffffffffff0400" +"000042000000f801010000000000fcffffffffffffff0400000006000000" +"0f02010000000000fcffffffffffffff0400000042000000260201000000" +"0000fcffffffffffffff04000000060000003902010000000000fcffffff" +"ffffffff04000000420000005102010000000000fcffffffffffffff0400" +"0000060000006602010000000000fcffffffffffffff0400000016000000" +"3403010000000000fcffffffffffffff04000000260000004a0301000000" +"0000fcffffffffffffff04000000160000001904010000000000fcffffff" +"ffffffff04000000260000003404010000000000fcffffffffffffff0400" +"000006000000ba05010000000000fcffffffffffffff0400000016000000" +"d005010000000000fcffffffffffffff040000003d000000eb0501000000" +"0000fcffffffffffffff0400000006000000fc05010000000000fcffffff" +"ffffffff04000000420000000f06010000000000fcffffffffffffff0400" +"0000060000002606010000000000fcffffffffffffff0400000042000000" +"3c06010000000000fcffffffffffffff0400000006000000550601000000" +"0000fcffffffffffffff04000000420000006d06010000000000fcffffff" +"ffffffff04000000060000008206010000000000fcffffffffffffff0400" +"0000160000005507010000000000fcffffffffffffff0400000026000000" +"6707010000000000fcffffffffffffff04000000160000003e0801000000" +"0000fcffffffffffffff04000000260000005808010000000000fcffffff" +"ffffffff04000000060000006f08010000000000fcffffffffffffff0400" +"0000420000008b08010000000000fcffffffffffffff0400000006000000" +"a208010000000000fcffffffffffffff0400000042000000b90801000000" +"0000fcffffffffffffff0400000006000000cb08010000000000fcffffff" +"ffffffff0400000042000000e308010000000000fcffffffffffffff0400" +"000006000000f308010000000000fcffffffffffffff0400000016000000" +"c109010000000000fcffffffffffffff0400000026000000d50901000000" +"0000fcffffffffffffff0400000016000000a40a010000000000fcffffff" +"ffffffff0400000026000000be0a010000000000fcffffffffffffff0400" +"0000060000004a0c010000000000fcffffffffffffff0400000016000000" +"5e0c010000000000fcffffffffffffff040000003d000000750c01000000" +"0000fcffffffffffffff04000000060000008c0c010000000000fcffffff" +"ffffffff0400000006000000a30c010000000000fcffffffffffffff0400" +"000049000000ba0c010000000000fcffffffffffffff0400000042000000" +"cc0c010000000000fcffffffffffffff0400000006000000de0c01000000" +"0000fcffffffffffffff0400000042000000f60c010000000000fcffffff" +"ffffffff04000000060000000f0d010000000000fcffffffffffffff0400" +"0000420000002c0d010000000000fcffffffffffffff0400000006000000" +"400d010000000000fcffffffffffffff04000000160000000d0e01000000" +"0000fcffffffffffffff0400000026000000240e010000000000fcffffff" +"ffffffff0400000016000000f30e010000000000fcffffffffffffff0400" +"0000260000000f0f010000000000fcffffffffffffff0400000006000000" +"250f010000000000fcffffffffffffff0400000042000000410f01000000" +"0000fcffffffffffffff0400000006000000570f010000000000fcffffff" +"ffffffff04000000420000006e0f010000000000fcffffffffffffff0400" +"0000060000007f0f010000000000fcffffffffffffff0400000042000000" +"960f010000000000fcffffffffffffff0400000006000000aa0f01000000" +"0000fcffffffffffffff04000000160000007610010000000000fcffffff" +"ffffffff04000000260000008510010000000000fcffffffffffffff0400" +"0000160000005411010000000000fcffffffffffffff0400000026000000" +"6c11010000000000fcffffffffffffff0400000006000000f41201000000" +"0000fcffffffffffffff04000000160000000a13010000000000fcffffff" +"ffffffff040000003d0000002013010000000000fcffffffffffffff0400" +"0000060000003713010000000000fcffffffffffffff0400000006000000" +"4f13010000000000fcffffffffffffff0400000049000000651301000000" +"0000fcffffffffffffff04000000420000007813010000000000fcffffff" +"ffffffff04000000060000008c13010000000000fcffffffffffffff0400" +"000042000000a613010000000000fcffffffffffffff0400000006000000" +"be13010000000000fcffffffffffffff0400000042000000d51301000000" +"0000fcffffffffffffff0400000006000000e813010000000000fcffffff" +"ffffffff0400000016000000b614010000000000fcffffffffffffff0400" +"000026000000cd14010000000000fcffffffffffffff0400000016000000" +"9c15010000000000fcffffffffffffff0400000026000000b81501000000" +"0000fcffffffffffffff0400000006000000d415010000000000fcffffff" +"ffffffff0400000042000000ed15010000000000fcffffffffffffff0400" +"0000060000000416010000000000fcffffffffffffff0400000042000000" +"1c16010000000000fcffffffffffffff04000000060000002e1601000000" +"0000fcffffffffffffff04000000420000004f16010000000000fcffffff" +"ffffffff04000000060000005f16010000000000fcffffffffffffff0400" +"0000160000000e17010000000000fcffffffffffffff0400000026000000" +"1d17010000000000fcffffffffffffff0400000016000000ce1701000000" +"0000fcffffffffffffff0400000026000000ea17010000000000fcffffff" +"ffffffff04000000060000003619010000000000fcffffffffffffff0400" +"0000160000004a19010000000000fcffffffffffffff040000003d000000" +"6319010000000000fcffffffffffffff04000000060000007a1901000000" +"0000fcffffffffffffff04000000420000008d19010000000000fcffffff" +"ffffffff0400000006000000a419010000000000fcffffffffffffff0400" +"000042000000bb19010000000000fcffffffffffffff0400000006000000" +"d019010000000000fcffffffffffffff0400000042000000e71901000000" +"0000fcffffffffffffff0400000006000000fc19010000000000fcffffff" +"ffffffff0400000016000000ac1a010000000000fcffffffffffffff0400" +"000026000000c01a010000000000fcffffffffffffff0400000016000000" +"731b010000000000fcffffffffffffff04000000260000008c1b01000000" +"0000fcffffffffffffff0400000006000000a31b010000000000fcffffff" +"ffffffff0400000042000000bf1b010000000000fcffffffffffffff0400" +"000006000000d61b010000000000fcffffffffffffff0400000042000000" +"ee1b010000000000fcffffffffffffff0400000006000000031c01000000" +"0000fcffffffffffffff04000000420000001a1c010000000000fcffffff" +"ffffffff04000000060000002a1c010000000000fcffffffffffffff0400" +"000016000000db1c010000000000fcffffffffffffff0400000026000000" +"ef1c010000000000fcffffffffffffff0400000016000000a41d01000000" +"0000fcffffffffffffff0400000026000000c31d010000000000fcffffff" +"ffffffff0400000006000000d11e010000000000fcffffffffffffff0400" +"000016000000e61e010000000000fcffffffffffffff040000003d000000" +"fa1e010000000000fcffffffffffffff04000000060000001b1f01000000" +"0000fcffffffffffffff04000000060000002c1f010000000000fcffffff" +"ffffffff04000000490000003b1f010000000000fcffffffffffffff0400" +"0000490000004f1f010000000000fcffffffffffffff0400000048000000" +"811f010000000000fcffffffffffffff04000000060000008f1f01000000" +"0000fcffffffffffffff040000003c0000009b1f010000000000fcffffff" +"ffffffff040000004c000000b41f010000000000fcffffffffffffff0400" +"00004c000000ef1f010000000000fcffffffffffffff040000004c000000" +"2920010000000000fcffffffffffffff040000004c000000442001000000" +"0000fcffffffffffffff040000004c0000007f20010000000000fcffffff" +"ffffffff040000004c000000db20010000000000fcffffffffffffff0400" +"000001000000fb20010000000000fcffffffffffffff0400000001000000" +"1b21010000000000fcffffffffffffff04000000010000003b2101000000" +"0000fcffffffffffffff04000000010000005621010000000000fcffffff" +"ffffffff04000000010000007621010000000000fcffffffffffffff0400" +"0000010000009b21010000000000fcffffffffffffff0400000001000000" +"bb21010000000000fcffffffffffffff0400000001000000db2101000000" +"0000fcffffffffffffff0400000001000000fb21010000000000fcffffff" +"ffffffff04000000010000001b22010000000000fcffffffffffffff0400" +"0000010000003b22010000000000fcffffffffffffff0400000001000000" +"5b22010000000000fcffffffffffffff04000000010000007b2201000000" +"0000fcffffffffffffff0400000001000000dc22010000000000fcffffff" +"ffffffff040000004d0000006324010000000000fcffffffffffffff0400" +"000004000000b124010000000000fcffffffffffffff0400000004000000" +"8a25010000000000fcffffffffffffff040000004e000000972501000000" +"0000fcffffffffffffff04000000040000000926010000000000fcffffff" +"ffffffff04000000060000001d26010000000000fcffffffffffffff0400" +"000016000000e826010000000000fcffffffffffffff0400000006000000" +"1527010000000000fcffffffffffffff0400000004000000542701000000" +"0000fcffffffffffffff040000001a000000a127010000000000fcffffff" +"ffffffff0400000016000000ae27010000000000fcffffffffffffff0400" +"00001b000000cd27010000000000fcffffffffffffff0400000004000000" +"b251010000000000fcffffffffffffff040000004f000000f25101000000" +"0000fcffffffffffffff04000000040000002452010000000000fcffffff" +"ffffffff04000000160000005252010000000000fcffffffffffffff0400" +"000006000000c452010000000000fcffffffffffffff0400000016000000" +"d152010000000000fcffffffffffffff040000001b000000ee5201000000" +"0000fcffffffffffffff0400000004000000c057010000000000fcffffff" +"ffffffff040000002a000000dc57010000000000fcffffffffffffff0400" +"00002b0000004858010000000000fcffffffffffffff040000000a000000" +"e758010000000000fcffffffffffffff0400000004000000865901000000" +"0000fcffffffffffffff04000000030000009259010000000000fcffffff" +"ffffffff0400000004000000ad59010000000000fcffffffffffffff0400" +"000004000000ed59010000000000fcffffffffffffff0400000006000000" +"155a010000000000fcffffffffffffff04000000060000001b5d01000000" +"0000fcffffffffffffff04000000500000003e5d010000000000fcffffff" +"ffffffff04000000250000005a5d010000000000fcffffffffffffff0400" +"000025000000725d010000000000fcffffffffffffff0400000026000000" +"865d010000000000fcffffffffffffff04000000190000009d5d01000000" +"0000fcffffffffffffff0400000019000000af5d010000000000fcffffff" +"ffffffff0400000025000000c45d010000000000fcffffffffffffff0400" +"00002c000000e15d010000000000fcffffffffffffff040000002c000000" +"f55d010000000000fcffffffffffffff040000002c000000095e01000000" +"0000fcffffffffffffff040000002c0000001a5e010000000000fcffffff" +"ffffffff0400000026000000355e010000000000fcffffffffffffff0400" +"00002c0000004c5e010000000000fcffffffffffffff040000002c000000" +"5f5e010000000000fcffffffffffffff0400000025000000765e01000000" +"0000fcffffffffffffff04000000190000008f5e010000000000fcffffff" +"ffffffff0400000019000000a15e010000000000fcffffffffffffff0400" +"000019000000b65e010000000000fcffffffffffffff0400000019000000" +"c75e010000000000fcffffffffffffff0400000026000000e65e01000000" +"0000fcffffffffffffff040000002c000000015f010000000000fcffffff" +"ffffffff040000002c000000175f010000000000fcffffffffffffff0400" +"00002c0000002d5f010000000000fcffffffffffffff040000002c000000" +"435f010000000000fcffffffffffffff04000000260000005b5f01000000" +"0000fcffffffffffffff04000000260000006c5f010000000000fcffffff" +"ffffffff0400000025000000835f010000000000fcffffffffffffff0400" +"00002c0000009b5f010000000000fcffffffffffffff040000002c000000" +"ae5f010000000000fcffffffffffffff040000002c000000c35f01000000" +"0000fcffffffffffffff040000002c000000d35f010000000000fcffffff" +"ffffffff040000002c000000e85f010000000000fcffffffffffffff0400" +"00002c0000000060010000000000fcffffffffffffff0400000019000000" +"1660010000000000fcffffffffffffff0400000019000000296001000000" +"0000fcffffffffffffff04000000250000003e60010000000000fcffffff" +"ffffffff040000002c0000005960010000000000fcffffffffffffff0400" +"00002c0000006960010000000000fcffffffffffffff040000002c000000" +"7b60010000000000fcffffffffffffff040000002c000000906001000000" +"0000fcffffffffffffff0400000019000000a960010000000000fcffffff" +"ffffffff0400000019000000bc60010000000000fcffffffffffffff0400" +"00002c000000d060010000000000fcffffffffffffff040000002c000000" +"e860010000000000fcffffffffffffff04000000260000000a6101000000" +"0000fcffffffffffffff04000000260000002161010000000000fcffffff" +"ffffffff04000000190000003d61010000000000fcffffffffffffff0400" +"0000190000004c61010000000000fcffffffffffffff040000002c000000" +"6261010000000000fcffffffffffffff040000002c000000716101000000" +"0000fcffffffffffffff04000000250000008c61010000000000fcffffff" +"ffffffff040000002c000000a861010000000000fcffffffffffffff0400" +"00002c000000bf61010000000000fcffffffffffffff0400000025000000" +"d661010000000000fcffffffffffffff040000002c000000ed6101000000" +"0000fcffffffffffffff040000002c000000fe61010000000000fcffffff" +"ffffffff04000000190000001562010000000000fcffffffffffffff0400" +"0000190000002862010000000000fcffffffffffffff040000002c000000" +"3862010000000000fcffffffffffffff040000002c0000004c6201000000" +"0000fcffffffffffffff04000000190000006162010000000000fcffffff" +"ffffffff04000000190000007062010000000000fcffffffffffffff0400" +"0000280000008562010000000000fcffffffffffffff0400000019000000" +"9862010000000000fcffffffffffffff0400000019000000b06201000000" +"0000fcffffffffffffff0400000006000000cd62010000000000fcffffff" +"ffffffff0400000051000000de62010000000000fcffffffffffffff0400" +"0000500000002464010000000000fcffffffffffffff0400000011000000" +"9a64010000000000fcffffffffffffff0400000016000000b36401000000" +"0000fcffffffffffffff0400000006000000c564010000000000fcffffff" +"ffffffff0400000006000000da64010000000000fcffffffffffffff0400" +"000016000000ed64010000000000fcffffffffffffff0400000016000000" +"ff64010000000000fcffffffffffffff04000000060000002d6501000000" +"0000fcffffffffffffff04000000040000000768010000000000fcffffff" +"ffffffff04000000400000004a70010000000000fcffffffffffffff0400" +"0000060000006070010000000000fcffffffffffffff0400000006000000" +"7170010000000000fcffffffffffffff0400000006000000a87101000000" +"0000fcffffffffffffff0400000003000000b471010000000000fcffffff" +"ffffffff04000000040000000272010000000000fcffffffffffffff0400" +"0000060000003172010000000000fcffffffffffffff0400000004000000" +"2573010000000000fcffffffffffffff0400000003000000337301000000" +"0000fcffffffffffffff0400000004000000c573010000000000fcffffff" +"ffffffff0400000006000000e673010000000000fcffffffffffffff0400" +"0000060000004174010000000000fcffffffffffffff0400000018000000" +"5474010000000000fcffffffffffffff0400000006000000787401000000" +"0000fcffffffffffffff0400000004000000db74010000000000fcffffff" +"ffffffff0400000018000000ed74010000000000fcffffffffffffff0400" +"0000060000001675010000000000fcffffffffffffff0400000004000000" +"6475010000000000fcffffffffffffff0400000018000000777501000000" +"0000fcffffffffffffff04000000060000009b75010000000000fcffffff" +"ffffffff0400000004000000fc75010000000000fcffffffffffffff0400" +"0000180000000d76010000000000fcffffffffffffff0400000006000000" +"3676010000000000fcffffffffffffff0400000004000000667601000000" +"0000fcffffffffffffff04000000520000008676010000000000fcffffff" +"ffffffff0400000026000000b476010000000000fcffffffffffffff0400" +"00002c000000ce76010000000000fcffffffffffffff0400000019000000" +"f276010000000000fcffffffffffffff0400000026000000117701000000" +"0000fcffffffffffffff04000000260000002e77010000000000fcffffff" +"ffffffff04000000060000004977010000000000fcffffffffffffff0400" +"0000190000006177010000000000fcffffffffffffff0400000019000000" +"7977010000000000fcffffffffffffff0400000019000000927701000000" +"0000fcffffffffffffff0400000019000000a777010000000000fcffffff" +"ffffffff0400000019000000c377010000000000fcffffffffffffff0400" +"000019000000dd77010000000000fcffffffffffffff0400000019000000" +"fb77010000000000fcffffffffffffff04000000190000001a7801000000" +"0000fcffffffffffffff04000000520000002e78010000000000fcffffff" +"ffffffff040000002c0000005278010000000000fcffffffffffffff0400" +"00002c0000007a78010000000000fcffffffffffffff040000002c000000" +"a278010000000000fcffffffffffffff040000002c000000c77801000000" +"0000fcffffffffffffff040000002c000000eb78010000000000fcffffff" +"ffffffff040000002c0000000179010000000000fcffffffffffffff0400" +"00002c0000001879010000000000fcffffffffffffff040000002c000000" +"3079010000000000fcffffffffffffff040000002c0000004c7901000000" +"0000fcffffffffffffff040000002c0000006479010000000000fcffffff" +"ffffffff040000002c0000007f79010000000000fcffffffffffffff0400" +"00002c0000008e79010000000000fcffffffffffffff040000003e000000" +"a479010000000000fcffffffffffffff0400000019000000b77901000000" +"0000fcffffffffffffff0400000019000000ca79010000000000fcffffff" +"ffffffff0400000019000000e079010000000000fcffffffffffffff0400" +"000019000000f679010000000000fcffffffffffffff0400000019000000" +"0b7a010000000000fcffffffffffffff0400000019000000247a01000000" +"0000fcffffffffffffff04000000060000005a7a010000000000fcffffff" +"ffffffff04000000040000001e7c010000000000fcffffffffffffff0400" +"0000280000002d7c010000000000fcffffffffffffff0400000028000000" +"4c7c010000000000fcffffffffffffff0400000028000000de7f01000000" +"0000fcffffffffffffff04000000060000000480010000000000fcffffff" +"ffffffff04000000060000001f80010000000000fcffffffffffffff0400" +"0000060000002e80010000000000fcffffffffffffff0400000053000000" +"4380010000000000fcffffffffffffff0400000006000000578001000000" +"0000fcffffffffffffff04000000060000006b80010000000000fcffffff" +"ffffffff04000000060000007f80010000000000fcffffffffffffff0400" +"0000060000009180010000000000fcffffffffffffff0400000053000000" +"c580010000000000fcffffffffffffff0400000004000000878101000000" +"0000fcffffffffffffff04000000190000009e81010000000000fcffffff" +"ffffffff040000002c000000d781010000000000fcffffffffffffff0400" +"000019000000ee81010000000000fcffffffffffffff040000002c000000" +"9283010000000000fcffffffffffffff0400000006000000378501000000" +"0000fcffffffffffffff0400000006000000da86010000000000fcffffff" +"ffffffff04000000060000000187010000000000fcffffffffffffff0400" +"0000060000001e87010000000000fcffffffffffffff0400000006000000" +"3f87010000000000fcffffffffffffff0400000006000000628701000000" +"0000fcffffffffffffff04000000060000007e87010000000000fcffffff" +"ffffffff0400000006000000a187010000000000fcffffffffffffff0400" +"000006000000bf87010000000000fcffffffffffffff0400000054000000" +"d687010000000000fcffffffffffffff0400000006000000eb8701000000" +"0000fcffffffffffffff04000000060000000288010000000000fcffffff" +"ffffffff04000000060000001788010000000000fcffffffffffffff0400" +"0000060000002e88010000000000fcffffffffffffff0400000006000000" +"4c88010000000000fcffffffffffffff0400000006000000658801000000" +"0000fcffffffffffffff04000000060000007b88010000000000fcffffff" +"ffffffff04000000060000008f88010000000000fcffffffffffffff0400" +"000006000000a288010000000000fcffffffffffffff0400000006000000" +"b688010000000000fcffffffffffffff0400000006000000cb8801000000" +"0000fcffffffffffffff0400000006000000e288010000000000fcffffff" +"ffffffff0400000054000000688a010000000000fcffffffffffffff0400" +"000006000000dc8b010000000000fcffffffffffffff0400000006000000" +"638d010000000000fcffffffffffffff04000000060000007a8d01000000" +"0000fcffffffffffffff0400000006000000968d010000000000fcffffff" +"ffffffff0400000006000000ab8d010000000000fcffffffffffffff0400" +"000006000000c38d010000000000fcffffffffffffff0400000006000000" +"d88d010000000000fcffffffffffffff0400000006000000ed8d01000000" +"0000fcffffffffffffff0400000006000000088e010000000000fcffffff" +"ffffffff04000000540000001f8e010000000000fcffffffffffffff0400" +"000006000000348e010000000000fcffffffffffffff0400000006000000" +"4b8e010000000000fcffffffffffffff0400000006000000608e01000000" +"0000fcffffffffffffff0400000006000000778e010000000000fcffffff" +"ffffffff04000000060000008d8e010000000000fcffffffffffffff0400" +"000006000000a58e010000000000fcffffffffffffff0400000006000000" +"ba8e010000000000fcffffffffffffff0400000006000000cd8e01000000" +"0000fcffffffffffffff0400000006000000e38e010000000000fcffffff" +"ffffffff0400000006000000f88e010000000000fcffffffffffffff0400" +"0000060000000d8f010000000000fcffffffffffffff0400000006000000" +"248f010000000000fcffffffffffffff0400000054000000af9001000000" +"0000fcffffffffffffff04000000060000002492010000000000fcffffff" +"ffffffff04000000060000009993010000000000fcffffffffffffff0400" +"000006000000b593010000000000fcffffffffffffff0400000006000000" +"cf93010000000000fcffffffffffffff0400000006000000e49301000000" +"0000fcffffffffffffff04000000060000000094010000000000fcffffff" +"ffffffff04000000060000001594010000000000fcffffffffffffff0400" +"0000060000002d94010000000000fcffffffffffffff0400000006000000" +"4994010000000000fcffffffffffffff0400000054000000609401000000" +"0000fcffffffffffffff04000000060000007594010000000000fcffffff" +"ffffffff04000000060000008c94010000000000fcffffffffffffff0400" +"000006000000a194010000000000fcffffffffffffff0400000006000000" +"b894010000000000fcffffffffffffff0400000006000000d09401000000" +"0000fcffffffffffffff0400000006000000e294010000000000fcffffff" +"ffffffff0400000006000000fa94010000000000fcffffffffffffff0400" +"0000060000000e95010000000000fcffffffffffffff0400000006000000" +"2395010000000000fcffffffffffffff0400000006000000369501000000" +"0000fcffffffffffffff04000000060000004c95010000000000fcffffff" +"ffffffff04000000060000006495010000000000fcffffffffffffff0400" +"0000540000008395010000000000fcffffffffffffff0400000006000000" +"9895010000000000fcffffffffffffff0400000006000000b39501000000" +"0000fcffffffffffffff0400000006000000f295010000000000fcffffff" +"ffffffff04000000040000008896010000000000fcffffffffffffff0400" +"000025000000a696010000000000fcffffffffffffff0400000026000000" +"be96010000000000fcffffffffffffff0400000019000000dc9601000000" +"0000fcffffffffffffff0400000019000000f696010000000000fcffffff" +"ffffffff040000002c0000001497010000000000fcffffffffffffff0400" +"00002c0000003797010000000000fcffffffffffffff0400000019000000" +"5797010000000000fcffffffffffffff04000000190000006d9701000000" +"0000fcffffffffffffff04000000250000008697010000000000fcffffff" +"ffffffff04000000260000009e97010000000000fcffffffffffffff0400" +"000019000000c097010000000000fcffffffffffffff0400000019000000" +"d697010000000000fcffffffffffffff0400000025000000ed9701000000" +"0000fcffffffffffffff040000002c000000fe97010000000000fcffffff" +"ffffffff04000000190000001498010000000000fcffffffffffffff0400" +"0000190000003198010000000000fcffffffffffffff0400000019000000" +"5298010000000000fcffffffffffffff040000002c000000629801000000" +"0000fcffffffffffffff04000000190000007c98010000000000fcffffff" +"ffffffff04000000190000009898010000000000fcffffffffffffff0400" +"000019000000a998010000000000fcffffffffffffff0400000019000000" +"be98010000000000fcffffffffffffff0400000019000000d29801000000" +"0000fcffffffffffffff0400000019000000e998010000000000fcffffff" +"ffffffff0400000019000000fa98010000000000fcffffffffffffff0400" +"00002c0000000f99010000000000fcffffffffffffff040000002c000000" +"2899010000000000fcffffffffffffff040000002c0000003f9901000000" +"0000fcffffffffffffff040000002c0000006f99010000000000fcffffff" +"ffffffff0400000004000000069a010000000000fcffffffffffffff0400" +"00002c000000189a010000000000fcffffffffffffff0400000019000000" +"2f9a010000000000fcffffffffffffff0400000006000000429a01000000" +"0000fcffffffffffffff0400000006000000589a010000000000fcffffff" +"ffffffff0400000006000000869a010000000000fcffffffffffffff0400" +"000004000000b49a010000000000fcffffffffffffff040000002c000000" +"c79a010000000000fcffffffffffffff040000002c000000da9a01000000" +"0000fcffffffffffffff040000002c000000f69a010000000000fcffffff" +"ffffffff040000002c000000129b010000000000fcffffffffffffff0400" +"00002c000000419b010000000000fcffffffffffffff040000002c000000" +"379d010000000000fcffffffffffffff04000000190000006a9d01000000" +"0000fcffffffffffffff0400000004000000d09e010000000000fcffffff" +"ffffffff040000004f000000ff9e010000000000fcffffffffffffff0400" +"0000040000008e9f010000000000fcffffffffffffff0400000019000000" +"a49f010000000000fcffffffffffffff040000002c000000b89f01000000" +"0000fcffffffffffffff0400000019000000ca9f010000000000fcffffff" +"ffffffff0400000018000000e19f010000000000fcffffffffffffff0400" +"00001800000011a0010000000000fcffffffffffffff0400000004000000" +"42a0010000000000fcffffffffffffff040000002c00000065a001000000" +"0000fcffffffffffffff040000002c00000082a0010000000000fcffffff" +"ffffffff0400000019000000a5a0010000000000fcffffffffffffff0400" +"0000190000000ac1010000000000fcffffffffffffff040000004f000000" +"47c1010000000000fcffffffffffffff0400000004000000e5c101000000" +"0000fcffffffffffffff040000003d0000000dc2010000000000fcffffff" +"ffffffff040000003d00000024c2010000000000fcffffffffffffff0400" +"0000190000003bc2010000000000fcffffffffffffff0400000019000000" +"52c2010000000000fcffffffffffffff04000000190000006cc201000000" +"0000fcffffffffffffff040000001900000086c2010000000000fcffffff" +"ffffffff0400000019000000a2c2010000000000fcffffffffffffff0400" +"000019000000b9c2010000000000fcffffffffffffff0400000019000000" +"d4c2010000000000fcffffffffffffff0400000019000000efc201000000" +"0000fcffffffffffffff04000000190000000dc3010000000000fcffffff" +"ffffffff04000000190000002bc3010000000000fcffffffffffffff0400" +"0000190000004bc3010000000000fcffffffffffffff0400000019000000" +"63c3010000000000fcffffffffffffff040000003d0000007bc301000000" +"0000fcffffffffffffff040000002c0000009dc3010000000000fcffffff" +"ffffffff040000002c000000bfc3010000000000fcffffffffffffff0400" +"00002c000000e1c3010000000000fcffffffffffffff040000002c000000" +"01c4010000000000fcffffffffffffff040000002c00000023c401000000" +"0000fcffffffffffffff040000002c00000041c4010000000000fcffffff" +"ffffffff040000002c00000059c4010000000000fcffffffffffffff0400" +"00002c00000071c4010000000000fcffffffffffffff040000002c000000" +"89c4010000000000fcffffffffffffff040000002c0000009fc401000000" +"0000fcffffffffffffff040000002c000000b6c4010000000000fcffffff" +"ffffffff040000002c000000c9c4010000000000fcffffffffffffff0400" +"00003e000000dec4010000000000fcffffffffffffff0400000019000000" +"f5c4010000000000fcffffffffffffff04000000190000000cc501000000" +"0000fcffffffffffffff040000001900000026c5010000000000fcffffff" +"ffffffff04000000190000003dc5010000000000fcffffffffffffff0400" +"00001900000054c5010000000000fcffffffffffffff0400000019000000" +"6fc5010000000000fcffffffffffffff04000000060000009fc501000000" +"0000fcffffffffffffff040000000400000016c6010000000000fcffffff" +"ffffffff040000004800000028c6010000000000fcffffffffffffff0400" +"00000600000055c6010000000000fcffffffffffffff0400000004000000" +"e6c6010000000000fcffffffffffffff040000000600000006c701000000" +"0000fcffffffffffffff040000000600000029c7010000000000fcffffff" +"ffffffff04000000060000004cc7010000000000fcffffffffffffff0400" +"00000600000071c7010000000000fcffffffffffffff0400000006000000" +"94c7010000000000fcffffffffffffff0400000006000000aac701000000" +"0000fcffffffffffffff0400000055000000c6c7010000000000fcffffff" +"ffffffff0400000006000000e9c7010000000000fcffffffffffffff0400" +"00000600000001c8010000000000fcffffffffffffff040000002c000000" +"23c8010000000000fcffffffffffffff040000002c00000038c801000000" +"0000fcffffffffffffff040000001900000053c8010000000000fcffffff" +"ffffffff040000001900000064c8010000000000fcffffffffffffff0400" +"00001900000075c8010000000000fcffffffffffffff0400000019000000" +"8dc8010000000000fcffffffffffffff0400000019000000b4c801000000" +"0000fcffffffffffffff0400000019000000c4c8010000000000fcffffff" +"ffffffff0400000019000000d8c8010000000000fcffffffffffffff0400" +"000019000000e9c8010000000000fcffffffffffffff0400000019000000" +"fac8010000000000fcffffffffffffff04000000190000000cc901000000" +"0000fcffffffffffffff04000000550000002ec9010000000000fcffffff" +"ffffffff04000000060000004cc9010000000000fcffffffffffffff0400" +"00000600000062c9010000000000fcffffffffffffff0400000055000000" +"7cc9010000000000fcffffffffffffff040000000600000096c901000000" +"0000fcffffffffffffff0400000006000000aac9010000000000fcffffff" +"ffffffff040000002c000000d1c9010000000000fcffffffffffffff0400" +"00002c000000e5c9010000000000fcffffffffffffff0400000019000000" +"f9c9010000000000fcffffffffffffff04000000190000000aca01000000" +"0000fcffffffffffffff04000000190000001bca010000000000fcffffff" +"ffffffff040000001900000031ca010000000000fcffffffffffffff0400" +"00001900000058ca010000000000fcffffffffffffff0400000019000000" +"6aca010000000000fcffffffffffffff04000000190000007eca01000000" +"0000fcffffffffffffff040000001900000092ca010000000000fcffffff" +"ffffffff0400000019000000a3ca010000000000fcffffffffffffff0400" +"000019000000bfca010000000000fcffffffffffffff040000002c000000" +"cfca010000000000fcffffffffffffff0400000019000000e4ca01000000" +"0000fcffffffffffffff0400000006000000faca010000000000fcffffff" +"ffffffff04000000190000001acb010000000000fcffffffffffffff0400" +"0000190000002acb010000000000fcffffffffffffff0400000019000000" +"3ecb010000000000fcffffffffffffff04000000190000004fcb01000000" +"0000fcffffffffffffff040000001900000060cb010000000000fcffffff" +"ffffffff040000001900000078cb010000000000fcffffffffffffff0400" +"00002c0000009fcb010000000000fcffffffffffffff040000002c000000" +"afcb010000000000fcffffffffffffff0400000019000000c3cb01000000" +"0000fcffffffffffffff0400000019000000d4cb010000000000fcffffff" +"ffffffff0400000019000000e5cb010000000000fcffffffffffffff0400" +"00001900000000cc010000000000fcffffffffffffff0400000006000000" +"18cc010000000000fcffffffffffffff04000000060000002fcc01000000" +"0000fcffffffffffffff040000000600000042cc010000000000fcffffff" +"ffffffff040000000600000057cc010000000000fcffffffffffffff0400" +"0000060000006ccc010000000000fcffffffffffffff0400000006000000" +"83cc010000000000fcffffffffffffff04000000060000009ccc01000000" +"0000fcffffffffffffff0400000006000000cecc010000000000fcffffff" +"ffffffff04000000040000005fcd010000000000fcffffffffffffff0400" +"00003c0000009fcd010000000000fcffffffffffffff0400000004000000" +"d2cd010000000000fcffffffffffffff040000004a000000e4cd01000000" +"0000fcffffffffffffff040000000600000060ce010000000000fcffffff" +"ffffffff040000004800000075ce010000000000fcffffffffffffff0400" +"000006000000cdce010000000000fcffffffffffffff0400000028000000" +"e2ce010000000000fcffffffffffffff0400000028000000f7ce01000000" +"0000fcffffffffffffff04000000280000000acf010000000000fcffffff" +"ffffffff04000000060000003acf010000000000fcffffffffffffff0400" +"0000040000006fcf010000000000fcffffffffffffff040000001b000000" +"84cf010000000000fcffffffffffffff040000001b000000c4cf01000000" +"0000fcffffffffffffff0400000019000000d7cf010000000000fcffffff" +"ffffffff0400000019000000eacf010000000000fcffffffffffffff0400" +"00001900000006d0010000000000fcffffffffffffff0400000019000000" +"22d0010000000000fcffffffffffffff040000001900000051d001000000" +"0000fcffffffffffffff0400000019000000d9d0010000000000fcffffff" +"ffffffff040000005600000037d1010000000000fcffffffffffffff0400" +"000056000000a1d1010000000000fcffffffffffffff0400000004000000" +"06d3010000000000fcffffffffffffff040000000400000099d301000000" +"0000fcffffffffffffff0400000017000000b1d3010000000000fcffffff" +"ffffffff0400000019000000c9d3010000000000fcffffffffffffff0400" +"000019000000e1d3010000000000fcffffffffffffff0400000019000000" +"03d4010000000000fcffffffffffffff04000000180000001dd401000000" +"0000fcffffffffffffff040000001700000032d4010000000000fcffffff" +"ffffffff040000001900000047d4010000000000fcffffffffffffff0400" +"00001900000064d4010000000000fcffffffffffffff0400000019000000" +"7cd4010000000000fcffffffffffffff040000001900000099d401000000" +"0000fcffffffffffffff0400000018000000b1d4010000000000fcffffff" +"ffffffff0400000019000000cad4010000000000fcffffffffffffff0400" +"000018000000e2d4010000000000fcffffffffffffff0400000019000000" +"fad4010000000000fcffffffffffffff040000001900000012d501000000" +"0000fcffffffffffffff040000002c0000002bd5010000000000fcffffff" +"ffffffff040000001800000044d5010000000000fcffffffffffffff0400" +"0000190000005fd5010000000000fcffffffffffffff0400000018000000" +"77d5010000000000fcffffffffffffff04000000180000008fd501000000" +"0000fcffffffffffffff0400000019000000a5d5010000000000fcffffff" +"ffffffff0400000006000000bcd5010000000000fcffffffffffffff0400" +"000006000000cdd5010000000000fcffffffffffffff0400000016000000" +"e0d5010000000000fcffffffffffffff0400000016000000f8d501000000" +"0000fcffffffffffffff040000000600000046d6010000000000fcffffff" +"ffffffff040000001600000055d6010000000000fcffffffffffffff0400" +"00001b00000075d6010000000000fcffffffffffffff0400000004000000" +"8bd6010000000000fcffffffffffffff0400000035000000bbd601000000" +"0000fcffffffffffffff040000000400000052d7010000000000fcffffff" +"ffffffff040000001800000073d7010000000000fcffffffffffffff0400" +"0000180000009ed7010000000000fcffffffffffffff0400000018000000" +"b6d7010000000000fcffffffffffffff0400000019000000cdd701000000" +"0000fcffffffffffffff0400000019000000e3d7010000000000fcffffff" +"ffffffff0400000018000000fbd7010000000000fcffffffffffffff0400" +"00001900000012d8010000000000fcffffffffffffff040000002c000000" +"2bd8010000000000fcffffffffffffff040000001900000045d801000000" +"0000fcffffffffffffff04000000190000005bd8010000000000fcffffff" +"ffffffff040000001800000074d8010000000000fcffffffffffffff0400" +"0000190000008bd8010000000000fcffffffffffffff040000002c000000" +"a5d8010000000000fcffffffffffffff0400000019000000bfd801000000" +"0000fcffffffffffffff0400000019000000d5d8010000000000fcffffff" +"ffffffff0400000018000000efd8010000000000fcffffffffffffff0400" +"00001900000007d9010000000000fcffffffffffffff040000002c000000" +"1ed9010000000000fcffffffffffffff040000001900000036d901000000" +"0000fcffffffffffffff04000000190000004bd9010000000000fcffffff" +"ffffffff04000000190000005dd9010000000000fcffffffffffffff0400" +"00001900000070d9010000000000fcffffffffffffff0400000019000000" +"87d9010000000000fcffffffffffffff0400000019000000a3d901000000" +"0000fcffffffffffffff0400000019000000bdd9010000000000fcffffff" +"ffffffff040000002c000000d5d9010000000000fcffffffffffffff0400" +"000019000000ecd9010000000000fcffffffffffffff0400000019000000" +"fed9010000000000fcffffffffffffff040000001900000015da01000000" +"0000fcffffffffffffff04000000190000002dda010000000000fcffffff" +"ffffffff040000001800000045da010000000000fcffffffffffffff0400" +"00001800000059da010000000000fcffffffffffffff040000002c000000" +"71da010000000000fcffffffffffffff04000000180000008bda01000000" +"0000fcffffffffffffff04000000180000009eda010000000000fcffffff" +"ffffffff0400000019000000b7da010000000000fcffffffffffffff0400" +"000018000000d0da010000000000fcffffffffffffff0400000018000000" +"e2da010000000000fcffffffffffffff040000001900000012db01000000" +"0000fcffffffffffffff0400000004000000cadd010000000000fcffffff" +"ffffffff040000000c000000c9df010000000000fcffffffffffffff0400" +"00000c00000075e0010000000000fcffffffffffffff0400000057000000" +"69e1010000000000fcffffffffffffff040000000300000078e101000000" +"0000fcffffffffffffff040000000400000040e3010000000000fcffffff" +"ffffffff040000000c0000001ae4010000000000fcffffffffffffff0400" +"00005700000077e4010000000000fcffffffffffffff040000000c000000" +"dde8010000000000fcffffffffffffff04000000580000007eec01000000" +"0000fcffffffffffffff0400000057000000d9f2010000000000fcffffff" +"ffffffff0400000057000000bbf6010000000000fcffffffffffffff0400" +"00000c0000000cf7010000000000fcffffffffffffff0400000057000000" +"34fa010000000000fcffffffffffffff04000000030000004cfa01000000" +"0000fcffffffffffffff0400000004000000f0fb010000000000fcffffff" +"ffffffff040000005900000014fc010000000000fcffffffffffffff0400" +"00000400000048fe010000000000fcffffffffffffff0400000004000000" +"3900020000000000fcffffffffffffff0400000004000000190302000000" +"0000fcffffffffffffff04000000040000000704020000000000fcffffff" +"ffffffff04000000040000004105020000000000fcffffffffffffff0200" +"00005a000000c305020000000000fcffffffffffffff040000000a000000" +"af0d020000000000fcffffffffffffff0400000018000000c40d02000000" +"0000fcffffffffffffff0400000006000000f20d020000000000fcffffff" +"ffffffff0400000004000000eb0e020000000000fcffffffffffffff0400" +"0000060000002d0f020000000000fcffffffffffffff0400000004000000" +"b30f020000000000fcffffffffffffff0400000018000000c50f02000000" +"0000fcffffffffffffff0400000006000000f20f020000000000fcffffff" +"ffffffff04000000040000008124020000000000fcffffffffffffff0400" +"00004f000000d925020000000000fcffffffffffffff0400000004000000" +"7d26020000000000fcffffffffffffff0400000006000000dc2602000000" +"0000fcffffffffffffff0400000004000000f826020000000000fcffffff" +"ffffffff04000000170000000a27020000000000fcffffffffffffff0400" +"0000060000005a27020000000000fcffffffffffffff0400000018000000" +"6e27020000000000fcffffffffffffff0400000006000000ac2702000000" +"0000fcffffffffffffff0400000006000000e027020000000000fcffffff" +"ffffffff04000000040000005828020000000000fcffffffffffffff0400" +"0000160000006728020000000000fcffffffffffffff040000001b000000" +"8728020000000000fcffffffffffffff0400000004000000e22802000000" +"0000fcffffffffffffff0400000016000000f528020000000000fcffffff" +"ffffffff040000001b0000001329020000000000fcffffffffffffff0400" +"000004000000d132020000000000fcffffffffffffff040000004f000000" +"0933020000000000fcffffffffffffff0400000004000000a53602000000" +"0000fcffffffffffffff0400000016000000ba36020000000000fcffffff" +"ffffffff0400000006000000c338020000000000fcffffffffffffff0400" +"00004f000000f138020000000000fcffffffffffffff0400000004000000" +"e03a020000000000fcffffffffffffff0400000019000000113b02000000" +"0000fcffffffffffffff0400000004000000f33b020000000000fcffffff" +"ffffffff040000004f000000243c020000000000fcffffffffffffff0400" +"000004000000373c020000000000fcffffffffffffff0400000018000000" +"4c3c020000000000fcffffffffffffff0400000018000000843c02000000" +"0000fcffffffffffffff04000000040000009c3c020000000000fcffffff" +"ffffffff0400000006000000be3c020000000000fcffffffffffffff0400" +"000026000000d13c020000000000fcffffffffffffff0400000006000000" +"153d020000000000fcffffffffffffff04000000060000004d3d02000000" +"0000fcffffffffffffff0400000004000000e33d020000000000fcffffff" +"ffffffff0400000016000000f73d020000000000fcffffffffffffff0400" +"000016000000103e020000000000fcffffffffffffff0400000006000000" +"2a3e020000000000fcffffffffffffff0400000006000000693e02000000" +"0000fcffffffffffffff04000000340000007c3e020000000000fcffffff" +"ffffffff0400000006000000933e020000000000fcffffffffffffff0400" +"000031000000a63e020000000000fcffffffffffffff0400000006000000" +"b63e020000000000fcffffffffffffff0400000020000000c93e02000000" +"0000fcffffffffffffff0400000006000000dd3e020000000000fcffffff" +"ffffffff04000000060000000d3f020000000000fcffffffffffffff0400" +"000004000000c440020000000000fcffffffffffffff0400000006000000" +"e440020000000000fcffffffffffffff0400000006000000284202000000" +"0000fcffffffffffffff04000000040000009e42020000000000fcffffff" +"ffffffff0400000016000000b342020000000000fcffffffffffffff0400" +"000006000000db42020000000000fcffffffffffffff0400000016000000" +"ee42020000000000fcffffffffffffff04000000060000002a4302000000" +"0000fcffffffffffffff0400000004000000c243020000000000fcffffff" +"ffffffff0400000006000000d943020000000000fcffffffffffffff0400" +"000016000000ed43020000000000fcffffffffffffff0400000006000000" +"0144020000000000fcffffffffffffff0400000016000000734502000000" +"0000fcffffffffffffff0400000006000000a145020000000000fcffffff" +"ffffffff04000000040000003946020000000000fcffffffffffffff0400" +"0000260000005746020000000000fcffffffffffffff0400000026000000" +"7946020000000000fcffffffffffffff04000000260000009f4602000000" +"0000fcffffffffffffff040000002c000000b846020000000000fcffffff" +"ffffffff0400000019000000d146020000000000fcffffffffffffff0400" +"000019000000ec46020000000000fcffffffffffffff0400000019000000" +"0647020000000000fcffffffffffffff04000000190000001c4702000000" +"0000fcffffffffffffff04000000190000003347020000000000fcffffff" +"ffffffff04000000190000004d47020000000000fcffffffffffffff0400" +"0000190000006647020000000000fcffffffffffffff0400000026000000" +"7547020000000000fcffffffffffffff040000002c0000008f4702000000" +"0000fcffffffffffffff040000002c000000a947020000000000fcffffff" +"ffffffff040000002c000000c647020000000000fcffffffffffffff0400" +"00002c000000da47020000000000fcffffffffffffff0400000026000000" +"ee47020000000000fcffffffffffffff0400000019000000064802000000" +"0000fcffffffffffffff04000000190000003648020000000000fcffffff" +"ffffffff0400000004000000c351020000000000fcffffffffffffff0400" +"00004f000000fb51020000000000fcffffffffffffff0400000004000000" +"8c52020000000000fcffffffffffffff0400000025000000a55202000000" +"0000fcffffffffffffff0400000025000000cb52020000000000fcffffff" +"ffffffff040000002c000000f352020000000000fcffffffffffffff0400" +"0000190000000553020000000000fcffffffffffffff0400000019000000" +"2253020000000000fcffffffffffffff0400000019000000355302000000" +"0000fcffffffffffffff04000000190000004b53020000000000fcffffff" +"ffffffff04000000190000006653020000000000fcffffffffffffff0400" +"0000250000007853020000000000fcffffffffffffff0400000006000000" +"ac53020000000000fcffffffffffffff0400000004000000c35302000000" +"0000fcffffffffffffff040000002c000000da53020000000000fcffffff" +"ffffffff040000002c0000001354020000000000fcffffffffffffff0400" +"0000040000003054020000000000fcffffffffffffff040000002c000000" +"4754020000000000fcffffffffffffff040000002c0000005a5402000000" +"0000fcffffffffffffff0400000006000000ff54020000000000fcffffff" +"ffffffff040000002c0000001455020000000000fcffffffffffffff0400" +"00002c0000002655020000000000fcffffffffffffff0400000006000000" +"5455020000000000fcffffffffffffff0400000004000000fb5502000000" +"0000fcffffffffffffff04000000250000001856020000000000fcffffff" +"ffffffff04000000250000002e56020000000000fcffffffffffffff0400" +"0000250000004b56020000000000fcffffffffffffff0400000019000000" +"7056020000000000fcffffffffffffff0400000019000000885602000000" +"0000fcffffffffffffff0400000025000000a356020000000000fcffffff" +"ffffffff040000002c000000d356020000000000fcffffffffffffff0400" +"00002c000000eb56020000000000fcffffffffffffff040000002c000000" +"0d57020000000000fcffffffffffffff040000002c000000255702000000" +"0000fcffffffffffffff04000000190000003f57020000000000fcffffff" +"ffffffff04000000190000005857020000000000fcffffffffffffff0400" +"0000190000007157020000000000fcffffffffffffff0400000019000000" +"8a57020000000000fcffffffffffffff0400000019000000a15702000000" +"0000fcffffffffffffff0400000019000000c357020000000000fcffffff" +"ffffffff0400000019000000d957020000000000fcffffffffffffff0400" +"000019000000ef57020000000000fcffffffffffffff0400000025000000" +"0d58020000000000fcffffffffffffff0400000025000000325802000000" +"0000fcffffffffffffff040000002c0000005758020000000000fcffffff" +"ffffffff040000002c0000006b58020000000000fcffffffffffffff0400" +"00002c0000007f58020000000000fcffffffffffffff040000002c000000" +"9858020000000000fcffffffffffffff0400000006000000b15802000000" +"0000fcffffffffffffff0400000019000000cc58020000000000fcffffff" +"ffffffff0400000019000000d958020000000000fcffffffffffffff0400" +"000025000000ee58020000000000fcffffffffffffff040000002c000000" +"0859020000000000fcffffffffffffff040000002c000000195902000000" +"0000fcffffffffffffff040000002c0000002e59020000000000fcffffff" +"ffffffff040000002c0000004259020000000000fcffffffffffffff0400" +"0000060000005959020000000000fcffffffffffffff040000002c000000" +"6d59020000000000fcffffffffffffff040000002c0000007e5902000000" +"0000fcffffffffffffff04000000260000009159020000000000fcffffff" +"ffffffff0400000006000000a959020000000000fcffffffffffffff0400" +"000019000000c259020000000000fcffffffffffffff0400000019000000" +"d959020000000000fcffffffffffffff0400000019000000f15902000000" +"0000fcffffffffffffff04000000190000000a5a020000000000fcffffff" +"ffffffff0400000019000000215a020000000000fcffffffffffffff0400" +"0000190000006f5a020000000000fcffffffffffffff040000002c000000" +"815a020000000000fcffffffffffffff040000002c000000935a02000000" +"0000fcffffffffffffff0400000006000000b75a020000000000fcffffff" +"ffffffff0400000004000000d15a020000000000fcffffffffffffff0400" +"000026000000e85a020000000000fcffffffffffffff0400000019000000" +"025b020000000000fcffffffffffffff0400000019000000195b02000000" +"0000fcffffffffffffff04000000280000002d5b020000000000fcffffff" +"ffffffff0400000025000000425b020000000000fcffffffffffffff0400" +"00002c000000585b020000000000fcffffffffffffff040000002c000000" +"715b020000000000fcffffffffffffff040000002c0000008b5b02000000" +"0000fcffffffffffffff040000002c000000a35b020000000000fcffffff" +"ffffffff0400000019000000bb5b020000000000fcffffffffffffff0400" +"000019000000cf5b020000000000fcffffffffffffff0400000019000000" +"e15b020000000000fcffffffffffffff0400000019000000f55b02000000" +"0000fcffffffffffffff040000002c000000075c020000000000fcffffff" +"ffffffff040000002c0000001a5c020000000000fcffffffffffffff0400" +"000026000000325c020000000000fcffffffffffffff0400000019000000" +"485c020000000000fcffffffffffffff0400000019000000615c02000000" +"0000fcffffffffffffff0400000006000000785c020000000000fcffffff" +"ffffffff0400000006000000925c020000000000fcffffffffffffff0400" +"000051000000cb5c020000000000fcffffffffffffff0400000004000000" +"8d5d020000000000fcffffffffffffff0400000005000000e55d02000000" +"0000fcffffffffffffff0400000006000000885e020000000000fcffffff" +"ffffffff0400000003000000945e020000000000fcffffffffffffff0400" +"000004000000ae5e020000000000fcffffffffffffff0400000004000000" +"d15e020000000000fcffffffffffffff040000005b0000006c6002000000" +"0000fcffffffffffffff04000000590000009160020000000000fcffffff" +"ffffffff0400000004000000e261020000000000fcffffffffffffff0400" +"0000040000007062020000000000fcffffffffffffff0400000004000000" +"9862020000000000fcffffffffffffff040000005c000000e26202000000" +"0000fcffffffffffffff04000000040000008669020000000000fcffffff" +"ffffffff0400000004000000a869020000000000fcffffffffffffff0400" +"00005c0000001f6a020000000000fcffffffffffffff040000005b000000" +"ed6a020000000000fcffffffffffffff04000000590000000b6b02000000" +"0000fcffffffffffffff0400000004000000216c020000000000fcffffff" +"ffffffff0400000004000000476c020000000000fcffffffffffffff0400" +"000004000000"; + +} // namespace test +} // namespace ripple diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp new file mode 100644 index 00000000000..1b44985d6ff --- /dev/null +++ b/src/test/app/Wasm_test.cpp @@ -0,0 +1,1193 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { +namespace test { + +extern std::string const p0Hex; +extern std::string const p1Hex; +extern std::string const p2Hex; +extern std::string const p4Hex; +extern std::string const p5Hex; +extern std::string const zkProofHex; +extern std::string const zkAotHex; +extern std::string const sha512Hex; +extern std::string const fib32Hex; +extern std::string const fib64Hex; + +extern std::string sha512PureHex; +extern std::string b58Hex; + +extern std::string const tx_js; +extern std::string const lo_js; + +struct Wasm_test : public beast::unit_test::suite +{ + void + testEscrowWasmP0() + { + testcase("escrow wasm P0 test"); + + auto const wasmStr = boost::algorithm::unhex(p0Hex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + std::string const funcName("mock_escrow"); + + auto re = runEscrowWasm(wasm, funcName, 15); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(re.value()); + + re = runEscrowWasm(wasm, funcName, 11); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(!re.value()); + } + + void + testBadWasm() + { + testcase("bad wasm test"); + std::string const wasmHex = "00000000"; + auto wasmStr = boost::algorithm::unhex(wasmHex); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + std::string funcName("mock_escrow"); + auto re = runEscrowWasm(wasm, funcName, 15); + BEAST_EXPECT(re.error()); + } + + void + testEscrowWasmP1() + { + testcase("escrow wasm P1 test"); + + auto const wasmStr = boost::algorithm::unhex(p1Hex); + std::vector const wasm(wasmStr.begin(), wasmStr.end()); + std::string const funcName("check_accountID"); + { + std::string str = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"; + std::vector data(str.begin(), str.end()); + auto re = runEscrowWasm(wasm, funcName, data); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(re.value()); + } + { + std::string str = "rHb9CJAWyB4rj91VRWn96DkukG4bwdty00"; + std::vector data(str.begin(), str.end()); + auto re = runEscrowWasm(wasm, funcName, data); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(!re.value()); + } + } + + void + testEscrowWasmP2P3() + { + testcase("escrow wasm P2 & P3 test"); + + auto wasmStr = boost::algorithm::unhex(p2Hex); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + std::string funcName("compare_accountID"); + + std::string escrow_tx_json_str = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Fee" : "10", + "Flags" : 2147483648, + "OfferSequence" : 2, + "Owner" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Sequence" : 3, + "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType" : "EscrowFinish", + "TxnSignature" : "30450221008AD5EE48F7F1047813E79C174FE401D023A4B4A7B99AF826E081DB1DFF7B9C510220133F05B7FD3D7D7F163E8C77EE0A49D02619AB6C77CC3487D0095C9B34033C1C", + "hash" : "74465121372813CBA4C77E31F12E137163F5B2509B16AC1703ECF0DA194B2DD4" + })"; + + std::vector escrow_tx_json_data( + escrow_tx_json_str.begin(), escrow_tx_json_str.end()); + { + std::string escrow_lo_json_str = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Amount" : "100000", + "CancelAfter" : 790297421, + "Destination" : "rBYn44yhs8cf8G2t79XMUHYQpp2ayhqwcw", + "DestinationNode" : "0", + "FinishAfter" : 790297403, + "FinishFunction" : "0061736D0100000001180460027F7F0060017F017F60027F7F017F60047F7F7F7F00030C0B01010200000000000003000405017001030305030100110619037F01418080C0000B7F0041DD85C0000B7F0041E085C0000B074205066D656D6F7279020008616C6C6F6361746500000F636865636B5F6163636F756E74494400020A5F5F646174615F656E6403010B5F5F686561705F6261736503020908010041010B02060A0AF5360B610002", + "Flags" : 0, + "LedgerEntryType" : "Escrow", + "OwnerNode" : "0", + "PreviousTxnID" : "CF25D1C6B8E637C7DAC61B586F820A16896A3090D9F6FBF9FA00D8B13A265647", + "PreviousTxnLgrSeq" : 4, + "index" : "9BC6631F3EC761CF9BD846D006560E2D57B0A5C91D4570AEB209645B189A702F" + })"; + + std::vector const escrow_lo_json_data( + escrow_lo_json_str.begin(), escrow_lo_json_str.end()); + auto re = runEscrowWasm( + wasm, funcName, escrow_tx_json_data, escrow_lo_json_data); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(re.value()); + } + + { + std::string escrow_lo_json_str = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdty00", + "Amount" : "100000", + "CancelAfter" : 790297421, + "Destination" : "rBYn44yhs8cf8G2t79XMUHYQpp2ayhqwcw", + "DestinationNode" : "0", + "FinishAfter" : 790297403, + "FinishFunction" : "0061736D0100000001180460027F7F0060017F017F60027F7F017F60047F7F7F7F00030C0B01010200000000000003000405017001030305030100110619037F01418080C0000B7F0041DD85C0000B7F0041E085C0000B074205066D656D6F7279020008616C6C6F6361746500000F636865636B5F6163636F756E74494400020A5F5F646174615F656E6403010B5F5F686561705F6261736503020908010041010B02060A0AF5360B610002", + "Flags" : 0, + "LedgerEntryType" : "Escrow", + "OwnerNode" : "0", + "PreviousTxnID" : "CF25D1C6B8E637C7DAC61B586F820A16896A3090D9F6FBF9FA00D8B13A265647", + "PreviousTxnLgrSeq" : 4, + "index" : "9BC6631F3EC761CF9BD846D006560E2D57B0A5C91D4570AEB209645B189A702F" + })"; + + std::vector escrow_lo_json_data( + escrow_lo_json_str.begin(), escrow_lo_json_str.end()); + auto re = runEscrowWasm( + wasm, funcName, escrow_tx_json_data, escrow_lo_json_data); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(!re.value()); + } + } + + void + testEscrowWasmP4() + { + testcase("escrow wasm P4 test"); + + auto wasmStr = boost::algorithm::unhex(p4Hex); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + std::string funcName("compare_accountID"); + + std::string escrow_tx_json_str = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Fee" : "10", + "Flags" : 2147483648, + "OfferSequence" : 2, + "Owner" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Sequence" : 3, + "SigningPubKey" : "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020", + "TransactionType" : "EscrowFinish", + "TxnSignature" : "30450221008AD5EE48F7F1047813E79C174FE401D023A4B4A7B99AF826E081DB1DFF7B9C510220133F05B7FD3D7D7F163E8C77EE0A49D02619AB6C77CC3487D0095C9B34033C1C", + "hash" : "74465121372813CBA4C77E31F12E137163F5B2509B16AC1703ECF0DA194B2DD4" + })"; + + std::vector escrow_tx_json_data( + escrow_tx_json_str.begin(), escrow_tx_json_str.end()); + + { + std::string escrow_lo_json_str = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Amount" : "100000", + "CancelAfter" : 790297421, + "Destination" : "rBYn44yhs8cf8G2t79XMUHYQpp2ayhqwcw", + "DestinationNode" : "0", + "FinishAfter" : 790297403, + "FinishFunction" : "0061736D0100000001180460027F7F0060017F017F60027F7F017F60047F7F7F7F00030C0B01010200000000000003000405017001030305030100110619037F01418080C0000B7F0041DD85C0000B7F0041E085C0000B074205066D656D6F7279020008616C6C6F6361746500000F636865636B5F6163636F756E74494400020A5F5F646174615F656E6403010B5F5F686561705F6261736503020908010041010B02060A0AF5360B610002", + "Flags" : 0, + "LedgerEntryType" : "Escrow", + "OwnerNode" : "0", + "PreviousTxnID" : "CF25D1C6B8E637C7DAC61B586F820A16896A3090D9F6FBF9FA00D8B13A265647", + "PreviousTxnLgrSeq" : 4, + "index" : "9BC6631F3EC761CF9BD846D006560E2D57B0A5C91D4570AEB209645B189A702F", + "Data" : "02" + })"; + + std::vector const escrow_lo_json_data( + escrow_lo_json_str.begin(), escrow_lo_json_str.end()); + + auto re = runEscrowWasmP4( + wasm, funcName, escrow_tx_json_data, escrow_lo_json_data); + if (BEAST_EXPECT(re.has_value())) + { + auto reValue = re.value(); + // std::cout << reValue.first << " " << + // reValue.second + // << std::endl; + BEAST_EXPECT(!reValue.first); + BEAST_EXPECT(reValue.second == "1"); + } + } + + { + std::string escrow_lo_json_str = R"({ + "Account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Amount" : "100000", + "CancelAfter" : 790297421, + "Destination" : "rBYn44yhs8cf8G2t79XMUHYQpp2ayhqwcw", + "DestinationNode" : "0", + "FinishAfter" : 790297403, + "FinishFunction" : "0061736D0100000001180460027F7F0060017F017F60027F7F017F60047F7F7F7F00030C0B01010200000000000003000405017001030305030100110619037F01418080C0000B7F0041DD85C0000B7F0041E085C0000B074205066D656D6F7279020008616C6C6F6361746500000F636865636B5F6163636F756E74494400020A5F5F646174615F656E6403010B5F5F686561705F6261736503020908010041010B02060A0AF5360B610002", + "Flags" : 0, + "LedgerEntryType" : "Escrow", + "OwnerNode" : "0", + "PreviousTxnID" : "CF25D1C6B8E637C7DAC61B586F820A16896A3090D9F6FBF9FA00D8B13A265647", + "PreviousTxnLgrSeq" : 4, + "index" : "9BC6631F3EC761CF9BD846D006560E2D57B0A5C91D4570AEB209645B189A702F", + "Data" : "1" + })"; + + std::vector const escrow_lo_json_data( + escrow_lo_json_str.begin(), escrow_lo_json_str.end()); + auto re = runEscrowWasmP4( + wasm, funcName, escrow_tx_json_data, escrow_lo_json_data); + if (BEAST_EXPECT(re.has_value())) + { + auto reValue = re.value(); + // std::cout << reValue.first << " " << + // reValue.second + // << std::endl; + BEAST_EXPECT(reValue.first); + BEAST_EXPECT(reValue.second == "0"); + } + } + } + + void + testEscrowWasmP5() + { + testcase("escrow wasm P5 test"); + + auto wasmStr = boost::algorithm::unhex(p5Hex); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + + using namespace test::jtx; + struct TestLedgerDataProvider : public LedgerDataProvider + { + Env* env; + + public: + TestLedgerDataProvider(Env* env) : env(env) + { + } + + int32_t + get_ledger_sqn() override + { + return (int32_t)env->current()->seq(); + } + }; + Env env{*this}; + TestLedgerDataProvider ledgerDataProvider(&env); + std::string const funcName("ready"); + + auto re = runEscrowWasm(wasm, funcName, &ledgerDataProvider); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(!re.value()); + + env.close(); + env.close(); + env.close(); + env.close(); + + re = runEscrowWasm(wasm, funcName, &ledgerDataProvider); + if (BEAST_EXPECT(re.has_value())) + BEAST_EXPECT(re.value()); + } + + void + run() override + { + using namespace test::jtx; + + for (int i = 0; i < static_cast(wasmEngines::END); ++i) + { + setWasmEngine(static_cast(i)); + std::cout << "===========\nEngine: " + << engineName(static_cast(i)) + << "\n===========" << std::endl; + testEscrowWasmP0(); + testBadWasm(); + testEscrowWasmP1(); + testEscrowWasmP2P3(); + testEscrowWasmP4(); + testEscrowWasmP5(); + } + } +}; + +inline uint64_t +usecs() +{ + uint64_t x = + std::chrono::duration_cast( + std::chrono::high_resolution_clock::now().time_since_epoch()) + .count(); + return x; +} + +static const std::string testNames[] = { + "AddModule", "AddInstance", "Run P4", + "JustRunP4", "RunHostFunc", "Fib x32", + "Fib x64", "AddBigModule", "RunSha", + "RunShaLarge", "JustRunP4 meter", "RunHostFunc meter", + "Fib x64 meter", "RunShaLarge meter", "ZKProof", + "ZKProof", "ZKProof aot", "ZKProof aot", + "Fibx64 small", "Sha512 small", "Base58 small", +}; + +class WasmPerf_test : public beast::unit_test::suite +{ + static const int TESTS_N = 30; + static const int ENGINES_N = wasmEngines::END; + static const int ADD_MOD_N = 1000; + + static const int FIB_N = 5; + +#ifdef _DEBUG + static const int ADD_MOD_SMALL_N = 10; + static const int FIB_VAL_32 = 20; + static const int FIB_VAL_64 = 30; + static const int BIG_MOD_N = 10; + static const int SHA_N = 30; + static const int BIG_SHA_N = 3; + static const int GAS_N = 50; + static const int ZKP_N = 30; +#else + static const int ADD_MOD_SMALL_N = ADD_MOD_N; + static const int FIB_VAL_32 = 35; + static const int FIB_VAL_64 = 40; // 48; + static const int BIG_MOD_N = 30; + static const int SHA_N = 500; + static const int BIG_SHA_N = 20; + static const int GAS_N = 500; + static const int ZKP_N = 200; +#endif + + static const int GAS_CHECK_N = 15; + static const int FIB_VAL_GAS_CHECK = 10; + + // testcase, engine, iteration + std::vector>> testTimes; + + inline static std::string + wname(wasmEngines ei) + { + return std::string(engineName(static_cast(ei))); + } + + void + ptest0( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + + "), cold, meter: " + std::to_string(meter); + testcase(s); + + auto& times(testTimes[tnum][ei]); + + if (meter) + e.setMeter(); + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + if (meter && ei == wasmEngines::Er) + e.setMeter(); + // if (!(i % 50)) + // e.clearModules(); + auto const midx = e.addModule(wasm); + times[i + 1] = usecs(); + if (!BEAST_EXPECT(midx >= 0)) + { + std::cout << "Error loading module " << i << std::endl; + return; + } + } + + BEAST_EXPECT(times[inum] > 0); + } + + // void ptest_1_AddInstance(wasmEngines ei, WasmEngine& e) + void + ptest1( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + "), hot"; + testcase(s); + + auto& times(testTimes[tnum][ei]); + + int iidx = 0; + int const midx = e.addModule(wasm); + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + iidx = e.addInstance(midx); + if (!BEAST_EXPECT(iidx >= 0)) + { + std::cout << "Error creating module " << i << std::endl; + return; + } + times[i + 1] = usecs(); + } + + BEAST_EXPECT(times[inum] > 0); + BEAST_EXPECT(iidx == inum); + } + + void + ptest2( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + std::string const& d1, + std::string const& d2) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + "), cold"; + testcase(s); + + auto& times(testTimes[tnum][ei]); + + std::vector tx(d1.begin(), d1.end()); + std::vector const lo(d2.begin(), d2.end()); + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + auto const r = e.runP4(wasm, fname, tx, lo); + times[i + 1] = usecs(); + + if (!BEAST_EXPECT(r.has_value() && r.value().second == "1")) + return; + } + + BEAST_EXPECT(times[inum] > 0); + } + + void + ptest3( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + std::string const& d1, + std::string const& d2, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + "), hot"; + testcase(s); + + auto& times(testTimes[tnum][ei]); + + std::vector tx(d1.begin(), d1.end()); + std::vector const lo(d2.begin(), d2.end()); + + if (meter) + e.setMeter(); + int midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + std::int64_t sgas = 0; + std::int64_t cgas = 0; + if (meter) + cgas = sgas = e.getRemainingGas(midx); + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + auto const r = e.justRunP4(fname, tx, lo, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(r.value().second == "1"); + if (meter) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas in cycle: " << cgas - egas << std::endl; + cgas = egas; + // BEAST_EXPECT(gas > 100); + } + } + + BEAST_EXPECT(times[inum] > 0); + + if (meter) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas overall: " << sgas - egas + << ", avg: " << (sgas - egas) / inum << std::endl; + } + } + + void + ptest4( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + "), hot"; + testcase(s); + + auto& times(testTimes[tnum][ei]); + + using namespace test::jtx; + struct TestLedgerDataProvider : public LedgerDataProvider + { + Env* env; + + public: + TestLedgerDataProvider(Env* env) : env(env) + { + } + + int32_t + get_ledger_sqn() override + { + return (int32_t)env->current()->seq(); + } + }; + Env env{*this}; + TestLedgerDataProvider ledgerDataProvider(&env); + + if (meter) + e.setMeter(); + auto re1 = e.preRun(wasm, &ledgerDataProvider); + + if (!re1.has_value() || re1.value() < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + int midx = re1.value(); + std::int64_t sgas = 0; + std::int64_t cgas = 0; + if (meter) + cgas = sgas = e.getRemainingGas(midx); + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + auto const r = e.justRun(fname, &ledgerDataProvider, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(!r.value()); + if (meter) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas in cycle: " << cgas - egas << std::endl; + cgas = egas; + // BEAST_EXPECT(gas > 100); + } + } + + BEAST_EXPECT(times[inum] > 0); + + if (meter) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas overall: " << sgas - egas + << ", avg: " << (sgas - egas) / inum << std::endl; + } + + // env.close(); + // env.close(); + // env.close(); + // env.close(); + + // re = runEscrowWasm(wasm, funcName, &ledgerDataProvider); + // if (BEAST_EXPECT(re.has_value())) + // BEAST_EXPECT(re.value()); + } + + void + ptest5( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + std::int32_t fibn) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + + "), p: " + std::to_string(fibn) + ", cold"; + testcase(s); + + auto& times(testTimes[tnum][ei]); + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + int midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + auto const r = e.runFunc(fname, fibn, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(r >= 0); + } + + BEAST_EXPECT(times[inum] > 0); + } + + void + ptest6( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + std::int64_t fibn, + bool coldRun, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + + "), p: " + std::to_string(fibn) + +(coldRun ? ", cold" : ", hot"); + testcase(s); + + auto& times(testTimes[tnum][ei]); + int midx = -1; + std::int64_t sgas = 0; + std::int64_t cgas = 0; + + if (meter) + e.setMeter(); + + if (!coldRun) + { + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + if (coldRun) + { + if (meter && ei == wasmEngines::Er) + e.setMeter(); + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + auto const r = e.runFunc64(fname, fibn, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(r >= 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas in cycle: " << cgas - egas << std::endl; + cgas = egas; + // BEAST_EXPECT(gas > 100); + } + } + + BEAST_EXPECT(times[inum] > 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas overall: " << sgas - egas + << ", avg: " << (sgas - egas) / inum << std::endl; + } + } + + void + ptest7( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view data, + bool coldRun, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + + "), p size: " + std::to_string(data.size()) + + (coldRun ? ", cold" : ", hot"); + testcase(s); + + auto& times(testTimes[tnum][ei]); + int midx = -1; + std::int64_t sgas = 0; + std::int64_t cgas = 0; + + if (meter) + e.setMeter(); + + if (!coldRun) + { + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + if (coldRun) + { + if (meter && ei == wasmEngines::Er) + e.setMeter(); + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + auto const r = e.runSha(data, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(r[0] > 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas in cycle: " << cgas - egas << std::endl; + cgas = egas; + // BEAST_EXPECT(gas > 100); + } + } + + BEAST_EXPECT(times[inum] > 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas overall: " << sgas - egas + << ", avg: " << (sgas - egas) / inum << std::endl; + } + } + + void + ptest8( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + bool coldRun, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + "), " + + (coldRun ? "cold" : "hot"); + testcase(s); + + auto& times(testTimes[tnum][ei]); + int midx = -1; + std::int64_t sgas = 0; + std::int64_t cgas = 0; + + if (meter) + e.setMeter(); + + if (!coldRun) + { + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + if (coldRun) + { + if (meter && ei == wasmEngines::Er) + e.setMeter(); + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + auto const r = e.justRun(fname, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(r.value() == 1); + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas in cycle: " << cgas - egas << std::endl; + cgas = egas; + // BEAST_EXPECT(gas > 100); + } + } + + BEAST_EXPECT(times[inum] > 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas overall: " << sgas - egas + << ", avg: " << (sgas - egas) / inum << std::endl; + } + } + + void + ptest9( + std::string name, + int tnum, + wasmEngines ei, + WasmEngine& e, + int inum, + const std::string& modHex, + std::string_view fname, + std::string_view data, + std::string& sv_res, + bool coldRun, + bool meter = false) + { + auto const ws = boost::algorithm::unhex(modHex); + vbytes const wasm(ws.begin(), ws.end()); + + std::cout << std::endl; + std::string s = name + "(" + std::to_string(tnum) + ") " + wname(ei) + + " mod size(" + std::to_string(wasm.size()) + + "), p size: " + std::to_string(data.size()) + + (coldRun ? ", cold" : ", hot"); + testcase(s); + + auto& times(testTimes[tnum][ei]); + int midx = -1; + std::int64_t sgas = 0; + std::int64_t cgas = 0; + + if (meter) + e.setMeter(); + + if (!coldRun) + { + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + times[0] = usecs(); + for (int i = 0; i < inum; ++i) + { + if (coldRun) + { + if (meter && ei == wasmEngines::Er) + e.setMeter(); + midx = e.addModule(wasm); + if (midx < 0) + { + std::cerr << "Failed to load module" << std::endl; + return; + } + + if (meter) + cgas = sgas = e.getRemainingGas(midx); + } + + auto const r = e.runEnc(fname, sv_res, data, midx); + times[i + 1] = usecs(); + + BEAST_EXPECT(r > 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas in cycle: " << cgas - egas << std::endl; + cgas = egas; + // BEAST_EXPECT(gas > 100); + } + } + + BEAST_EXPECT(times[inum] > 0); + + if (meter && (sgas > 0)) + { + auto const egas = e.getRemainingGas(midx); + std::cout << s << " Gas overall: " << sgas - egas + << ", avg: " << (sgas - egas) / inum << std::endl; + } + } + + void + ptest_Results() + { + std::cout << std::endl; + std::this_thread::sleep_for(std::chrono::seconds(1)); + std::cout << std::endl; + + for (int i = 0; i < TESTS_N; ++i) + { + for (int j = 0; j < ENGINES_N; ++j) + { + auto const& vi(testTimes[i][j]); + std::uint64_t avg, all; + int imin, imax; + avg = all = 0; + imin = imax = 1; + + int k = 1; + for (; (k < ADD_MOD_N + 1) && vi[k]; ++k) + { + auto const x = vi[k]; + auto const dn = x - vi[k - 1]; + auto const dmin = vi[imin] - vi[imin - 1]; + auto const dmax = vi[imax] - vi[imax - 1]; + if (dmin > dn) + imin = k; + if (dmax < dn) + imax = k; + all += dn; + } + + if (--k <= 0) + continue; + + avg = all / k; + + std::cout << "TEST: " << std::setw(25) << testNames[i] << "(" + << i << "), " << std::setw(5) << k + << " reps, ENGINE: " << std::setw(10) + << engineName(static_cast(j)); + if (all) + std::cout + << ", AVG: " << std::setw(9) << avg + << ", MIN: " << std::setw(9) << vi[imin] - vi[imin - 1] + << "(" << std::setw(4) << imin << ")" + << ", MAX: " << std::setw(9) << vi[imax] - vi[imax - 1] + << "(" << std::setw(4) << imax << ")" + << ", all: " << std::setw(9) << vi[k] - vi[0]; + else + std::cout << " SKIPPED"; + std::cout << std::endl; + } + } + } + +public: + void + + run() override + { +#ifdef __APPLE__ + std::cout + << "MACOS doesn't allow runtime code generation, JIT will be " + "disabled, the tests will be much slower than on Linux / Windows" + << std::endl; +#endif + + using namespace test::jtx; + + // initEngines(); + testTimes.resize(TESTS_N); + for (auto& ve : testTimes) + { + ve.resize(ENGINES_N); + for (auto& vi : ve) + vi.resize(ADD_MOD_N + 1); + } + + for (int e = 0; e < wasmEngines::END; ++e) + { + // clang-format off + // debug + //if ( + // (e == wasmEngines::Edge) + // || (e == wasmEngines::Time) + // (e != wasmEngines::Wamr) + // (e != wasmEngines::Er) + // || (e == wasmEngines::I) + //) continue; + // clang-format on + + setWasmEngine(static_cast(e)); + auto engine = WasmEngine::instance(); + + // update testNames + + // clang-format off + + // if (engine->isImplemented(0)) ptest0("AddModule", 0, static_cast(e), *engine, ADD_MOD_SMALL_N, p4Hex); engine->clearModules(); + // if (engine->isImplemented(1)) ptest1("AddInstance", 1, static_cast(e), *engine, ADD_MOD_N, p4Hex); engine->clearModules(); + // if (engine->isImplemented(2)) ptest2("Run P4", 2, static_cast(e), *engine, e ==wasmEngines::Wamr ? 50 : ADD_MOD_SMALL_N,p4Hex, "compare_accountID", tx_js, lo_js ); engine->clearModules(); + // if (engine->isImplemented(3)) ptest3("JustRunP4", 3, static_cast(e), *engine, ADD_MOD_N, p4Hex, "compare_accountID", tx_js, lo_js); engine->clearModules(); + // //if (engine->isImplemented(4)) ptest4("RunHostFunc", 4, static_cast(e), *engine, ADD_MOD_N, p5Hex, "ready"); engine->clearModules(); + // if (engine->isImplemented(5)) ptest5("Fib x32", 5, static_cast(e), *engine, 1, fib32Hex, "fib",FIB_VAL_32); engine->clearModules(); + // if (engine->isImplemented(6)) ptest6("Fib x64", 6, static_cast(e), *engine, 1, fib64Hex, "fib", FIB_VAL_64); engine->clearModules(); + // if (engine->isImplemented(7)) ptest0("AddBigModule", 7, static_cast(e), *engine, BIG_MOD_N, zkProofHex); engine->clearModules(); + + // // need add wasi support to engines. + // if (engine->isImplemented(8)) ptest7("RunSha", 8, static_cast(e), *engine, SHA_N, sha512Hex, p1Hex, true, false); engine->clearModules(); + // if (engine->isImplemented(9)) ptest7("RunShaLarge", 9, static_cast(e), *engine, BIG_SHA_N, sha512Hex, zkProofHex, false, false); engine->clearModules(); + + // PERF WITH GAS + // if (engine->isImplemented(10)) ptest3("JustRunP4 meter", 10, static_cast(e), *engine, GAS_N, p4Hex, "compare_accountID", tx_js, lo_js, true ); engine->clearModules(); + // //if (engine->isImplemented(11)) ptest4("RunHostFunc meter", 11, static_cast(e), *engine, ADD_MOD_N, p5Hex, "ready", true); engine->clearModules(); + // if (engine->isImplemented(12)) ptest6("Fib x64 meter", 12, static_cast(e), *engine, 1, fib64Hex, "fib", FIB_VAL_64, true); engine->clearModules(); + // if (engine->isImplemented(13)) ptest7("RunShaLarge meter", 13, static_cast(e), *engine, BIG_SHA_N, sha512Hex, zkProofHex, false, true); engine->clearModules(); + + // JUST GAS CHECK + // if (engine->isImplemented(10)) ptest3("JustRunP4 meter", 10, static_cast(e), *engine, GAS_CHECK_N, p4Hex, "compare_accountID", tx_js, lo_js, true ); engine->clearModules(); + // if (engine->isImplemented(12)) ptest6("Fib x64 meter", 12, static_cast(e), *engine, GAS_CHECK_N, fib64Hex, "fib", FIB_VAL_GAS_CHECK, true); engine->clearModules(); + // if (engine->isImplemented(13)) ptest7("RunShaLarge meter", 13, static_cast(e), *engine, GAS_CHECK_N, sha512Hex, false, fib32Hex, true); engine->clearModules(); + + + // ZK PROOF CHECK + //ptest8("ZKProof", 14, static_cast(e), *engine, 30, zkProofHex, "bellman_groth16_test", false); engine->clearModules(); + //ptest8("ZKProof", 15, static_cast(e), *engine, 20, zkProofHex, "bellman_groth16_test", true); engine->clearModules(); + //ptest8("ZKProof aot", 16, static_cast(e), *engine, 50, zkAotHex, "bellman_groth16_test", false); engine->clearModules(); + //ptest8("ZKProof aot", 17, static_cast(e), *engine, 50, zkAotHex, "bellman_groth16_test", true); engine->clearModules(); + + + // if (engine->isImplemented(0)) ptest0("AddModule", 0, static_cast(e), *engine, ADD_MOD_SMALL_N, fib64Hex, true); engine->clearModules(); + + //if (engine->isImplemented(18)) ptest6("Fib x64 small meter", 18, static_cast(e), *engine, GAS_CHECK_N, fib64Hex, "fib", FIB_VAL_GAS_CHECK, true, true); engine->clearModules(); + //if (engine->isImplemented(19)) ptest7("Sha512 small meter", 19, static_cast(e), *engine, GAS_CHECK_N, sha512PureHex, std::string_view(tx_js.data(), 128), true, true); engine->clearModules(); + std::string sv_res; + if (engine->isImplemented(20)) ptest9("Base58 small meter", 20, static_cast(e), *engine, GAS_CHECK_N, b58Hex, "b58enco", std::string_view(tx_js.data(), 128), sv_res, true, true); engine->clearModules(); + + static_assert(sizeof(testNames)/sizeof(testNames[0]) >= 20); + // clang-format ON + } + + ptest_Results(); + } +}; + +BEAST_DEFINE_TESTSUITE(Wasm, app, ripple); +BEAST_DEFINE_TESTSUITE(WasmPerf, app, ripple); + +} // namespace test +} // namespace ripple diff --git a/src/xrpld/app/misc/WamrVM.cpp b/src/xrpld/app/misc/WamrVM.cpp new file mode 100644 index 00000000000..9cc61cc0fc6 --- /dev/null +++ b/src/xrpld/app/misc/WamrVM.cpp @@ -0,0 +1,1188 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +////////////////////////////////////////////////////////////////////////////////////////// + +namespace { +static wasm_trap_t* +get_ledger_sqn(void* env, const wasm_val_vec_t*, wasm_val_vec_t* results) +{ + auto sqn = reinterpret_cast(env)->get_ledger_sqn(); + if (results->size) + { + results->data[0] = WASM_I32_VAL(sqn); + } + + return nullptr; +} + +static void +print_wasm_error(const char* message, wasm_trap_t* trap) +{ + fprintf(stderr, "error: %s\n", message); + wasm_byte_vec_t error_message; + + if (trap) + { + wamr_trap_message(trap, &error_message); + wamr_trap_delete(trap); + } + fprintf(stderr, "%.*s\n", (int)error_message.size, error_message.data); + wamr_byte_vec_delete(&error_message); +} + +// clang-format off +struct wsm_res +{ + wasm_val_vec_t r; + wsm_res(unsigned N = 0):r{0, nullptr, 0, 0, nullptr} {if (N) wamr_val_vec_new_uninitialized(&r, N);} + ~wsm_res() { if (r.size) wamr_val_vec_delete(&r); } + wsm_res(wsm_res const &) = delete; + wsm_res& operator=(wsm_res const &) = delete; + + wsm_res(wsm_res &&o) {*this = std::move(o);} + wsm_res& operator=(wsm_res &&o){r = o.r; o.r = {0, nullptr, 0, 0, nullptr}; return *this;} + //operator wasm_val_vec_t &() {return r;} +}; +// clang-format on + +using module_t = std::unique_ptr; +using mod_inst_t = + std::unique_ptr; + +struct my_mod_inst_t +{ + wasm_extern_vec_t exports; + mod_inst_t mod_inst; + +private: + static mod_inst_t + init( + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t* expt, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + { + wasm_trap_t* trap = nullptr; + mod_inst_t mi = mod_inst_t( + wamr_instance_new(s, m, &imports, &trap), &wamr_instance_delete); + if (!mi || trap) + { + print_wasm_error("can't create instance", trap); + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + ": can't create instance"); + } + wamr_instance_exports(mi.get(), expt); + return mi; + } + +public: + my_mod_inst_t() + : exports{0, nullptr, 0, 0, nullptr} + , mod_inst(nullptr, &wamr_instance_delete) + { + } + + my_mod_inst_t(my_mod_inst_t&& o) + : exports{0, nullptr, 0, 0, nullptr} + , mod_inst(nullptr, &wamr_instance_delete) + { + *this = std::move(o); + } + + my_mod_inst_t& + operator=(my_mod_inst_t&& o) + { + if (this == &o) + return *this; + + if (exports.size) + wamr_extern_vec_delete(&exports); + exports = o.exports; + o.exports = {0, nullptr, 0, 0, nullptr}; + + mod_inst = std::move(o.mod_inst); + + return *this; + } + + my_mod_inst_t( + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + : exports{0, nullptr, 0, 0, nullptr} + , mod_inst(init(s, m, &exports, imports)) + { + } + + ~my_mod_inst_t() + { + if (exports.size) + wamr_extern_vec_delete(&exports); + } + + operator bool() const + { + return static_cast(mod_inst); + } + + wasm_func_t* + getFunc( + std::string_view funcName, + wasm_exporttype_vec_t const& export_types) const + { + wasm_func_t* f = nullptr; + + if (!export_types.size) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + ": no export"); + if (export_types.size != exports.size) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + ": invalid export"); + + for (unsigned i = 0; i < export_types.size; ++i) + { + auto const* exp_type(export_types.data[i]); + + wasm_name_t const* name = wamr_exporttype_name(exp_type); + const wasm_externtype_t* exn_type = wamr_exporttype_type(exp_type); + if (wamr_externtype_kind(exn_type) == WASM_EXTERN_FUNC) + { + if (funcName == std::string_view(name->data, name->size - 1)) + { + auto* exn(exports.data[i]); + if (wamr_extern_kind(exn) != WASM_EXTERN_FUNC) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + ": invalid export"); + + f = wamr_extern_as_func(exn); + break; + } + } + } + + if (!f) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + ": can't find function " + std::string(funcName)); + + return f; + } + + vmem + getMem() const + { + wasm_memory_t* mem = nullptr; + for (unsigned i = 0; i < exports.size; ++i) + { + auto* e(exports.data[i]); + if (wamr_extern_kind(e) == WASM_EXTERN_MEMORY) + { + mem = wamr_extern_as_memory(e); + break; + } + } + + if (!mem) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + ": no memory exported"); + + return { + reinterpret_cast(wamr_memory_data(mem)), + wamr_memory_data_size(mem)}; + } +}; + +struct my_module_t +{ + module_t module; + std::vector mod_inst; + wasm_exporttype_vec_t export_types; + +private: + static module_t + init(wasm_store_t* s, vbytes const& wasmBin) + { + wasm_byte_vec_t const code{ + wasmBin.size(), + (char*)(wasmBin.data()), + wasmBin.size(), + sizeof(std::remove_reference_t::value_type), + nullptr}; + module_t m = module_t(wamr_module_new(s, &code), &wamr_module_delete); + return m; + } + +public: + my_module_t() + : module(nullptr, &wamr_module_delete) + , export_types{0, nullptr, 0, 0, nullptr} + { + } + + my_module_t(my_module_t&& o) + : module(nullptr, &wamr_module_delete) + , export_types{0, nullptr, 0, 0, nullptr} + { + *this = std::move(o); + } + + my_module_t& + operator=(my_module_t&& o) + { + if (this == &o) + return *this; + + module = std::move(o.module); + mod_inst = std::move(o.mod_inst); + if (export_types.size) + wamr_exporttype_vec_delete(&export_types); + export_types = o.export_types; + o.export_types = {0, nullptr, 0, 0, nullptr}; + return *this; + } + + my_module_t( + wasm_store_t* s, + vbytes const& wasmBin, + bool instantiate, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + : module(init(s, wasmBin)), export_types{0, nullptr, 0, 0, nullptr} + { + if (!module) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + " + can't create module"); + + wamr_module_exports(module.get(), &export_types); + if (instantiate) + mod_inst.emplace_back(s, module.get(), imports); + } + + ~my_module_t() + { + if (export_types.size) + wamr_exporttype_vec_delete(&export_types); + } + + wasm_func_t* + getFunc(std::string_view funcName, int i) const + { + return mod_inst[i].getFunc(funcName, export_types); + } + + vmem + getMem(int i) const + { + return mod_inst[i].getMem(); + } + + int + addInstance( + wasm_store_t* s, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + { + for (int i = 0, e = mod_inst.size(); i < e; ++i) + { + auto& ins(mod_inst[i]); + if (!ins) + { + ins = {s, module.get(), imports}; + return i; + } + } + mod_inst.emplace_back(s, module.get(), imports); + return static_cast(mod_inst.size()) - 1; + } + + int + delInstance(int i) + { + if (i >= mod_inst.size()) + return -1; + if (!mod_inst[i]) + mod_inst[i] = my_mod_inst_t(); + return i; + } +}; + +// struct scoped_instance +// { +// scoped_instance() +// }; + +} // namespace + +class WamrEngineImpl +{ + std::unique_ptr engine; + std::unique_ptr store; + std::vector modules; + wasm_trap_t* trap = nullptr; + +public: + WamrEngineImpl(); + ~WamrEngineImpl() = default; + + Expected + run(vbytes const& wasmCode, std::string_view funcName, int32_t input); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider); + + Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider); + + Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i); + + Expected + justRun(std::string_view funcName, int m, int i); + + int + addModule(vbytes const& wasmCode, bool instantiate); + void + clearModules() + { + modules.clear(); + store.reset(); // to free the memory before creating new store + store = {wamr_store_new(engine.get()), &wamr_store_delete}; + } + int + addInstance(int m); + + int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i); + + int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i); + + std::vector + runSha(std::string_view const data, int m, int i); + + int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i); + +protected: + int + makeModule( + vbytes const& wasmCode, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + + wasm_func_t* + getFunc(std::string_view funcName, int m, int i); + + vmem + getMem(int m, int i); + + void + add_param(std::vector& in, int32_t p); + void + add_param(std::vector& in, int64_t p); + + template + inline wsm_res + call(std::string_view func, int m, int i, Types... args); + + template + inline wsm_res + call(wasm_func_t* func, int m, int i, Types... args); + + template + inline wsm_res + call(wasm_func_t* f, int m, int i, std::vector& in); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args); +}; + +WamrEngineImpl::WamrEngineImpl() + : engine(wamr_engine_new(), &wamr_engine_delete) + , store(wamr_store_new(engine.get()), &wamr_store_delete) +{ + // wamr_runtime_set_default_running_mode(Mode_Interp); + wamr_runtime_set_log_level(WASM_LOG_LEVEL_FATAL); +} + +int +WamrEngineImpl::makeModule( + vbytes const& wasmCode, + wasm_extern_vec_t const& imports) +{ + modules.emplace_back(store.get(), wasmCode, true, imports); + return static_cast(modules.size()) - 1; +} + +int +WamrEngineImpl::addModule(vbytes const& wasmCode, bool instantiate) +{ + modules.emplace_back(store.get(), wasmCode, instantiate); + return static_cast(modules.size()) - 1; +} + +int +WamrEngineImpl::addInstance(int m) +{ + return modules[m].addInstance(store.get()); +} + +wasm_func_t* +WamrEngineImpl::getFunc(std::string_view funcName, int m, int i) +{ + return modules[m].getFunc(funcName, i); +} + +vmem +WamrEngineImpl::getMem(int m, int i) +{ + return modules[m].getMem(i); +} + +void +WamrEngineImpl::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 +WamrEngineImpl::add_param(std::vector& in, int64_t p) +{ + in.emplace_back(); + auto& el(in.back()); + el = WASM_I64_VAL(p); +} + +template +wsm_res +WamrEngineImpl::call(std::string_view func, int m, int i, Types... args) +{ + // Lookup our export function + auto* f = getFunc(func, m, i); + return call(f, m, i, std::forward(args)...); +} + +template +wsm_res +WamrEngineImpl::call(wasm_func_t* func, int m, int i, Types... args) +{ + std::vector in; + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WamrEngineImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in) +{ + // wasm_val_t rs[1] = {WASM_I32_VAL(0)}; + wsm_res ret(NR); + // if (NR) { wamr_val_vec_new_uninitialized(&ret, NR); // + // wamr_val_vec_new(&ret, NR, &rs[0]); // ret = WASM_ARRAY_VEC(rs); } + + wasm_val_vec_t const inv{ + in.size(), + in.data(), + in.size(), + sizeof(std::remove_reference_t::value_type), + nullptr}; + trap = wamr_func_call(func, &inv, &ret.r); + if (trap) + print_wasm_error("failed to call func", trap); + + // assert(results[0].kind == WASM_I32); + // if (NR) printf("Result P5: %d\n", ret[0].of.i32); + + return ret; +} + +template +wsm_res +WamrEngineImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WamrEngineImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WamrEngineImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args) +{ + auto res = call<1>(V_ALLOC, m, i, static_cast(sz)); + + if (trap || (res.r.data[0].kind != WASM_I32)) + return {}; + auto const ptr = res.r.data[0].of.i32; + if (!ptr) + throw std::runtime_error( + std::string(engineName(wasmEngines::Wamr)) + + " + can't allocate memory, " + std::to_string(sz) + " bytes"); + + auto mem = getMem(m, i); + memcpy(mem.p + ptr, d, sz); + + add_param(in, ptr); + add_param(in, static_cast(sz)); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WamrEngineImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args) +{ + return call( + func, m, i, in, p.data(), p.size(), std::forward(args)...); +} + +Expected +WamrEngineImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + // Call it! + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, input); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 != 0; +} + +Expected +WamrEngineImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, accountID); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 == 1; +} + +Expected +WamrEngineImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 == 1; +} + +Expected, TER> +WamrEngineImpl::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRunP4(funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); +} + +Expected, TER> +WamrEngineImpl::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + // return res.data[0].of.i32 == 1; + auto const ptr = res.r.data[0].of.i32; + std::uint8_t buf[16]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 9); + + auto const flag = buf[0]; + auto const ret_pointer = *reinterpret_cast(buf + 1); + auto const ret_len = *reinterpret_cast(buf + 5); + // printf("re flag %d, ptr %d, len %d\n", flag, ret_pointer, ret_len); + + vbytes buf2(ret_len); + memcpy(buf2.data(), mem.p + ret_pointer, ret_len); + + std::string newData(buf2.begin(), buf2.end()); + + call<0>(V_DEALLOC, m, i, ret_pointer, ret_len); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + call<0>(V_DEALLOC, m, i, ptr, 9); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + return std::pair(flag == 1, newData); +} + +Expected +WamrEngineImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wamr_valtype_new_i32()); + std::unique_ptr ftype( + wamr_functype_new_0_1(vtype), &wamr_functype_delete); + + wasm_func_t* func = wamr_func_new_with_env( + store.get(), ftype.get(), &get_ledger_sqn, ledgerDataProvider, nullptr); + + wasm_extern_t* arr[] = {wamr_func_as_extern(func)}; + wasm_extern_vec_t imports = WASM_ARRAY_VEC(arr); + int const m = makeModule(wasmCode, {imports}); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRun(funcName, ledgerDataProvider, m, i); +} + +Expected +WamrEngineImpl::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wamr_valtype_new_i32()); + std::unique_ptr ftype( + wamr_functype_new_0_1(vtype), &wamr_functype_delete); + + wasm_func_t* func = wamr_func_new_with_env( + store.get(), ftype.get(), &get_ledger_sqn, ledgerDataProvider, nullptr); + + wasm_extern_t* arr[] = {wamr_func_as_extern(func)}; + wasm_extern_vec_t imports = WASM_ARRAY_VEC(arr); + int const m = makeModule(wasmCode, {imports}); + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return m; +} + +Expected +WamrEngineImpl::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + if (!res.r.size || res.r.data[0].kind != WASM_I32 || trap) + return Unexpected(tecFAILED_PROCESSING); + + return res.r.data[0].of.i32; +} + +Expected +WamrEngineImpl::justRun(std::string_view funcName, int m, int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + if (!res.r.size || trap || res.r.data[0].kind != WASM_I32) + return Unexpected(tecFAILED_PROCESSING); + + return res.r.data[0].of.i32; +} + +int32_t +WamrEngineImpl::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (!res.r.size || trap) + return -1; + + return res.r.data[0].kind == WASM_I32 ? res.r.data[0].of.i32 : -1; +} + +int64_t +WamrEngineImpl::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (!res.r.size || trap) + return -1; + + return res.r.data[0].kind == WASM_I64 ? res.r.data[0].of.i64 : -1; +} + +std::vector +WamrEngineImpl::runSha(std::string_view const data, int m, int i) +{ + std::string_view funcName = "sha512_process"; + auto* f = getFunc(funcName, m, i); + auto res = call<1>( + f, m, i, reinterpret_cast(data.data()), data.size()); + if (!res.r.size || trap) + return {}; + + auto const ptr = res.r.data[0].of.i32; + std::uint64_t buf[8]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 8 * sizeof(std::uint64_t)); + return {&buf[0], &buf[8]}; +} + +int32_t +WamrEngineImpl::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + + sv_res.resize(1024); + auto resm = call<1>(V_ALLOC, m, i, static_cast(1000)); + + if (trap || (resm.r.data[0].kind != WASM_I32)) + return 0; + auto const ptrm = resm.r.data[0].of.i32; + + auto res = call<1>( + f, + m, + i, + ptrm, + 1000, + reinterpret_cast(data.data()), + data.size()); + if (!res.r.size || trap) + return 0; + + auto const sz = res.r.data[0].of.i32; + auto const mem = getMem(m, i); + memcpy(&sv_res[0], mem.p + ptrm, sz); + sv_res.resize(sz); + + return 1; +} + +////////////////////////////////////////////////////////////////////////////////////////// + +WamrEngine::WamrEngine() + : WasmEngine( + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}) + , impl(std::make_unique()) +{ +} + +WamrEngine::~WamrEngine() = default; + +Expected +WamrEngine::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + try + { + return impl->run(wasmCode, funcName, input); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WamrEngine::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + try + { + return impl->run(wasmCode, funcName, accountID); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WamrEngine::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->run( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WamrEngine::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->runP4( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + catch (...) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WamrEngine::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + try + { + return impl->justRunP4( + funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WamrEngine::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->run(wasmCode, funcName, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WamrEngine::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->preRun(wasmCode, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WamrEngine::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + try + { + return impl->justRun(funcName, ledgerDataProvider, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WamrEngine::justRun(std::string_view funcName, int m, int i) +{ + try + { + return impl->justRun(funcName, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +int +WamrEngine::addModule(vbytes const& wasmCode, bool instantiate) +{ + try + { + return impl->addModule(wasmCode, instantiate); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Wamr) << ": " << e.what() + << std::endl; + } + return -1; +} + +void +WamrEngine::clearModules() +{ + return impl->clearModules(); +} + +int +WamrEngine::addInstance(int m) +{ + try + { + return impl->addInstance(m); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Wamr) << ": " << e.what() + << std::endl; + } + return -1; +} + +int32_t +WamrEngine::runFunc(std::string_view const funcName, int32_t p, int m, int i) +{ + return impl->runFunc(funcName, p, m, i); +} + +int64_t +WamrEngine::runFunc64(std::string_view const funcName, int64_t p, int m, int i) +{ + return impl->runFunc64(funcName, p, m, i); +} + +std::vector +WamrEngine::runSha(std::string_view const data, int m, int i) +{ + return impl->runSha(data, m, i); +} + +int32_t +WamrEngine::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + return impl->runEnc(funcName, sv_res, data, m, i); +} + +} // namespace ripple diff --git a/src/xrpld/app/misc/WamrVM.h b/src/xrpld/app/misc/WamrVM.h new file mode 100644 index 00000000000..8a93eaafca6 --- /dev/null +++ b/src/xrpld/app/misc/WamrVM.h @@ -0,0 +1,111 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +class WamrEngineImpl; + +class WamrEngine final : public WasmEngine +{ + std::unique_ptr impl; + +public: + WamrEngine(); + virtual ~WamrEngine(); + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + int32_t input) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) override; + + virtual Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider) + override; + + virtual Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) override; + + Expected + justRun(std::string_view funcName, int m, int i) override; + + virtual int + addModule(vbytes const& wasmCode, bool instantiate) override; + virtual void + clearModules() override; + virtual int + addInstance(int m) override; + + virtual int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i) override; + + virtual int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i) + override; + + virtual std::vector + runSha(std::string_view const data, int m, int i) override; + + virtual int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) override; +}; + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmEdgeVM.cpp b/src/xrpld/app/misc/WasmEdgeVM.cpp new file mode 100644 index 00000000000..d8d780f926b --- /dev/null +++ b/src/xrpld/app/misc/WasmEdgeVM.cpp @@ -0,0 +1,1315 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +namespace { + +static WasmEdge_Result +get_ledger_sqn( + void* data, + const WasmEdge_CallingFrameContext*, + const WasmEdge_Value* In, + WasmEdge_Value* Out) +{ + Out[0] = + WasmEdge2_ValueGenI32(((LedgerDataProvider*)data)->get_ledger_sqn()); + return WasmEdge_Result_Success; +} + +inline WasmEdge_String +to_edge(std::string_view s) +{ + return {static_cast(s.size()), s.data()}; +} + +using mod_inst_t = std::unique_ptr< + WasmEdge_ModuleInstanceContext, + decltype(&WasmEdge2_ModuleInstanceDelete)>; +using module_t = std:: + unique_ptr; +using config_t = std:: + unique_ptr; +using store_t = + std::unique_ptr; +using validator_t = std:: + unique_ptr; +using loader_t = + std::unique_ptr; +using executor_t = std:: + unique_ptr; +using engine_t = + std::unique_ptr; +using imports_t = + std::vector>; + +struct my_mod_inst_t +{ + mod_inst_t mod_inst; + +private: + static mod_inst_t + init( + WasmEdge_StoreContext* s, + WasmEdge_ExecutorContext* x, + WasmEdge_ASTModuleContext* m) + { + WasmEdge_ModuleInstanceContext* mi = nullptr; + auto const res = WasmEdge2_ExecutorInstantiate(x, &mi, s, m); + if (!WasmEdge2_ResultOK(res)) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + ": can't create instance, e:" + + WasmEdge2_ResultGetMessage(res)); + return {mi, &WasmEdge2_ModuleInstanceDelete}; + } + +public: + my_mod_inst_t() : mod_inst(nullptr, &WasmEdge2_ModuleInstanceDelete) + { + } + + my_mod_inst_t(my_mod_inst_t&& o) + : mod_inst(nullptr, &WasmEdge2_ModuleInstanceDelete) + { + *this = std::move(o); + } + + my_mod_inst_t& + operator=(my_mod_inst_t&& o) + { + if (this == &o) + return *this; + + mod_inst = std::move(o.mod_inst); + return *this; + } + + my_mod_inst_t( + WasmEdge_StoreContext* s, + WasmEdge_ExecutorContext* x, + WasmEdge_ASTModuleContext* m) + : mod_inst(init(s, x, m)) + { + } + + ~my_mod_inst_t() = default; + + operator bool() const + { + return static_cast(mod_inst); + } + + WasmEdge_FunctionInstanceContext* + getFunc(std::string_view funcName) const + { + auto* f = WasmEdge2_ModuleInstanceFindFunction( + mod_inst.get(), to_edge(funcName)); + if (!f) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + ": can't find function " + std::string(funcName)); + return f; + } + + WasmEdge_MemoryInstanceContext* + getMem() const + { + auto m = + WasmEdge2_ModuleInstanceFindMemory(mod_inst.get(), to_edge(V_MEM)); + if (!m) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + " Can't find memory"); + return m; + } +}; + +struct my_module_t +{ + module_t module; + std::vector mod_inst; + +private: + static module_t + init(WasmEdge_LoaderContext* loader, vbytes const& wasmBin) + { + WasmEdge_ASTModuleContext* m = nullptr; + WasmEdge_Result Res = WasmEdge2_LoaderParseFromBuffer( + loader, &m, wasmBin.data(), wasmBin.size()); + if (!WasmEdge2_ResultOK(Res)) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + " can't parse module"); + + return module_t(m, &WasmEdge2_ASTModuleDelete); + } + +public: + my_module_t() : module(nullptr, &WasmEdge2_ASTModuleDelete) + { + } + + my_module_t(my_module_t&& o) : module(nullptr, &WasmEdge2_ASTModuleDelete) + { + *this = std::move(o); + } + + my_module_t( + WasmEdge_StoreContext* s, + WasmEdge_LoaderContext* loader, + WasmEdge_ValidatorContext* validator, + WasmEdge_ExecutorContext* x, + vbytes const& wasmBin, + bool instantiate, + imports_t const& imports = {}) + : module(init(loader, wasmBin)) + + { + if (!module) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + " + can't create module"); + + WasmEdge_Result Res = + WasmEdge2_ValidatorValidate(validator, module.get()); + if (!WasmEdge2_ResultOK(Res)) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + " + can't validate module"); + + if (!imports.empty()) + { + WasmEdge_ModuleInstanceContext* hostMI = + WasmEdge2_ModuleInstanceCreate(to_edge("host_lib")); + if (!hostMI) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + " + can't create import instance"); + + for (auto const& [n, f] : imports) + WasmEdge2_ModuleInstanceAddFunction(hostMI, to_edge(n), f); + + Res = WasmEdge2_ExecutorRegisterImport(x, s, hostMI); + if (!WasmEdge2_ResultOK(Res)) + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + + " + can't register import instance"); + } + + if (instantiate) + mod_inst.emplace_back(s, x, module.get()); + } + + my_module_t& + operator=(my_module_t&& o) + { + if (this == &o) + return *this; + + module = std::move(o.module); + mod_inst = std::move(o.mod_inst); + + return *this; + } + + ~my_module_t() = default; + + WasmEdge_FunctionInstanceContext* + getFunc(std::string_view funcName, int i) const + { + return mod_inst[i].getFunc(funcName); + } + + WasmEdge_MemoryInstanceContext* + getMem(int i) const + { + return mod_inst[i].getMem(); + } + + int + addInstance(WasmEdge_StoreContext* s, WasmEdge_ExecutorContext* x) + { + for (int i = 0, e = mod_inst.size(); i < e; ++i) + { + auto& ins(mod_inst[i]); + if (!ins) + { + ins = {s, x, module.get()}; + return i; + } + } + mod_inst.emplace_back(s, x, module.get()); + return static_cast(mod_inst.size()) - 1; + } + + int + delInstance(int i) + { + if (i >= mod_inst.size()) + return -1; + if (!mod_inst[i]) + mod_inst[i] = my_mod_inst_t(); + return i; + } +}; + +} // namespace + +class WasmEngineEdgeImpl +{ + config_t config; + store_t store; + validator_t validator; + loader_t loader; + + std::unique_ptr< + WasmEdge_StatisticsContext, + decltype(&WasmEdge2_StatisticsDelete)> + stats; + std::int64_t gasMax = -1; + executor_t executor; + + std::vector modules; + + // need to be initialized for wasi for unknown reason + // may be it loads wasi_snapshot_preview1 plugin + engine_t engine; + + // std::atomic_int ctr; + WasmEdge_Result funcRes{0}; + + static config_t + initConfig() + { + config_t c(WasmEdge2_ConfigureCreate(), &WasmEdge2_ConfigureDelete); + WasmEdge2_ConfigureAddHostRegistration( + c.get(), WasmEdge_HostRegistration_Wasi); + return c; + } + +public: + WasmEngineEdgeImpl(); + ~WasmEngineEdgeImpl() = default; + + Expected + run(vbytes const& wasmCode, std::string_view funcName, int32_t input); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + justRunP4( + + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider); + + Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider); + + Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i); + + Expected + justRun(std::string_view funcName, int m, int i); + + int + addModule(vbytes const& wasmCode, bool instantiate); + void + clearModules() + { + modules.clear(); + store = {WasmEdge2_StoreCreate(), &WasmEdge2_StoreDelete}; + engine = { + WasmEdge2_VMCreate(config.get(), store.get()), &WasmEdge2_VMDelete}; + } + + int + addInstance(int m); + + int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i); + + int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i); + + std::vector + runSha(std::string_view const data, int m, int i); + + int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i); + + std::int64_t + setMeter(std::int64_t def); + + std::int64_t + setGas(std::int64_t gas, int m, int i); + + std::int64_t + getRemainingGas(int m, int i); + +protected: + int + makeModule( + // std::string_view name, + vbytes const& wasmCode, + imports_t const& imports = {}); + + WasmEdge_FunctionInstanceContext* + getFunc(std::string_view funcName, int m, int i = 0); + + WasmEdge_MemoryInstanceContext* + getMem(int m, int i = 0); + + void + add_param(std::vector& in, int32_t p); + void + add_param(std::vector& in, int64_t p); + + template + inline std::vector + call(std::string_view func, int m, int i, Types... args); + + template + inline std::vector + call(WasmEdge_FunctionInstanceContext* f, int m, int i, Types... args); + + template + std::vector + call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in); + + template + inline std::vector + call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args); + + template + inline std::vector + call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args); + + template + inline std::vector + call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args); + + template + inline std::vector + call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args); +}; + +WasmEngineEdgeImpl::WasmEngineEdgeImpl() + : config(initConfig()) + , store(WasmEdge2_StoreCreate(), &WasmEdge2_StoreDelete) + , validator( + WasmEdge2_ValidatorCreate(config.get()), + &WasmEdge2_ValidatorDelete) + , loader(WasmEdge2_LoaderCreate(config.get()), &WasmEdge2_LoaderDelete) + , stats(nullptr, &WasmEdge2_StatisticsDelete) + , executor( + WasmEdge2_ExecutorCreate(config.get(), nullptr), + &WasmEdge2_ExecutorDelete) + , engine(WasmEdge2_VMCreate(config.get(), store.get()), &WasmEdge2_VMDelete) +{ + // WasmEdge3_PluginLoadWithDefaultPaths(); +} + +Expected +WasmEngineEdgeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto const Returns = call<1>(f, m, i, input); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + + auto const result = WasmEdge2_ValueGetI32(Returns[0]); + // printf("Get the result: %d\n", result); + + return result != 0; +} + +Expected +WasmEngineEdgeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + //"mod01", + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto const Returns = call<1>(f, m, i, accountID); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + + auto const result = WasmEdge2_ValueGetI32(Returns[0]); + // printf("Get the result: %d\n", result); + + return result == 1; +} + +Expected +WasmEngineEdgeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto const Returns = + call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + + auto const result = WasmEdge2_ValueGetI32(Returns[0]); + // printf("Get the result: %d\n", result); + + return result == 1; +} + +Expected, TER> +WasmEngineEdgeImpl::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRunP4(funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); +} + +Expected, TER> +WasmEngineEdgeImpl::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto const Returns = + call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + + auto const ptr = WasmEdge2_ValueGetI32(Returns[0]); + std::uint8_t buf[16]; + memset(buf, 0, sizeof(buf)); + + // memcpy(buf, mem.p + ptr, 9); + auto const* mem = getMem(m, i); + WasmEdge2_MemoryInstanceGetData(mem, buf, ptr, 9); + + auto const flag = buf[0]; + auto const ret_ptr = *reinterpret_cast(buf + 1); + auto const ret_len = *reinterpret_cast(buf + 5); + // printf("re flag %d, ptr %d, len %d\n", flag, ret_pointer, ret_len); + + // memcpy(buf2.data(), mem.p + ret_pointer, ret_len); + vbytes buf2(ret_len); + WasmEdge2_MemoryInstanceGetData(mem, buf2.data(), ret_ptr, ret_len); + + std::string newData(buf2.begin(), buf2.end()); + + call<0>(V_DEALLOC, m, i, ret_ptr, ret_len); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + call<0>(V_DEALLOC, m, i, ptr, 9); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + + return std::pair(flag == 1, newData); +} + +Expected +WasmEngineEdgeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + WasmEdge_ValType rtype[] = {WasmEdge2_ValTypeGenI32()}; + std::unique_ptr< + WasmEdge_FunctionTypeContext, + decltype(&WasmEdge2_FunctionTypeDelete)> + ftype{ + WasmEdge2_FunctionTypeCreate(nullptr, 0, rtype, 1), + &WasmEdge2_FunctionTypeDelete}; + WasmEdge_FunctionInstanceContext* func = WasmEdge2_FunctionInstanceCreate( + ftype.get(), &get_ledger_sqn, ledgerDataProvider, 0); + + int const m = makeModule(wasmCode, {{"get_ledger_sqn", func}}); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRun(funcName, ledgerDataProvider, m, i); +} + +Expected +WasmEngineEdgeImpl::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + WasmEdge_ValType rtype[] = {WasmEdge2_ValTypeGenI32()}; + std::unique_ptr< + WasmEdge_FunctionTypeContext, + decltype(&WasmEdge2_FunctionTypeDelete)> + ftype{ + WasmEdge2_FunctionTypeCreate(nullptr, 0, rtype, 1), + &WasmEdge2_FunctionTypeDelete}; + WasmEdge_FunctionInstanceContext* func = WasmEdge2_FunctionInstanceCreate( + ftype.get(), &get_ledger_sqn, ledgerDataProvider, 0); + + int const m = makeModule(wasmCode, {{"get_ledger_sqn", func}}); + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return m; +} + +Expected +WasmEngineEdgeImpl::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto const Returns = call<1>(f, m, i); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + + auto const result = WasmEdge2_ValueGetI32(Returns[0]); + // printf("Get the result: %d\n", result); + + return result; +} + +Expected +WasmEngineEdgeImpl::justRun(std::string_view funcName, int m, int i) +{ + auto* f = getFunc(funcName, m, i); + auto const Returns = call<1>(f, m, i); + if (!WasmEdge2_ResultOK(funcRes)) + return Unexpected(tecFAILED_PROCESSING); + auto const result = WasmEdge2_ValueGetI32(Returns[0]); + return result; +} + +int +WasmEngineEdgeImpl::makeModule( + // std::string_view name, + vbytes const& wasmCode, + imports_t const& imports) +{ + modules.emplace_back( + // name, + store.get(), + loader.get(), + validator.get(), + executor.get(), + wasmCode, + true, + imports); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineEdgeImpl::addModule(vbytes const& wasmCode, bool instantiate) +{ + // std::string mn = "module_" + std::to_string(ctr++); + modules.emplace_back( + store.get(), + loader.get(), + validator.get(), + executor.get(), + wasmCode, + instantiate); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineEdgeImpl::addInstance(int m) +{ + return modules[m].addInstance(store.get(), executor.get()); +} + +WasmEdge_FunctionInstanceContext* +WasmEngineEdgeImpl::getFunc(std::string_view funcName, int m, int i) +{ + return modules[m].getFunc(funcName, i); +} + +WasmEdge_MemoryInstanceContext* +WasmEngineEdgeImpl::getMem(int m, int i) +{ + return modules[m].getMem(i); +} + +void +WasmEngineEdgeImpl::add_param(std::vector& in, int32_t p) +{ + in.emplace_back(); + auto& el(in.back()); + memset(&el, 0, sizeof(el)); + el = WasmEdge2_ValueGenI32(p); // WASM_I32; +} + +void +WasmEngineEdgeImpl::add_param(std::vector& in, int64_t p) +{ + in.emplace_back(); + auto& el(in.back()); + memset(&el, 0, sizeof(el)); + el = WasmEdge2_ValueGenI64(p); +} + +template +inline std::vector +WasmEngineEdgeImpl::call(std::string_view func, int m, int i, Types... args) +{ + // Lookup our export function + auto* f = getFunc(func, m, i); + return call(f, m, i, std::forward(args)...); +} + +template +std::vector +WasmEngineEdgeImpl::call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + Types... args) +{ + std::vector in; + return call(f, m, i, in, std::forward(args)...); +} + +template +std::vector +WasmEngineEdgeImpl::call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in) +{ + std::vector ret; + if (NR) + { + ret.resize(NR); + memset(ret.data(), 0, NR * sizeof(ret[0])); + } + + funcRes = WasmEdge2_ExecutorInvoke( + executor.get(), f, in.data(), in.size(), ret.data(), ret.size()); + if (!WasmEdge2_ResultOK(funcRes)) + { + std::cerr << std::string("failed to call func ") + + WasmEdge2_ResultGetMessage(funcRes) + << std::endl; + return {}; + } + + // assert(results[0].kind == WASM_I32); + // if (NR) printf("Result P5: %d\n", ret[0].of.i32); + + return ret; +} + +template +std::vector +WasmEngineEdgeImpl::call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args) +{ + add_param(in, p); + return call(f, m, i, in, std::forward(args)...); +} + +template +std::vector +WasmEngineEdgeImpl::call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args) +{ + add_param(in, p); + return call(f, m, i, in, std::forward(args)...); +} + +template +std::vector +WasmEngineEdgeImpl::call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args) +{ + auto const res = call<1>(V_ALLOC, m, i, static_cast(sz)); + if (!WasmEdge2_ResultOK(funcRes)) + { + std::cerr << std::string("failed to call func ") + + WasmEdge2_ResultGetMessage(funcRes) + << std::endl; + return {}; + } + + auto const ptr = WasmEdge2_ValueGetI32(res[0]); + auto* mem = getMem(m, i); + if (!mem) + { + throw std::runtime_error( + std::string(engineName(wasmEngines::Edge)) + " Can't find memory"); + } + + // memcpy(mem.p + ptr, m, sz); + funcRes = WasmEdge2_MemoryInstanceSetData(mem, d, ptr, sz); + if (!WasmEdge2_ResultOK(funcRes)) + { + std::cerr << std::string("failed to call func ") + + WasmEdge2_ResultGetMessage(funcRes) + << std::endl; + return {}; + } + + add_param(in, ptr); + add_param(in, static_cast(sz)); + return call(f, m, i, in, std::forward(args)...); +} + +template +std::vector +WasmEngineEdgeImpl::call( + WasmEdge_FunctionInstanceContext* f, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args) +{ + return call( + f, m, i, in, p.data(), p.size(), std::forward(args)...); +} + +int32_t +WasmEngineEdgeImpl::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (!res.size() || !WasmEdge2_ResultOK(funcRes)) + return -1; + + auto const result = WasmEdge2_ValueGetI32(res[0]); + return result; +} + +int64_t +WasmEngineEdgeImpl::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (!res.size() || !WasmEdge2_ResultOK(funcRes)) + return -1; + + auto const result = WasmEdge2_ValueGetI64(res[0]); + return result; +} + +std::vector +WasmEngineEdgeImpl::runSha(std::string_view const data, int m, int i) +{ + std::string_view funcName = "sha512_process"; + auto* f = getFunc(funcName, m, i); + auto const* d = reinterpret_cast(data.data()); + auto const Returns = call<1>(f, m, i, d, data.size()); + if (!WasmEdge2_ResultOK(funcRes)) + return {}; + + auto const ptr = WasmEdge2_ValueGetI32(Returns[0]); + std::uint64_t buf[8]; + memset(buf, 0, sizeof(buf)); + + auto const* mem = getMem(m, i); + WasmEdge2_MemoryInstanceGetData( + mem, + reinterpret_cast(&buf[0]), + ptr, + 8 * sizeof(std::uint64_t)); + + return {&buf[0], &buf[8]}; +} + +int32_t +WasmEngineEdgeImpl::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + + sv_res.resize(1024); + auto resm = call<1>(V_ALLOC, m, i, static_cast(1000)); + + if (!WasmEdge2_ResultOK(funcRes)) + return 0; + auto const ptrm = WasmEdge2_ValueGetI32(resm[0]); + + [[maybe_unused]] auto res = call<1>( + f, + m, + i, + ptrm, + 1000, + reinterpret_cast(data.data()), + data.size()); + if (!WasmEdge2_ResultOK(funcRes)) + return 0; + + auto const sz = WasmEdge2_ValueGetI32(res[0]); + auto const mem = getMem(m, i); + // memcpy(&sv_res[0], mem.p + ptrm, 1000); + WasmEdge2_MemoryInstanceGetData( + mem, reinterpret_cast(&sv_res[0]), ptrm, sz); + sv_res.resize(sz); + + return 1; +} + +std::int64_t +WasmEngineEdgeImpl::setMeter(std::int64_t def) +{ + modules.clear(); + executor.reset(); + stats.reset(); + loader.reset(); + validator.reset(); + store.reset(); + + config = initConfig(); + WasmEdge2_ConfigureStatisticsSetInstructionCounting(config.get(), true); + WasmEdge2_ConfigureStatisticsSetCostMeasuring(config.get(), true); + + store = {WasmEdge2_StoreCreate(), &WasmEdge2_StoreDelete}; + validator = { + WasmEdge2_ValidatorCreate(config.get()), &WasmEdge2_ValidatorDelete}; + loader = {WasmEdge2_LoaderCreate(config.get()), &WasmEdge2_LoaderDelete}; + + static uint64_t CostTable[std::numeric_limits::max() + 1]; + for (int i = 0; i < sizeof(CostTable) / sizeof(CostTable[0]); ++i) + CostTable[i] = 1; + stats = {WasmEdge2_StatisticsCreate(), &WasmEdge2_StatisticsDelete}; + WasmEdge2_StatisticsSetCostTable( + stats.get(), CostTable, sizeof(CostTable) / sizeof(CostTable[0])); + WasmEdge2_StatisticsSetCostLimit(stats.get(), def); + gasMax = static_cast(def); + + [[maybe_unused]] std::uint64_t gas = + WasmEdge2_StatisticsGetTotalCost(stats.get()); + + executor = { + WasmEdge2_ExecutorCreate(config.get(), stats.get()), + &WasmEdge2_ExecutorDelete}; + + // wasi + engine = { + WasmEdge2_VMCreate(config.get(), store.get()), &WasmEdge2_VMDelete}; + + return def; +} + +std::int64_t +WasmEngineEdgeImpl::setGas(std::int64_t gas, int m, int i) +{ + WasmEdge2_StatisticsClear(stats.get()); + WasmEdge2_StatisticsSetCostLimit(stats.get(), gas); + gasMax = static_cast(gas); + return gas; +} + +std::int64_t +WasmEngineEdgeImpl::getRemainingGas(int m, int i) +{ + std::uint64_t gas = WasmEdge2_StatisticsGetTotalCost(stats.get()); + std::int64_t left = gasMax - static_cast(gas); + return left; +} + +////////////////////////////////////////////////////////////////////////////////////////// + +WasmEngineEdge::WasmEngineEdge() + : WasmEngine( +#ifdef _DEBUG + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1} +#else + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1} +#endif + ) + , impl(std::make_unique()) +{ +} + +WasmEngineEdge::~WasmEngineEdge() = default; + +Expected +WasmEngineEdge::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + try + { + return impl->run(wasmCode, funcName, input); + } + catch (std::exception const& e) + { + // std::cerr << "EXC: " << e.what() << std::endl; + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEdge::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + try + { + return impl->run(wasmCode, funcName, accountID); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEdge::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->run( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineEdge::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->runP4( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineEdge::justRunP4( + + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + try + { + return impl->justRunP4( + funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEdge::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->run(wasmCode, funcName, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEdge::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->preRun(wasmCode, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEdge::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + try + { + return impl->justRun(funcName, ledgerDataProvider, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEdge::justRun(std::string_view funcName, int m, int i) +{ + try + { + return impl->justRun(funcName, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +int +WasmEngineEdge::addModule(vbytes const& wasmCode, bool instantiate) +{ + try + { + return impl->addModule(wasmCode, instantiate); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Edge) << ": " << e.what() + << std::endl; + } + return -1; +} + +void +WasmEngineEdge::clearModules() +{ + return impl->clearModules(); +} + +int +WasmEngineEdge::addInstance(int m) +{ + try + { + return impl->addInstance(m); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Edge) << ": " << e.what() + << std::endl; + } + return -1; +} + +int32_t +WasmEngineEdge::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + return impl->runFunc(funcName, p, m, i); +} + +int64_t +WasmEngineEdge::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + return impl->runFunc64(funcName, p, m, i); +} + +std::vector +WasmEngineEdge::runSha(std::string_view const data, int m, int i) +{ + return impl->runSha(data, m, i); +} + +int32_t +WasmEngineEdge::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + return impl->runEnc(funcName, sv_res, data, m, i); +} + +std::int64_t +WasmEngineEdge::setMeter(std::int64_t def) +{ + return impl->setMeter(def); +} + +std::int64_t +WasmEngineEdge::setGas(std::int64_t gas, int m, int i) +{ + return impl->setGas(gas, m, i); +} + +std::int64_t +WasmEngineEdge::getRemainingGas(int m, int i) +{ + return impl->getRemainingGas(m, i); +} + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmEdgeVM.h b/src/xrpld/app/misc/WasmEdgeVM.h new file mode 100644 index 00000000000..f08b29fb97e --- /dev/null +++ b/src/xrpld/app/misc/WasmEdgeVM.h @@ -0,0 +1,120 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +class WasmEngineEdgeImpl; + +class WasmEngineEdge final : public WasmEngine +{ + std::unique_ptr impl; + +public: + WasmEngineEdge(); + virtual ~WasmEngineEdge(); + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + int32_t input) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) override; + + virtual Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider) + override; + + virtual Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) override; + + Expected + justRun(std::string_view funcName, int m, int i) override; + + virtual int + addModule(vbytes const& wasmCode, bool instantiate) override; + virtual void + clearModules() override; + virtual int + addInstance(int m) override; + + virtual int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i) override; + + virtual int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i) + override; + + virtual std::vector + runSha(std::string_view const data, int m, int i) override; + + virtual int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) override; + + virtual std::int64_t + setMeter(std::int64_t def) override; + + virtual std::int64_t + setGas(std::int64_t gas, int m, int i) override; + + virtual std::int64_t + getRemainingGas(int m, int i) override; +}; + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmTimeVM.cpp b/src/xrpld/app/misc/WasmTimeVM.cpp new file mode 100644 index 00000000000..7e34df3f1a0 --- /dev/null +++ b/src/xrpld/app/misc/WasmTimeVM.cpp @@ -0,0 +1,1331 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +namespace { + +static wasm_trap_t* +get_ledger_sqn( + void* env, + wasmtime_caller_t* caller, + const wasmtime_val_t* args, + size_t nargs, + wasmtime_val_t* results, + size_t nresults) +{ + auto sqn = reinterpret_cast(env)->get_ledger_sqn(); + if (nresults) + { + results[0] = wasmtime_val_t WASM_I32_VAL(sqn); + } + + return nullptr; +} + +static void +print_wasm_error(const char* message, wasm_trap_t* trap) +{ + fprintf(stderr, "error: %s\n", message); + wasm_byte_vec_t error_message; + + if (trap) + { + wasmtime2_trap_message(trap, &error_message); + wasmtime2_trap_delete(trap); + } + fprintf(stderr, "%.*s\n", (int)error_message.size, error_message.data); + wasmtime2_byte_vec_delete(&error_message); +} + +// clang-format off +struct wsm_res +{ + std::vector r; + + wsm_res(unsigned N = 0) {if (N) r.resize(N); } + ~wsm_res() { } + wsm_res(wsm_res const &) = delete; + wsm_res& operator=(wsm_res const &) = delete; + + wsm_res(wsm_res &&o) = default; + wsm_res& operator=(wsm_res &&o) = default; + //operator wasm_val_vec_t &() {return r;} +}; +// clang-format on + +using module_t = + std::unique_ptr; +using mod_inst_t = wasmtime_instance_t; + +static wasm_trap_t* +_proc_exit( + void* env, + wasmtime_caller_t* caller, + const wasmtime_val_t* args, + size_t nargs, + wasmtime_val_t* results, + size_t nresults) +{ + if (nargs) + std::cout << "Exit called: " << std::to_string(args[0].of.i32) + << std::endl; + return nullptr; +} + +struct my_mod_inst_t +{ + wasmtime_context_t* context = nullptr; + // std::vector> exports; + mod_inst_t mod_inst = {0, 0}; + +private: + static void + checkImport( + std::vector& out, + wasmtime_context_t* ct, + wasmtime_module_t* m, + std::vector const& in) + { + wasm_importtype_vec_t impts = {0, nullptr}; + wasmtime3_module_imports(m, &impts); + + for (int i = 0; i < impts.size; ++i) + { + auto const* impt(impts.data[i]); + + wasm_name_t const* name = wasmtime2_importtype_name(impt); + wasm_externtype_t const* xtype = wasmtime2_importtype_type(impt); + if ((wasmtime2_externtype_kind(xtype) == WASM_EXTERN_FUNC) && + (VW_PROC_EXIT == std::string_view(name->data, name->size))) + { + std::unique_ptr< + wasm_functype_t, + decltype(&wasmtime2_functype_delete)> + ftype( + wasmtime2_functype_new_1_0(wasmtime2_valtype_new_i32()), + &wasmtime2_functype_delete); + + wasmtime_func_t func; + wasmtime3_func_new( + ct, ftype.get(), &_proc_exit, nullptr, nullptr, &func); + + out.push_back( + {.kind = WASMTIME_EXTERN_FUNC, .of = {.func = func}}); + + break; + } + } + + for (auto const& imp : in) + out.push_back(imp); + } + + static mod_inst_t + init( + wasmtime_context_t* ct, + wasmtime_module_t* m, + // std::vector>& expt, + std::vector const& imports) + { + wasm_trap_t* trap = nullptr; + + //////////////////////////////////////////////////////////////// + // check wasi + + std::vector imports2; + checkImport(imports2, ct, m, imports); + + //////////////////////////////////////////////////////////////// + + mod_inst_t mi = {0, 0}; + auto* e = wasmtime3_instance_new( + ct, m, imports2.data(), imports2.size(), &mi, &trap); + if (e || trap) + { + print_wasm_error("can't create instance", trap); + throw std::runtime_error( + std::string(engineName(wasmEngines::Time)) + + ": can't create instance"); + } + + // char* name; + // std::size_t len; + // wasmtime_extern_t item; + // for (unsigned idx = 0; + // wasmtime3_instance_export_nth(ct, &mi, idx, &name, &len, &item); + // ++idx) + // expt.emplace_back(std::string(name, len), item); + + return mi; + } + +public: + my_mod_inst_t() = default; + my_mod_inst_t(my_mod_inst_t&& o) : context(nullptr), mod_inst{0, 0} + { + *this = std::move(o); + } + + my_mod_inst_t& + operator=(my_mod_inst_t&& o) + { + if (this == &o) + return *this; + + // if (exports.size) wasmtime2_extern_vec_delete(&exports); + // exports = std::move(o.exports); + // o.exports = {0, nullptr}; + + context = o.context; + o.context = nullptr; + mod_inst = o.mod_inst; + o.mod_inst = {0, 0}; + + return *this; + } + + my_mod_inst_t( + wasmtime_context_t* ct, + wasmtime_module_t* m, + std::vector const& imports) + : context(ct), mod_inst(init(ct, m, imports)) + { + } + + ~my_mod_inst_t() + { + // if (exports.size) wasmtime2_extern_vec_delete(&exports); + } + + operator bool() const + { + return true; // static_cast(mod_inst.store_id >= 0); + } + + wasmtime_func_t + getFunc(std::string_view funcName) + { + wasmtime_extern_t item; + bool ok = wasmtime3_instance_export_get( + context, &mod_inst, funcName.data(), funcName.size(), &item); + + // if (exports.empty()) + // throw std::runtime_error( + // std::string(engineName(wasmEngines::Time)) + ": no export"); + + // for (auto& [name, ext] : exports) + // { + // if ((ext.kind == WASMTIME_EXTERN_FUNC) && (funcName == name)) + // { + // f = &ext.of.func; + // break; + // } + // } + + if (!(ok && item.kind == WASMTIME_EXTERN_FUNC)) + throw std::runtime_error( + std::string(engineName(wasmEngines::Time)) + + ": can't find function " + std::string(funcName)); + + return item.of.func; + } + + vmem + getMem() + { + wasmtime_extern_t item; + bool ok = wasmtime3_instance_export_get( + context, &mod_inst, V_MEM.data(), V_MEM.size(), &item); + + // if (exports.empty()) + // throw std::runtime_error( + // std::string(engineName(wasmEngines::Time)) + ": no export"); + + // wasmtime_memory_t* mem = nullptr; + // for (auto& [name, ext] : exports) + // { + // if ((ext.kind == WASMTIME_EXTERN_MEMORY)) + // { + // mem = &ext.of.memory; + // break; + // } + // } + + // if (!mem) + if (!(ok && item.kind == WASMTIME_EXTERN_MEMORY)) + throw std::runtime_error( + std::string(engineName(wasmEngines::Time)) + + ": no memory exported"); + + auto& mem(item.of.memory); + return { + wasmtime3_memory_data(context, &mem), + wasmtime3_memory_data_size(context, &mem)}; + } +}; + +struct my_module_t +{ + wasmtime_context_t* context = nullptr; + module_t module; + std::vector mod_inst; + // wasm_exporttype_vec_t export_types; + +private: + static module_t + init(wasm_engine_t* e, vbytes const& wasmBin) + { + // wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; + wasmtime_module_t* m = nullptr; + wasmtime3_module_new(e, wasmBin.data(), wasmBin.size(), &m); + module_t mt = {m, &wasmtime3_module_delete}; + return mt; + } + +public: + my_module_t() : context(nullptr), module(nullptr, &wasmtime3_module_delete) + // , export_types{0, nullptr} + { + } + + my_module_t(my_module_t&& o) + : context(nullptr), module(nullptr, &wasmtime3_module_delete) + // , export_types{0, nullptr} + { + *this = std::move(o); + } + + my_module_t& + operator=(my_module_t&& o) + { + if (this == &o) + return *this; + + context = o.context; + o.context = nullptr; + module = std::move(o.module); + mod_inst = std::move(o.mod_inst); + + // if (export_types.size) + // wasmtime2_exporttype_vec_delete(&export_types); + // export_types = o.export_types; + // o.export_types = {0, nullptr}; + + return *this; + } + + my_module_t( + wasm_engine_t* e, + wasmtime_context_t* ct, + vbytes const& wasmBin, + bool instantiate, + std::vector const& imports = {}) + : context(ct), module(init(e, wasmBin)) + //, export_types{0, nullptr} + { + if (!module) + throw std::runtime_error( + std::string(engineName(wasmEngines::Time)) + + " can't create module"); + + // wasmtime2_module_exports(module.get(), &export_types); + if (instantiate) + mod_inst.emplace_back(ct, module.get(), imports); + } + + ~my_module_t() + { + // if (export_types.size) + // wasmtime2_exporttype_vec_delete(&export_types); + } + + wasmtime_func_t + getFunc(std::string_view funcName, int i) + { + return mod_inst[i].getFunc(funcName); + } + + vmem + getMem(int i) + { + return mod_inst[i].getMem(); + } + + int + addInstance(std::vector const& imports = {}) + { + for (int i = 0, e = mod_inst.size(); i < e; ++i) + { + auto& ins(mod_inst[i]); + if (!ins) + { + ins = {context, module.get(), imports}; + return i; + } + } + mod_inst.emplace_back(context, module.get(), imports); + return static_cast(mod_inst.size()) - 1; + } + + int + delInstance(int i) + { + if (i >= mod_inst.size()) + return -1; + if (!mod_inst[i]) + mod_inst[i] = my_mod_inst_t(); + return i; + } +}; + +} // namespace + +class WasmEngineTimeImpl +{ + std::unique_ptr engine; + std::unique_ptr store; + wasmtime_context_t* context = nullptr; + std::vector modules; + wasm_trap_t* trap = nullptr; + +public: + WasmEngineTimeImpl(); + ~WasmEngineTimeImpl() = default; + + Expected + run(vbytes const& wasmCode, std::string_view funcName, int32_t input); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider); + + Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider); + + Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i); + + Expected + justRun(std::string_view funcName, int m, int i); + + int + addModule(vbytes const& wasmCode, bool instantiate); + void + clearModules() + { + modules.clear(); + store.reset(); + store = { + wasmtime3_store_new(engine.get(), nullptr, nullptr), + &wasmtime3_store_delete}; + context = wasmtime3_store_context(store.get()); + } + int + addInstance(int m); + + int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i); + + int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i); + + std::vector + runSha(std::string_view const data, int m, int i); + + int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i); + + std::int64_t + setMeter(std::int64_t def); + + std::int64_t + setGas(std::int64_t gas, int m, int i); + + std::int64_t + getRemainingGas(int m, int i); + +protected: + int + makeModule( + vbytes const& wasmCode, + std::vector const& imports = + std::vector()); + + wasmtime_func_t + getFunc(std::string_view funcName, int m, int i = 0); + + vmem + getMem(int m, int i = 0); + + void + add_param(std::vector& in, int32_t p); + void + add_param(std::vector& in, int64_t p); + + template + inline wsm_res + call(std::string_view func, int m, int i, Types... args); + + template + inline wsm_res + call(wasmtime_func_t& func, int m, int i, Types... args); + + template + inline wsm_res + call(wasmtime_func_t& f, int m, int i, std::vector& in); + + template + inline wsm_res + call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args); + + template + inline wsm_res + call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args); + + template + inline wsm_res + call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args); + + template + inline wsm_res + call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args); +}; + +WasmEngineTimeImpl::WasmEngineTimeImpl() + : engine(wasmtime2_engine_new(), &wasmtime2_engine_delete) + , store( + wasmtime3_store_new(engine.get(), nullptr, nullptr), + &wasmtime3_store_delete) + , context(wasmtime3_store_context(store.get())) +{ +} + +int +WasmEngineTimeImpl::makeModule( + vbytes const& wasmCode, + std::vector const& imports) +{ + modules.emplace_back(engine.get(), context, wasmCode, true, imports); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineTimeImpl::addModule(vbytes const& wasmCode, bool instantiate) +{ + modules.emplace_back(engine.get(), context, wasmCode, instantiate); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineTimeImpl::addInstance(int m) +{ + return modules[m].addInstance(); +} + +wasmtime_func_t +WasmEngineTimeImpl::getFunc(std::string_view funcName, int m, int i) +{ + return modules[m].getFunc(funcName, i); +} + +vmem +WasmEngineTimeImpl::getMem(int m, int i) +{ + return modules[m].getMem(i); +} + +void +WasmEngineTimeImpl::add_param(std::vector& in, int32_t p) +{ + in.emplace_back(wasmtime_val_t WASM_I32_VAL(p)); +} + +void +WasmEngineTimeImpl::add_param(std::vector& in, int64_t p) +{ + in.emplace_back(wasmtime_val_t WASM_I64_VAL(p)); +} + +template +wsm_res +WasmEngineTimeImpl::call(std::string_view func, int m, int i, Types... args) +{ + // Lookup our export function + auto f = getFunc(func, m, i); + return call(f, m, i, std::forward(args)...); +} + +template +wsm_res +WasmEngineTimeImpl::call(wasmtime_func_t& func, int m, int i, Types... args) +{ + std::vector in; + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineTimeImpl::call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in) +{ + wsm_res ret(NR); + + auto* err = wasmtime3_func_call( + context, + &func, + in.data(), + in.size(), + ret.r.data(), + ret.r.size(), + &trap); + if (err || trap) + print_wasm_error("failed to call func", trap); + + // assert(results[0].kind == WASM_I32); + // if (NR) printf("Result P5: %d\n", ret[0].of.i32); + + return ret; +} + +template +wsm_res +WasmEngineTimeImpl::call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineTimeImpl::call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineTimeImpl::call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args) +{ + auto const res = call<1>(V_ALLOC, m, i, static_cast(sz)); + if (trap || (res.r[0].kind != WASMTIME_I32)) + return {}; + auto const ptr = res.r[0].of.i32; + + auto mem = getMem(m, i); + memcpy(mem.p + ptr, d, sz); + + add_param(in, ptr); + add_param(in, static_cast(sz)); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineTimeImpl::call( + wasmtime_func_t& func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args) +{ + return call( + func, m, i, in, p.data(), p.size(), std::forward(args)...); +} + +Expected +WasmEngineTimeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + // Call it! + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, input); + if (res.r.empty() || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r[0].kind == WASMTIME_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r[0].of.i32 != 0; +} + +Expected +WasmEngineTimeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, accountID); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r[0].kind == WASMTIME_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r[0].of.i32 == 1; +} + +Expected +WasmEngineTimeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r[0].kind == WASMTIME_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r[0].of.i32 == 1; +} + +Expected, TER> +WasmEngineTimeImpl::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRunP4(funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); +} + +Expected, TER> +WasmEngineTimeImpl::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r[0].kind == WASMTIME_I32); + // printf("Result: %d\n", results[0].of.i32); + // return res.r[0].of.i32 == 1; + auto const ptr = res.r[0].of.i32; + std::uint8_t buf[16]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 9); + + auto const flag = buf[0]; + auto const ret_pointer = *reinterpret_cast(buf + 1); + auto const ret_len = *reinterpret_cast(buf + 5); + // printf("re flag %d, ptr %d, len %d\n", flag, ret_pointer, ret_len); + + vbytes buf2(ret_len); + memcpy(buf2.data(), mem.p + ret_pointer, ret_len); + + std::string newData(buf2.begin(), buf2.end()); + + call<0>(V_DEALLOC, m, i, ret_pointer, ret_len); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + call<0>(V_DEALLOC, m, i, ptr, 9); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + return std::pair(flag == 1, newData); +} + +Expected +WasmEngineTimeImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wasmtime2_valtype_new_i32()); + + std::unique_ptr + ftype(wasmtime2_functype_new_0_1(vtype), &wasmtime2_functype_delete); + + wasmtime_func_t func; + wasmtime3_func_new( + context, + ftype.get(), + &get_ledger_sqn, + ledgerDataProvider, + nullptr, + &func); + + std::vector import = { + {.kind = WASMTIME_EXTERN_FUNC, .of = {.func = func}}}; + + int const m = makeModule(wasmCode, import); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRun(funcName, ledgerDataProvider, m, i); +} + +Expected +WasmEngineTimeImpl::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wasmtime2_valtype_new_i32()); + + std::unique_ptr + ftype(wasmtime2_functype_new_0_1(vtype), &wasmtime2_functype_delete); + + wasmtime_func_t func; + wasmtime3_func_new( + context, + ftype.get(), + &get_ledger_sqn, + ledgerDataProvider, + nullptr, + &func); + + std::vector import = { + {.kind = WASMTIME_EXTERN_FUNC, .of = {.func = func}}}; + + int const m = makeModule(wasmCode, import); + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return m; +} + +Expected +WasmEngineTimeImpl::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + return res.r[0].kind == WASMTIME_I32 && res.r[0].of.i32; +} + +Expected +WasmEngineTimeImpl::justRun(std::string_view funcName, int m, int i) +{ + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + if (trap || res.r[0].kind != WASM_I32) + return Unexpected(tecFAILED_PROCESSING); + + return res.r[0].of.i32; +} + +int32_t +WasmEngineTimeImpl::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (trap) + return -1; + + return res.r[0].kind == WASMTIME_I32 ? res.r[0].of.i32 : -1; +} + +int64_t +WasmEngineTimeImpl::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + auto f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (trap) + return -1; + + return res.r[0].kind == WASM_I64 ? res.r[0].of.i64 : -1; +} + +std::vector +WasmEngineTimeImpl::runSha(std::string_view const data, int m, int i) +{ + std::string_view funcName = "sha512_process"; + auto f = getFunc(funcName, m, i); + auto res = call<1>( + f, m, i, reinterpret_cast(data.data()), data.size()); + if (trap) + return {}; + + auto const ptr = res.r[0].of.i32; + std::uint64_t buf[8]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 8 * sizeof(std::uint64_t)); + return {&buf[0], &buf[8]}; +} + +int32_t +WasmEngineTimeImpl::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + auto f = getFunc(funcName, m, i); + + sv_res.resize(1024); + auto resm = call<1>(V_ALLOC, m, i, static_cast(1000)); + + if (trap || (resm.r[0].kind != WASM_I32)) + return 0; + auto const ptrm = resm.r[0].of.i32; + + auto res = call<1>( + f, + m, + i, + ptrm, + 1000, + reinterpret_cast(data.data()), + data.size()); + if (trap) + return 0; + + auto const sz = res.r[0].of.i32; + auto const mem = getMem(m, i); + memcpy(&sv_res[0], mem.p + ptrm, sz); + sv_res.resize(sz); + + return 1; +} + +std::int64_t +WasmEngineTimeImpl::setMeter(std::int64_t def) +{ + modules.clear(); + store.reset(); + engine.reset(); + context = nullptr; + + wasm_config_t* config = wasmtime2_config_new(); + wasmtime3_config_consume_fuel_set(config, true); + + engine = { + wasmtime2_engine_new_with_config(config), &wasmtime2_engine_delete}; + store = { + wasmtime3_store_new(engine.get(), nullptr, nullptr), + &wasmtime3_store_delete}; + context = wasmtime3_store_context(store.get()); + wasmtime3_context_set_fuel(context, static_cast(def)); + + // assert(wasmer_metering_get_remaining_points(instance) == 6); + // assert(wasmer_metering_points_are_exhausted(instance) == false); + + return 0; +} + +std::int64_t +WasmEngineTimeImpl::setGas(std::int64_t gas, int m, int i) +{ + wasmtime3_context_set_fuel(context, static_cast(gas)); + return gas; +} + +std::int64_t +WasmEngineTimeImpl::getRemainingGas(int m, int i) +{ + std::uint64_t gas = 0; + wasmtime3_context_get_fuel(context, &gas); + return static_cast(gas); +} + +////////////////////////////////////////////////////////////////////////////////////////// + +WasmEngineTime::WasmEngineTime() + : WasmEngine( + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1}) + , impl(std::make_unique()) +{ +} + +WasmEngineTime::~WasmEngineTime() = default; + +Expected +WasmEngineTime::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + try + { + return impl->run(wasmCode, funcName, input); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineTime::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + try + { + return impl->run(wasmCode, funcName, accountID); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineTime::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->run( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineTime::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->runP4( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineTime::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + try + { + return impl->justRunP4( + funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineTime::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->run(wasmCode, funcName, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineTime::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->preRun(wasmCode, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineTime::justRun(std::string_view funcName, int m, int i) +{ + try + { + return impl->justRun(funcName, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineTime::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + try + { + return impl->justRun(funcName, ledgerDataProvider, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +int +WasmEngineTime::addModule(vbytes const& wasmCode, bool instantiate) +{ + try + { + return impl->addModule(wasmCode, instantiate); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Time) << ": " << e.what() + << std::endl; + } + return -1; +} + +void +WasmEngineTime::clearModules() +{ + return impl->clearModules(); +} + +int +WasmEngineTime::addInstance(int m) +{ + try + { + return impl->addInstance(m); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Time) << ": " << e.what() + << std::endl; + } + return -1; +} + +int32_t +WasmEngineTime::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + return impl->runFunc(funcName, p, m, i); +} + +int64_t +WasmEngineTime::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + return impl->runFunc64(funcName, p, m, i); +} + +std::vector +WasmEngineTime::runSha(std::string_view const data, int m, int i) +{ + return impl->runSha(data, m, i); +} + +std::int64_t +WasmEngineTime::setMeter(std::int64_t def) +{ + return impl->setMeter(def); +} + +std::int64_t +WasmEngineTime::setGas(std::int64_t gas, int m, int i) +{ + return impl->setGas(gas, m, i); +} + +std::int64_t +WasmEngineTime::getRemainingGas(int m, int i) +{ + return impl->getRemainingGas(m, i); +} + +int32_t +WasmEngineTime::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + return impl->runEnc(funcName, sv_res, data, m, i); +} + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmTimeVM.h b/src/xrpld/app/misc/WasmTimeVM.h new file mode 100644 index 00000000000..739d5bce6e9 --- /dev/null +++ b/src/xrpld/app/misc/WasmTimeVM.h @@ -0,0 +1,120 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +class WasmEngineTimeImpl; + +class WasmEngineTime final : public WasmEngine +{ + std::unique_ptr impl; + +public: + WasmEngineTime(); + virtual ~WasmEngineTime(); + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + int32_t input) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) override; + + virtual Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider) + override; + + virtual Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) override; + + Expected + justRun(std::string_view funcName, int m, int i) override; + + virtual int + addModule(vbytes const& wasmCode, bool instantiate) override; + virtual void + clearModules() override; + virtual int + addInstance(int m) override; + + virtual int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i) override; + + virtual int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i) + override; + + virtual std::vector + runSha(std::string_view const data, int m, int i) override; + + virtual int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) override; + + virtual std::int64_t + setMeter(std::int64_t def) override; + + virtual std::int64_t + setGas(std::int64_t gas, int m, int i) override; + + virtual std::int64_t + getRemainingGas(int m, int i) override; +}; + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmVM.cpp b/src/xrpld/app/misc/WasmVM.cpp new file mode 100644 index 00000000000..ae878f9836d --- /dev/null +++ b/src/xrpld/app/misc/WasmVM.cpp @@ -0,0 +1,109 @@ +//------------------------------------------------------------------------------ +/* + 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 +#include + +#include + +namespace ripple { + +static wasmEngines g_engine = wasmEngines::Edge; + +void +setWasmEngine(wasmEngines engine) +{ + g_engine = engine; + // printf("Set Engine: %d\n", static_cast(engine)); +} + +Expected +runEscrowWasm(vbytes const& wasmCode, std::string_view funcName, int32_t input) +{ + std::unique_ptr engine = WasmEngine::instance(); + return engine->run(wasmCode, funcName, input); +} + +Expected +runEscrowWasm( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + std::unique_ptr engine = WasmEngine::instance(); + return engine->run(wasmCode, funcName, accountID); +} + +Expected +runEscrowWasm( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + std::unique_ptr engine = WasmEngine::instance(); + return engine->run( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); +} + +Expected, TER> +runEscrowWasmP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + std::unique_ptr engine = WasmEngine::instance(); + return engine->runP4( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); +} + +Expected +runEscrowWasm( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + std::unique_ptr engine = WasmEngine::instance(); + return engine->run(wasmCode, funcName, ledgerDataProvider); +} + +std::unique_ptr +WasmEngine::instance() +{ + switch (g_engine) + { + case wasmEngines::Wamr: + return std::make_unique(); + case wasmEngines::I: + return std::make_unique(); + case wasmEngines::Er: + return std::make_unique(); + case wasmEngines::Time: + return std::make_unique(); + case wasmEngines::Edge: + default: + return std::make_unique(); + } +} + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmVM.h b/src/xrpld/app/misc/WasmVM.h new file mode 100644 index 00000000000..3e7a5a4006c --- /dev/null +++ b/src/xrpld/app/misc/WasmVM.h @@ -0,0 +1,271 @@ +//------------------------------------------------------------------------------ +/* + 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 + +#include +#include + +namespace ripple { + +using vbytes = std::vector; +struct vmem +{ + std::uint8_t* p = nullptr; + std::size_t s = 0; +}; + +static const std::string_view V_MEM = "memory"; +static const std::string_view V_STORE = "store"; +static const std::string_view V_LOAD = "load"; +static const std::string_view V_SIZE = "size"; + +static const std::string_view V_ALLOC = "allocate"; +static const std::string_view V_DEALLOC = "deallocate"; + +static const std::string_view VW_PROC_EXIT = "proc_exit"; + +static const unsigned MAX_IMPORT = 10; + +enum wasmEngines { Wamr, Edge, Time, Er, I, END }; +void setWasmEngine(wasmEngines); + +std::string_view constexpr wasmNames[] = + {"WAMR", "WasmEdge", "WasmTime", "Wasmer", "Wasmi"}; + +static_assert( + (sizeof(wasmNames) / sizeof(wasmNames[0])) == wasmEngines::END, + "wasmEngines / wasmNames unsync"); + +inline std::string_view +engineName(wasmEngines idx) +{ + return idx < wasmEngines::END ? wasmNames[idx] : ""; +} + +Expected +runEscrowWasm(vbytes const& wasmCode, std::string_view funcName, int32_t input); + +Expected +runEscrowWasmWTime( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input); + +Expected +runEscrowWasm( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID); + +Expected +runEscrowWasm( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + +Expected, TER> +runEscrowWasmP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + +struct LedgerDataProvider +{ + virtual int32_t + get_ledger_sqn() + { + return 1; + } + + virtual ~LedgerDataProvider() = default; +}; + +Expected +runEscrowWasm( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider); + +class WasmEngine +{ +protected: + std::array const implemented; + +public: + WasmEngine(std::array const& a) : implemented(a) + { + } + virtual ~WasmEngine() = default; + + bool + isImplemented(int tidx) const + { + return implemented[tidx]; + } + + virtual Expected + run(vbytes const& wasmCode, std::string_view funcName, int32_t input) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i = 0) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i = 0) + { + return Unexpected(tecFAILED_PROCESSING); + } + + virtual Expected + justRun(std::string_view funcName, int m, int i = 0) + { + return Unexpected(tecFAILED_PROCESSING); + } + + static std::unique_ptr + instance(); + + virtual int + addModule(vbytes const& wasmCode, bool instantiate = true) + { + return -1; + } + + virtual void + clearModules() + { + } + + virtual int + addInstance(int m) + { + return -1; + } + + virtual int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i = 0) + { + return -1; + } + + virtual int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i = 0) + { + return -1; + } + + virtual std::vector + runSha(std::string_view const data, int m, int i = 0) + { + return {}; + } + + virtual int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i = 0) + { + return -1; + } + + virtual std::int64_t + setMeter(std::int64_t def = 1'000'000'000'000LL) + { + return -1; + } + + // gas = 1'000'000'000LL + virtual std::int64_t + setGas(std::int64_t gas, int m, int i = 0) + { + return -1; + } + + virtual std::int64_t + getRemainingGas(int m, int i = 0) + { + return -1; + } +}; + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmerVM.cpp b/src/xrpld/app/misc/WasmerVM.cpp new file mode 100644 index 00000000000..80212ad3f1b --- /dev/null +++ b/src/xrpld/app/misc/WasmerVM.cpp @@ -0,0 +1,1320 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +////////////////////////////////////////////////////////////////////////////////////////// + +namespace { +static wasm_trap_t* +get_ledger_sqn(void* env, const wasm_val_vec_t*, wasm_val_vec_t* results) +{ + auto sqn = reinterpret_cast(env)->get_ledger_sqn(); + if (results->size) + { + results->data[0] = WASM_I32_VAL(sqn); + } + + return nullptr; +} + +static void +print_wasm_error(const char* message, wasm_trap_t* trap) +{ + fprintf(stderr, "error: %s\n", message); + wasm_byte_vec_t error_message; + + if (trap) + { + wasmer2_trap_message(trap, &error_message); + wasmer2_trap_delete(trap); + } + fprintf(stderr, "%.*s\n", (int)error_message.size, error_message.data); + wasmer2_byte_vec_delete(&error_message); +} + +// clang-format off +struct wsm_res +{ + wasm_val_vec_t r; + wsm_res(unsigned N = 0):r{0, nullptr} {if (N) wasmer2_val_vec_new_uninitialized(&r, N);} + ~wsm_res() { if (r.size) wasmer2_val_vec_delete(&r); } + wsm_res(wsm_res const &) = delete; + wsm_res& operator=(wsm_res const &) = delete; + + wsm_res(wsm_res &&o) {*this = std::move(o);} + wsm_res& operator=(wsm_res &&o){r = o.r; o.r = {0, nullptr}; return *this;} + //operator wasm_val_vec_t &() {return r;} +}; +// clang-format on + +using module_t = + std::unique_ptr; +using mod_inst_t = + std::unique_ptr; + +static wasm_trap_t* +_proc_exit(wasm_val_vec_t const* p, wasm_val_vec_t*) +{ + std::cout << "Exit called: " << std::to_string(p->data[0].of.i32) + << std::endl; + return nullptr; +} + +struct my_mod_inst_t +{ + wasm_extern_vec_t exports; + mod_inst_t mod_inst; + +private: + static void + checkImport( + wasm_extern_vec_t& out, + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t const& in) + { + wasm_importtype_vec_t impts = {0, nullptr}; + wasmer2_module_imports(m, &impts); + + unsigned inserted = 0; + for (int i = 0; i < impts.size; ++i) + { + auto const* impt(impts.data[i]); + + wasm_name_t const* name = wasmer2_importtype_name(impt); + wasm_externtype_t const* xtype = wasmer2_importtype_type(impt); + if (wasmer2_externtype_kind(xtype) == WASM_EXTERN_FUNC) + { + if (VW_PROC_EXIT == std::string_view(name->data, name->size)) + { + std::unique_ptr< + wasm_functype_t, + decltype(&wasmer2_functype_delete)> + ftype( + wasmer2_functype_new_1_0(wasmer2_valtype_new_i32()), + &wasmer2_functype_delete); + + wasm_func_t* func = + wasmer2_func_new(s, ftype.get(), &_proc_exit); + + out.data[inserted++] = wasmer2_func_as_extern(func); + break; + } + } + } + + if (inserted + in.size > MAX_IMPORT) + throw std::runtime_error( + std::string(engineName(wasmEngines::Time)) + + std::string(" Too small import buffer ")); + + for (int i = 0; i < in.size; ++i) + out.data[inserted++] = in.data[i]; + + out.size = inserted; + } + + static mod_inst_t + init( + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t* expt, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + { + wasm_trap_t* trap = nullptr; + + //////////////////////////////////////////////////////////////// + // check wasi + + wasm_extern_t* imp2_arr[MAX_IMPORT] = {nullptr}; + wasm_extern_vec_t imports2 = WASM_ARRAY_VEC(imp2_arr); + checkImport(imports2, s, m, imports); + + //////////////////////////////////////////////////////////////// + + mod_inst_t mi = mod_inst_t( + wasmer2_instance_new(s, m, &imports2, &trap), + &wasmer2_instance_delete); + if (!mi || trap) + { + print_wasm_error("can't create instance", trap); + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + ": can't create instance"); + } + wasmer2_instance_exports(mi.get(), expt); + return mi; + } + +public: + my_mod_inst_t() + : exports{0, nullptr}, mod_inst(nullptr, &wasmer2_instance_delete) + { + } + + my_mod_inst_t(my_mod_inst_t&& o) + : exports{0, nullptr}, mod_inst(nullptr, &wasmer2_instance_delete) + { + *this = std::move(o); + } + + my_mod_inst_t& + operator=(my_mod_inst_t&& o) + { + if (this == &o) + return *this; + + if (exports.size) + wasmer2_extern_vec_delete(&exports); + exports = o.exports; + o.exports = {0, nullptr}; + + mod_inst = std::move(o.mod_inst); + return *this; + } + + my_mod_inst_t( + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + : exports{0, nullptr}, mod_inst(init(s, m, &exports, imports)) + { + } + + ~my_mod_inst_t() + { + if (exports.size) + wasmer2_extern_vec_delete(&exports); + } + + operator bool() const + { + return static_cast(mod_inst); + } + + wasm_func_t* + getFunc( + std::string_view funcName, + wasm_exporttype_vec_t const& export_types) const + { + wasm_func_t* f = nullptr; + + if (!export_types.size) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + ": no export"); + if (export_types.size != exports.size) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + ": invalid export"); + + for (unsigned i = 0; i < export_types.size; ++i) + { + auto const* exp_type(export_types.data[i]); + + const wasm_externtype_t* exn_type = + wasmer2_exporttype_type(exp_type); + if (wasmer2_externtype_kind(exn_type) == WASM_EXTERN_FUNC) + { + wasm_name_t const* name = wasmer2_exporttype_name(exp_type); + if (funcName == std::string_view(name->data, name->size)) + { + auto* exn(exports.data[i]); + if (wasmer2_extern_kind(exn) != WASM_EXTERN_FUNC) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + ": invalid export"); + + f = wasmer2_extern_as_func(exn); + break; + } + } + } + + if (!f) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + ": can't find function " + std::string(funcName)); + + return f; + } + + vmem + getMem() const + { + wasm_memory_t* mem = nullptr; + for (unsigned i = 0; i < exports.size; ++i) + { + auto* e(exports.data[i]); + if (wasmer2_extern_kind(e) == WASM_EXTERN_MEMORY) + { + mem = wasmer2_extern_as_memory(e); + break; + } + } + + if (!mem) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + ": no memory exported"); + + return { + reinterpret_cast(wasmer2_memory_data(mem)), + wasmer2_memory_data_size(mem)}; + } +}; + +struct my_module_t +{ + module_t module; + std::vector mod_inst; + wasm_exporttype_vec_t export_types; + +private: + static module_t + init(wasm_store_t* s, vbytes const& wasmBin) + { + wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; + module_t m = + module_t(wasmer2_module_new(s, &code), &wasmer2_module_delete); + return m; + } + +public: + my_module_t() + : module(nullptr, &wasmer2_module_delete), export_types{0, nullptr} + { + } + + my_module_t(my_module_t&& o) + : module(nullptr, &wasmer2_module_delete), export_types{0, nullptr} + { + *this = std::move(o); + } + + my_module_t& + operator=(my_module_t&& o) + { + if (this == &o) + return *this; + module = std::move(o.module); + mod_inst = std::move(o.mod_inst); + + if (export_types.size) + wasmer2_exporttype_vec_delete(&export_types); + export_types = o.export_types; + o.export_types = {0, nullptr}; + + return *this; + } + + my_module_t( + wasm_store_t* s, + vbytes const& wasmBin, + bool instantiate, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + : module(init(s, wasmBin)), export_types{0, nullptr} + { + if (!module) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + " + can't create module"); + + wasmer2_module_exports(module.get(), &export_types); + + if (instantiate) + mod_inst.emplace_back(s, module.get(), imports); + } + + ~my_module_t() + { + if (export_types.size) + wasmer2_exporttype_vec_delete(&export_types); + } + + wasm_func_t* + getFunc(std::string_view funcName, int i) const + { + return mod_inst[i].getFunc(funcName, export_types); + } + + vmem + getMem(int i) const + { + return mod_inst[i].getMem(); + } + + int + addInstance( + wasm_store_t* s, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + { + for (int i = 0, e = mod_inst.size(); i < e; ++i) + { + auto& ins(mod_inst[i]); + if (!ins) + { + ins = {s, module.get(), imports}; + return i; + } + } + mod_inst.emplace_back(s, module.get(), imports); + return static_cast(mod_inst.size()) - 1; + } + + int + delInstance(int i) + { + if (i >= mod_inst.size()) + return -1; + if (!mod_inst[i]) + mod_inst[i] = my_mod_inst_t(); + return i; + } +}; + +} // namespace + +class WasmEngineErImpl +{ + // std::unique_ptr config = + // {nullptr, &wasmer2_config_delete}; + std::unique_ptr engine; + std::unique_ptr store; + std::vector modules; + // std::unique_ptr + // meter = {nullptr, &wasmer2_metering_delete}; + + wasm_trap_t* trap = nullptr; + +public: + WasmEngineErImpl(); + ~WasmEngineErImpl() = default; + + Expected + run(vbytes const& wasmCode, std::string_view funcName, int32_t input); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider); + + Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider); + + Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i); + + Expected + justRun(std::string_view funcName, int m, int i); + + int + addModule(vbytes const& wasmCode, bool instantiate); + void + clearModules() + { + modules.clear(); + store.reset(); + store = {wasmer2_store_new(engine.get()), &wasmer2_store_delete}; + } + int + addInstance(int m); + + int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i); + + int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i); + + std::vector + runSha(std::string_view const data, int m, int i); + + int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i); + + std::int64_t + setMeter(std::int64_t def); + + std::int64_t + setGas(std::int64_t gas, int m, int i); + + std::int64_t + getRemainingGas(int m, int i); + +protected: + int + makeModule( + vbytes const& wasmCode, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + + wasm_func_t* + getFunc(std::string_view funcName, int m, int i = 0); + + vmem + getMem(int m, int i = 0); + + inline void + add_param(std::vector& in, int32_t p); + inline void + add_param(std::vector& in, int64_t p); + + template + inline wsm_res + call(std::string_view func, int m, int i, Types... args); + + template + inline wsm_res + call(wasm_func_t* func, int m, int i, Types... args); + + template + wsm_res + call(wasm_func_t* f, int m, int i, std::vector& in); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args); +}; + +WasmEngineErImpl::WasmEngineErImpl() + : engine(wasmer2_engine_new(), &wasmer2_engine_delete) + , store(wasmer2_store_new(engine.get()), &wasmer2_store_delete) +{ +} + +int +WasmEngineErImpl::makeModule( + vbytes const& wasmCode, + wasm_extern_vec_t const& imports) +{ + modules.emplace_back(store.get(), wasmCode, true, imports); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineErImpl::addModule(vbytes const& wasmCode, bool instantiate) +{ + modules.emplace_back(store.get(), wasmCode, instantiate); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineErImpl::addInstance(int m) +{ + return modules[m].addInstance(store.get()); +} + +wasm_func_t* +WasmEngineErImpl::getFunc(std::string_view funcName, int m, int i) +{ + return modules[m].getFunc(funcName, i); +} + +vmem +WasmEngineErImpl::getMem(int m, int i) +{ + return modules[m].getMem(i); +} + +void +WasmEngineErImpl::add_param(std::vector& in, int32_t p) +{ + in.emplace_back(wasm_val_t WASM_I32_VAL(p)); +} + +void +WasmEngineErImpl::add_param(std::vector& in, int64_t p) +{ + in.emplace_back(wasm_val_t WASM_I64_VAL(p)); +} + +template +inline wsm_res +WasmEngineErImpl::call(std::string_view func, int m, int i, Types... args) +{ + // Lookup our export function + auto* f = getFunc(func, m, i); + return call(f, m, i, std::forward(args)...); +} + +template +wsm_res +WasmEngineErImpl::call(wasm_func_t* func, int m, int i, Types... args) +{ + std::vector in; + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineErImpl::call(wasm_func_t* func, int, int, std::vector& in) +{ + wsm_res ret(NR); + + wasm_val_vec_t const inv{in.size(), in.data()}; + trap = wasmer2_func_call(func, &inv, &ret.r); + if (trap) + print_wasm_error("failed to call func", trap); + + // assert(results[0].kind == WASM_I32); + // if (NR) printf("Result P5: %d\n", ret[0].of.i32); + + return ret; +} + +template +wsm_res +WasmEngineErImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineErImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineErImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args) +{ + auto const res = call<1>(V_ALLOC, m, i, static_cast(sz)); + if (trap || (res.r.data[0].kind != WASM_I32)) + return {}; + auto const ptr = res.r.data[0].of.i32; + + auto mem = getMem(m, i); + memcpy(mem.p + ptr, d, sz); + + add_param(in, ptr); + add_param(in, static_cast(sz)); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineErImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args) +{ + return call( + func, m, i, in, p.data(), p.size(), std::forward(args)...); +} + +Expected +WasmEngineErImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + // Call it! + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, input); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 != 0; +} + +Expected +WasmEngineErImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, accountID); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 == 1; +} + +Expected +WasmEngineErImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 == 1; +} + +Expected, TER> +WasmEngineErImpl::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRunP4(funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); +} + +Expected, TER> +WasmEngineErImpl::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + // return res.r.data[0].of.i32 == 1; + auto const ptr = res.r.data[0].of.i32; + std::uint8_t buf[16]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 9); + + auto const flag = buf[0]; + auto const ret_pointer = *reinterpret_cast(buf + 1); + auto const ret_len = *reinterpret_cast(buf + 5); + // printf("re flag %d, ptr %d, len %d\n", flag, ret_pointer, ret_len); + + vbytes buf2(ret_len); + memcpy(buf2.data(), mem.p + ret_pointer, ret_len); + + std::string newData(buf2.begin(), buf2.end()); + + call<0>(V_DEALLOC, m, i, ret_pointer, ret_len); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + call<0>(V_DEALLOC, m, i, ptr, 9); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + return std::pair(flag == 1, newData); +} + +Expected +WasmEngineErImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wasmer2_valtype_new_i32()); + std::unique_ptr ftype( + wasmer2_functype_new_0_1(vtype), &wasmer2_functype_delete); + + // std::unique_ptr func( + // wasmer2_func_new_with_env(store.get(),ftype.get(), + // &get_ledger_sqn, ledgerDataProvider, nullptr), + // &wasmer2_func_delete); + + wasm_func_t* func = wasmer2_func_new_with_env( + store.get(), ftype.get(), &get_ledger_sqn, ledgerDataProvider, nullptr); + + wasm_extern_t* arr[] = {wasmer2_func_as_extern(func)}; + wasm_extern_vec_t imports = WASM_ARRAY_VEC(arr); + int const m = makeModule(wasmCode, {imports}); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRun(funcName, ledgerDataProvider, m, i); +} + +Expected +WasmEngineErImpl::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wasmer2_valtype_new_i32()); + std::unique_ptr ftype( + wasmer2_functype_new_0_1(vtype), &wasmer2_functype_delete); + + wasm_func_t* func = wasmer2_func_new_with_env( + store.get(), ftype.get(), &get_ledger_sqn, ledgerDataProvider, nullptr); + + wasm_extern_t* arr[] = {wasmer2_func_as_extern(func)}; + wasm_extern_vec_t imports = WASM_ARRAY_VEC(arr); + int const m = makeModule(wasmCode, {imports}); + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return m; +} + +Expected +WasmEngineErImpl::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + return res.r.data[0].kind == WASM_I32 && res.r.data[0].of.i32; +} + +Expected +WasmEngineErImpl::justRun(std::string_view funcName, int m, int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + if (!res.r.size || trap || res.r.data[0].kind != WASM_I32) + return Unexpected(tecFAILED_PROCESSING); + + return res.r.data[0].of.i32; +} + +int32_t +WasmEngineErImpl::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + if (!f) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + std::string(" Can't find ") + funcName.data()); + + auto res = call<1>(f, m, i, p); + if (!res.r.size || trap) + return -1; + + return res.r.data[0].kind == WASM_I32 ? res.r.data[0].of.i32 : -1; +} + +int64_t +WasmEngineErImpl::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + if (!f) + throw std::runtime_error( + std::string(engineName(wasmEngines::Er)) + + std::string(" Can't find ") + funcName.data()); + + auto res = call<1>(f, m, i, p); + if (!res.r.size || trap) + return -1; + + return res.r.data[0].kind == WASM_I64 ? res.r.data[0].of.i64 : -1; +} + +std::vector +WasmEngineErImpl::runSha(std::string_view const data, int m, int i) +{ + std::string_view funcName = "sha512_process"; + auto* f = getFunc(funcName, m, i); + auto res = call<1>( + f, m, i, reinterpret_cast(data.data()), data.size()); + if (!res.r.size || trap) + return {}; + + auto const ptr = res.r.data[0].of.i32; + std::uint64_t buf[8]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 8 * sizeof(std::uint64_t)); + return {&buf[0], &buf[8]}; +} + +int32_t +WasmEngineErImpl::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + + sv_res.resize(1024); + auto resm = call<1>(V_ALLOC, m, i, static_cast(1000)); + + if (trap || (resm.r.data[0].kind != WASM_I32)) + return 0; + auto const ptrm = resm.r.data[0].of.i32; + + auto res = call<1>( + f, + m, + i, + ptrm, + 1000, + reinterpret_cast(data.data()), + data.size()); + if (!res.r.size || trap) + return 0; + + auto const sz = res.r.data[0].of.i32; + auto const mem = getMem(m, i); + memcpy(&sv_res[0], mem.p + ptrm, sz); + sv_res.resize(sz); + + return 1; +} + +static std::uint64_t +cost_fun(wasmer_parser_operator_t wasm_operator) +{ + switch (wasm_operator) + { + // `local.get` and `i32.const` cost 1 unit. + case LocalGet: + case I32Const: + return 1; + + // case I32Add: return 2; + + default: + return 1; + } +} + +std::int64_t +WasmEngineErImpl::setMeter(std::int64_t def) +{ + modules.clear(); + store.reset(); + engine.reset(); + + wasmer_metering_t* meter = + wasmer2_metering_new(static_cast(def), &cost_fun); + wasmer_middleware_t* middleware = wasmer2_metering_as_middleware(meter); + wasm_config_t* config = wasmer2_config_new(); + wasmer2_config_push_middleware(config, middleware); + + engine = {wasmer2_engine_new_with_config(config), &wasmer2_engine_delete}; + store = {wasmer2_store_new(engine.get()), &wasmer2_store_delete}; + + // assert(wasmer_metering_get_remaining_points(instance) == 6); + // assert(wasmer_metering_points_are_exhausted(instance) == false); + + return 0; +} + +std::int64_t +WasmEngineErImpl::setGas(std::int64_t gas, int m, int i) +{ + wasmer2_metering_set_remaining_points( + modules[m].mod_inst[i].mod_inst.get(), static_cast(gas)); + return gas; +} + +std::int64_t +WasmEngineErImpl::getRemainingGas(int m, int i) +{ + return static_cast(wasmer2_metering_get_remaining_points( + modules[m].mod_inst[i].mod_inst.get())); +} + +////////////////////////////////////////////////////////////////////////////////////////// + +WasmEngineEr::WasmEngineEr() + : WasmEngine( + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1}) + , impl(std::make_unique()) +{ +} + +WasmEngineEr::~WasmEngineEr() = default; + +Expected +WasmEngineEr::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + try + { + return impl->run(wasmCode, funcName, input); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEr::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + try + { + return impl->run(wasmCode, funcName, accountID); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEr::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->run( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineEr::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->runP4( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineEr::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + try + { + return impl->justRunP4( + funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEr::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->run(wasmCode, funcName, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEr::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->preRun(wasmCode, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEr::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + try + { + return impl->justRun(funcName, ledgerDataProvider, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineEr::justRun(std::string_view funcName, int m, int i) +{ + try + { + return impl->justRun(funcName, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +int +WasmEngineEr::addModule(vbytes const& wasmCode, bool instantiate) +{ + try + { + return impl->addModule(wasmCode, instantiate); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Er) << ": " << e.what() + << std::endl; + } + return -1; +} + +void +WasmEngineEr::clearModules() +{ + return impl->clearModules(); +} + +int +WasmEngineEr::addInstance(int m) +{ + try + { + return impl->addInstance(m); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::Er) << ": " << e.what() + << std::endl; + } + return -1; +} + +int32_t +WasmEngineEr::runFunc(std::string_view const funcName, int32_t p, int m, int i) +{ + return impl->runFunc(funcName, p, m, i); +} + +int64_t +WasmEngineEr::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + return impl->runFunc64(funcName, p, m, i); +} + +std::vector +WasmEngineEr::runSha(std::string_view const data, int m, int i) +{ + return impl->runSha(data, m, i); +} + +int32_t +WasmEngineEr::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + return impl->runEnc(funcName, sv_res, data, m, i); +} + +std::int64_t +WasmEngineEr::setMeter(std::int64_t def) +{ + return impl->setMeter(def); +} + +std::int64_t +WasmEngineEr::setGas(std::int64_t gas, int m, int i) +{ + return impl->setGas(gas, m, i); +} + +std::int64_t +WasmEngineEr::getRemainingGas(int m, int i) +{ + return impl->getRemainingGas(m, i); +} + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmerVM.h b/src/xrpld/app/misc/WasmerVM.h new file mode 100644 index 00000000000..c35c1ae28dc --- /dev/null +++ b/src/xrpld/app/misc/WasmerVM.h @@ -0,0 +1,120 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +class WasmEngineErImpl; + +class WasmEngineEr final : public WasmEngine +{ + std::unique_ptr impl; + +public: + WasmEngineEr(); + virtual ~WasmEngineEr(); + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + int32_t input) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) override; + + virtual Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider) + override; + + virtual Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) override; + + Expected + justRun(std::string_view funcName, int m, int i) override; + + virtual int + addModule(vbytes const& wasmCode, bool instantiate) override; + virtual void + clearModules() override; + virtual int + addInstance(int m) override; + + virtual int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i) override; + + virtual int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i) + override; + + virtual std::vector + runSha(std::string_view const data, int m, int i) override; + + virtual int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) override; + + virtual std::int64_t + setMeter(std::int64_t def) override; + + virtual std::int64_t + setGas(std::int64_t gas, int m, int i) override; + + virtual std::int64_t + getRemainingGas(int m, int i) override; +}; + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmiVM.cpp b/src/xrpld/app/misc/WasmiVM.cpp new file mode 100644 index 00000000000..d361c2969b8 --- /dev/null +++ b/src/xrpld/app/misc/WasmiVM.cpp @@ -0,0 +1,1221 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +////////////////////////////////////////////////////////////////////////////////////////// + +namespace { + +static wasm_trap_t* +get_ledger_sqn(void* env, const wasm_val_vec_t*, wasm_val_vec_t* results) +{ + auto sqn = reinterpret_cast(env)->get_ledger_sqn(); + if (results->size) + { + results->data[0] = WASM_I32_VAL(sqn); + } + + return nullptr; +} + +static void +print_wasm_error(const char* message, wasm_trap_t* trap) +{ + fprintf(stderr, "error: %s\n", message); + wasm_byte_vec_t error_message; + + if (trap) + { + wasmi2_trap_message(trap, &error_message); + wasmi2_trap_delete(trap); + } + fprintf(stderr, "%.*s\n", (int)error_message.size, error_message.data); + wasmi2_byte_vec_delete(&error_message); +} + +// clang-format off +struct wsm_res +{ + wasm_val_vec_t r; + wsm_res(unsigned N = 0):r{0, nullptr} {if (N) wasmi2_val_vec_new_uninitialized(&r, N);} + ~wsm_res() { if (r.size) wasmi2_val_vec_delete(&r); } + wsm_res(wsm_res const &) = delete; + wsm_res& operator=(wsm_res const &) = delete; + + wsm_res(wsm_res &&o) {*this = std::move(o);} + wsm_res& operator=(wsm_res &&o){r = o.r; o.r = {0, nullptr}; return *this;} + //operator wasm_val_vec_t &() {return r;} +}; +// clang-format on + +using module_t = + std::unique_ptr; +using mod_inst_t = + std::unique_ptr; + +static wasm_trap_t* +_proc_exit(wasm_val_vec_t const* p, wasm_val_vec_t*) +{ + std::cout << "Exit called: " << std::to_string(p->data[0].of.i32) + << std::endl; + return nullptr; +} + +struct my_mod_inst_t +{ + wasm_extern_vec_t exports; + mod_inst_t mod_inst; + +private: + static void + checkImport( + wasm_extern_vec_t& out, + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t const& in) + { + wasm_importtype_vec_t impts = {0, nullptr}; + wasmi2_module_imports(m, &impts); + + unsigned inserted = 0; + for (int i = 0; i < impts.size; ++i) + { + auto const* impt(impts.data[i]); + + wasm_name_t const* name = wasmi2_importtype_name(impt); + wasm_externtype_t const* xtype = wasmi2_importtype_type(impt); + if (wasmi2_externtype_kind(xtype) == WASM_EXTERN_FUNC) + { + if (VW_PROC_EXIT == std::string_view(name->data, name->size)) + { + std::unique_ptr< + wasm_functype_t, + decltype(&wasmi2_functype_delete)> + ftype( + wasmi2_functype_new_1_0(wasmi2_valtype_new_i32()), + &wasmi2_functype_delete); + + wasm_func_t* func = + wasmi2_func_new(s, ftype.get(), &_proc_exit); + + out.data[inserted++] = wasmi2_func_as_extern(func); + break; + } + } + } + + if (inserted + in.size > MAX_IMPORT) + throw std::runtime_error( + std::string(engineName(wasmEngines::Time)) + + std::string(" Too small import buffer ")); + + for (int i = 0; i < in.size; ++i) + out.data[inserted++] = in.data[i]; + + out.size = inserted; + } + + static mod_inst_t + init( + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t* expt, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + { + wasm_trap_t* trap = nullptr; + + //////////////////////////////////////////////////////////////// + // check wasi + + wasm_extern_t* imp2_arr[MAX_IMPORT] = {nullptr}; + wasm_extern_vec_t imports2 = WASM_ARRAY_VEC(imp2_arr); + checkImport(imports2, s, m, imports); + + //////////////////////////////////////////////////////////////// + + mod_inst_t mi = mod_inst_t( + wasmi2_instance_new(s, m, &imports2, &trap), + &wasmi2_instance_delete); + if (!mi || trap) + { + print_wasm_error("can't create instance", trap); + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + + ": can't create instance"); + } + wasmi2_instance_exports(mi.get(), expt); + return mi; + } + +public: + my_mod_inst_t() + : exports{0, nullptr}, mod_inst(nullptr, &wasmi2_instance_delete) + { + } + + my_mod_inst_t(my_mod_inst_t&& o) + : exports{0, nullptr}, mod_inst(nullptr, &wasmi2_instance_delete) + { + *this = std::move(o); + } + + my_mod_inst_t& + operator=(my_mod_inst_t&& o) + { + if (this == &o) + return *this; + + if (exports.size) + wasmi2_extern_vec_delete(&exports); + exports = o.exports; + o.exports = {0, nullptr}; + + mod_inst = std::move(o.mod_inst); + + return *this; + } + + my_mod_inst_t( + wasm_store_t* s, + wasm_module_t* m, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + : exports{0, nullptr}, mod_inst(init(s, m, &exports, imports)) + { + } + + ~my_mod_inst_t() + { + if (exports.size) + wasmi2_extern_vec_delete(&exports); + } + + operator bool() const + { + return static_cast(mod_inst); + } + + wasm_func_t* + getFunc( + std::string_view funcName, + wasm_exporttype_vec_t const& export_types) const + { + wasm_func_t* f = nullptr; + + if (!export_types.size) + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + ": no export"); + if (export_types.size != exports.size) + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + ": invalid export"); + + for (unsigned i = 0; i < export_types.size; ++i) + { + auto const* exp_type(export_types.data[i]); + + const wasm_externtype_t* exn_type = + wasmi2_exporttype_type(exp_type); + if (wasmi2_externtype_kind(exn_type) == WASM_EXTERN_FUNC) + { + wasm_name_t const* name = wasmi2_exporttype_name(exp_type); + if (funcName == std::string_view(name->data, name->size)) + { + auto* exn(exports.data[i]); + if (wasmi2_extern_kind(exn) != WASM_EXTERN_FUNC) + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + + ": invalid export"); + + f = wasmi2_extern_as_func(exn); + break; + } + } + } + + if (!f) + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + + ": can't find function " + std::string(funcName)); + + return f; + } + + vmem + getMem() const + { + wasm_memory_t* mem = nullptr; + for (unsigned i = 0; i < exports.size; ++i) + { + auto* e(exports.data[i]); + if (wasmi2_extern_kind(e) == WASM_EXTERN_MEMORY) + { + mem = wasmi2_extern_as_memory(e); + break; + } + } + + if (!mem) + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + + ": no memory exported"); + + return { + reinterpret_cast(wasmi2_memory_data(mem)), + wasmi2_memory_data_size(mem)}; + } +}; + +struct my_module_t +{ + module_t module; + std::vector mod_inst; + wasm_exporttype_vec_t export_types; + +private: + static module_t + init(wasm_store_t* s, vbytes const& wasmBin) + { + wasm_byte_vec_t const code{wasmBin.size(), (char*)(wasmBin.data())}; + module_t m = + module_t(wasmi2_module_new(s, &code), &wasmi2_module_delete); + return m; + } + +public: + my_module_t() + : module(nullptr, &wasmi2_module_delete), export_types{0, nullptr} + { + } + + my_module_t(my_module_t&& o) + : module(nullptr, &wasmi2_module_delete), export_types{0, nullptr} + { + *this = std::move(o); + } + + my_module_t& + operator=(my_module_t&& o) + { + if (this == &o) + return *this; + + module = std::move(o.module); + mod_inst = std::move(o.mod_inst); + + if (export_types.size) + wasmi2_exporttype_vec_delete(&export_types); + export_types = o.export_types; + o.export_types = {0, nullptr}; + + return *this; + } + + my_module_t( + wasm_store_t* s, + vbytes const& wasmBin, + bool instantiate, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + : module(init(s, wasmBin)), export_types{0, nullptr} + { + if (!module) + throw std::runtime_error( + std::string(engineName(wasmEngines::I)) + + " + can't create module"); + + wasmi2_module_exports(module.get(), &export_types); + + if (instantiate) + mod_inst.emplace_back(s, module.get(), imports); + } + + ~my_module_t() + { + if (export_types.size) + wasmi2_exporttype_vec_delete(&export_types); + } + + wasm_func_t* + getFunc(std::string_view funcName, int i) const + { + return mod_inst[i].getFunc(funcName, export_types); + } + + vmem + getMem(int i) const + { + return mod_inst[i].getMem(); + } + + int + addInstance( + wasm_store_t* s, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC) + { + for (int i = 0, e = mod_inst.size(); i < e; ++i) + { + auto& ins(mod_inst[i]); + if (!ins) + { + ins = {s, module.get(), imports}; + return i; + } + } + mod_inst.emplace_back(s, module.get(), imports); + return static_cast(mod_inst.size()) - 1; + } + + int + delInstance(int i) + { + if (i >= mod_inst.size()) + return -1; + if (!mod_inst[i]) + mod_inst[i] = my_mod_inst_t(); + return i; + } +}; + +} // namespace + +class WasmEngineIImpl +{ + std::unique_ptr engine; + std::unique_ptr store; + std::vector modules; + wasm_trap_t* trap = nullptr; + +public: + WasmEngineIImpl(); + ~WasmEngineIImpl() = default; + + Expected + run(vbytes const& wasmCode, std::string_view funcName, int32_t input); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data); + + Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i); + + Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider); + + Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider); + + Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i); + + Expected + justRun(std::string_view funcName, int m, int i); + + int + addModule(vbytes const& wasmCode, bool instantiate); + void + clearModules() + { + modules.clear(); + store.reset(); + store = {wasmi2_store_new(engine.get()), &wasmi2_store_delete}; + } + int + addInstance(int m); + + int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i); + + int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i); + + std::vector + runSha(std::string_view const data, int m, int i); + + int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i); + +protected: + int + makeModule( + vbytes const& wasmCode, + wasm_extern_vec_t const& imports = WASM_EMPTY_VEC); + + wasm_func_t* + getFunc(std::string_view funcName, int m, int i = 0); + + vmem + getMem(int m, int i = 0); + + inline void + add_param(std::vector& in, int32_t p); + inline void + add_param(std::vector& in, int64_t p); + + template + inline wsm_res + call(std::string_view func, int m, int i, Types... args); + + template + inline wsm_res + call(wasm_func_t* func, int m, int i, Types... args); + + template + inline wsm_res + call(wasm_func_t* f, int m, int i, std::vector& in); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args); + + template + inline wsm_res + call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args); +}; + +WasmEngineIImpl::WasmEngineIImpl() + : engine(wasmi2_engine_new(), &wasmi2_engine_delete) + , store(wasmi2_store_new(engine.get()), &wasmi2_store_delete) +{ +} + +int +WasmEngineIImpl::makeModule( + vbytes const& wasmCode, + wasm_extern_vec_t const& imports) +{ + modules.emplace_back(store.get(), wasmCode, true, imports); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineIImpl::addModule(vbytes const& wasmCode, bool instantiate) +{ + modules.emplace_back(store.get(), wasmCode, instantiate); + return static_cast(modules.size()) - 1; +} + +int +WasmEngineIImpl::addInstance(int m) +{ + return modules[m].addInstance(store.get()); +} + +wasm_func_t* +WasmEngineIImpl::getFunc(std::string_view funcName, int m, int i) +{ + return modules[m].getFunc(funcName, i); +} + +vmem +WasmEngineIImpl::getMem(int m, int i) +{ + return modules[m].getMem(i); +} + +void +WasmEngineIImpl::add_param(std::vector& in, int32_t p) +{ + in.emplace_back(wasm_val_t WASM_I32_VAL(p)); +} + +void +WasmEngineIImpl::add_param(std::vector& in, int64_t p) +{ + in.emplace_back(wasm_val_t WASM_I64_VAL(p)); +} + +template +wsm_res +WasmEngineIImpl::call(std::string_view func, int m, int i, Types... args) +{ + // Lookup our export function + auto* f = getFunc(func, m, i); + return call(f, m, i, std::forward(args)...); +} + +template +wsm_res +WasmEngineIImpl::call(wasm_func_t* func, int m, int i, Types... args) +{ + std::vector in; + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineIImpl::call(wasm_func_t* func, int, int, std::vector& in) +{ + wsm_res ret(NR); + + wasm_val_vec_t const inv{in.size(), in.data()}; + trap = wasmi2_func_call(func, &inv, &ret.r); + if (trap) + print_wasm_error("failed to call func", trap); + + // assert(results[0].kind == WASM_I32); + // if (NR) printf("Result P5: %d\n", ret[0].of.i32); + + return ret; +} + +template +wsm_res +WasmEngineIImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int32_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineIImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + std::int64_t p, + Types... args) +{ + add_param(in, p); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineIImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + uint8_t const* d, + std::size_t sz, + Types... args) +{ + auto const res = call<1>(V_ALLOC, m, i, static_cast(sz)); + if (trap || (res.r.data[0].kind != WASM_I32)) + return {}; + auto const ptr = res.r.data[0].of.i32; + + auto mem = getMem(m, i); + memcpy(mem.p + ptr, d, sz); + + add_param(in, ptr); + add_param(in, static_cast(sz)); + return call(func, m, i, in, std::forward(args)...); +} + +template +wsm_res +WasmEngineIImpl::call( + wasm_func_t* func, + int m, + int i, + std::vector& in, + vbytes const& p, + Types... args) +{ + return call( + func, m, i, in, p.data(), p.size(), std::forward(args)...); +} + +Expected +WasmEngineIImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + // Call it! + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, input); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 != 0; +} + +Expected +WasmEngineIImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, accountID); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 == 1; +} + +Expected +WasmEngineIImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + return res.r.data[0].of.i32 == 1; +} + +Expected, TER> +WasmEngineIImpl::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + // Create and instantiate the module. + int const m = makeModule(wasmCode); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRunP4(funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); +} + +Expected, TER> +WasmEngineIImpl::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, escrow_tx_json_data, escrow_lo_json_data); + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + assert(res.r.data[0].kind == WASM_I32); + // printf("Result: %d\n", results[0].of.i32); + // return res.r.data[0].of.i32 == 1; + auto const ptr = res.r.data[0].of.i32; + std::uint8_t buf[16]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 9); + + auto const flag = buf[0]; + auto const ret_pointer = *reinterpret_cast(buf + 1); + auto const ret_len = *reinterpret_cast(buf + 5); + // printf("re flag %d, ptr %d, len %d\n", flag, ret_pointer, ret_len); + + vbytes buf2(ret_len); + memcpy(buf2.data(), mem.p + ret_pointer, ret_len); + + std::string newData(buf2.begin(), buf2.end()); + + call<0>(V_DEALLOC, m, i, ret_pointer, ret_len); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + call<0>(V_DEALLOC, m, i, ptr, 9); + if (trap) + return Unexpected(tecFAILED_PROCESSING); + + return std::pair(flag == 1, newData); +} + +Expected +WasmEngineIImpl::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wasmi2_valtype_new_i32()); + std::unique_ptr ftype( + wasmi2_functype_new_0_1(vtype), &wasmi2_functype_delete); + + wasm_func_t* func = wasmi2_func_new_with_env( + store.get(), ftype.get(), &get_ledger_sqn, ledgerDataProvider, nullptr); + + wasm_extern_t* arr[] = {wasmi2_func_as_extern(func)}; + wasm_extern_vec_t imports = WASM_ARRAY_VEC(arr); + int const m = makeModule(wasmCode, {imports}); + int const i = 0; + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return justRun(funcName, ledgerDataProvider, m, i); +} + +Expected +WasmEngineIImpl::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + wasm_valtype_t* vtype(wasmi2_valtype_new_i32()); + std::unique_ptr ftype( + wasmi2_functype_new_0_1(vtype), &wasmi2_functype_delete); + + wasm_func_t* func = wasmi2_func_new_with_env( + store.get(), ftype.get(), &get_ledger_sqn, ledgerDataProvider, nullptr); + + wasm_extern_t* arr[] = {wasmi2_func_as_extern(func)}; + wasm_extern_vec_t imports = WASM_ARRAY_VEC(arr); + int const m = makeModule(wasmCode, {imports}); + if (m < 0) + return Unexpected(tecFAILED_PROCESSING); + + return m; +} + +Expected +WasmEngineIImpl::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + + if (!res.r.size || trap) + return Unexpected(tecFAILED_PROCESSING); + + return res.r.data[0].kind == WASM_I32 && res.r.data[0].of.i32; +} + +Expected +WasmEngineIImpl::justRun(std::string_view funcName, int m, int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i); + + if (!res.r.size || trap || res.r.data[0].kind != WASM_I32) + return Unexpected(tecFAILED_PROCESSING); + + return res.r.data[0].of.i32; +} + +int32_t +WasmEngineIImpl::runFunc( + std::string_view const funcName, + int32_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (!res.r.size || trap) + return -1; + + return res.r.data[0].kind == WASM_I32 ? res.r.data[0].of.i32 : -1; +} + +int64_t +WasmEngineIImpl::runFunc64( + std::string_view const funcName, + int64_t p, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + auto res = call<1>(f, m, i, p); + if (!res.r.size || trap) + return -1; + + return res.r.data[0].kind == WASM_I64 ? res.r.data[0].of.i64 : -1; +} + +std::vector +WasmEngineIImpl::runSha(std::string_view const data, int m, int i) +{ + std::string_view funcName = "sha512_process"; + auto* f = getFunc(funcName, m, i); + auto res = call<1>( + f, m, i, reinterpret_cast(data.data()), data.size()); + if (!res.r.size || trap) + return {}; + + auto const ptr = res.r.data[0].of.i32; + std::uint64_t buf[8]; + memset(buf, 0, sizeof(buf)); + + auto const mem = getMem(m, i); + memcpy(buf, mem.p + ptr, 8 * sizeof(std::uint64_t)); + return {&buf[0], &buf[8]}; +} + +int32_t +WasmEngineIImpl::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + auto* f = getFunc(funcName, m, i); + + sv_res.resize(1024); + auto resm = call<1>(V_ALLOC, m, i, static_cast(1000)); + + if (trap || (resm.r.data[0].kind != WASM_I32)) + return 0; + auto const ptrm = resm.r.data[0].of.i32; + + auto res = call<1>( + f, + m, + i, + ptrm, + 1000, + reinterpret_cast(data.data()), + data.size()); + if (!res.r.size || trap) + return 0; + + auto const sz = res.r.data[0].of.i32; + auto const mem = getMem(m, i); + memcpy(&sv_res[0], mem.p + ptrm, sz); + sv_res.resize(sz); + + return 1; +} + +////////////////////////////////////////////////////////////////////////////////////////// + +WasmEngineI::WasmEngineI() + : WasmEngine( + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}) + , impl(std::make_unique()) + +{ +} + +WasmEngineI::~WasmEngineI() = default; + +Expected +WasmEngineI::run( + vbytes const& wasmCode, + std::string_view funcName, + int32_t input) +{ + try + { + return impl->run(wasmCode, funcName, input); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineI::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) +{ + try + { + return impl->run(wasmCode, funcName, accountID); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineI::run( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->run( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineI::runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) +{ + try + { + return impl->runP4( + wasmCode, funcName, escrow_tx_json_data, escrow_lo_json_data); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected, TER> +WasmEngineI::justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) +{ + try + { + return impl->justRunP4( + funcName, escrow_tx_json_data, escrow_lo_json_data, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineI::run( + vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->run(wasmCode, funcName, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineI::preRun( + vbytes const& wasmCode, + LedgerDataProvider* ledgerDataProvider) +{ + try + { + return impl->preRun(wasmCode, ledgerDataProvider); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineI::justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) +{ + try + { + return impl->justRun(funcName, ledgerDataProvider, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +Expected +WasmEngineI::justRun(std::string_view funcName, int m, int i) +{ + try + { + return impl->justRun(funcName, m, i); + } + catch (std::exception const&) + { + } + return Unexpected(tecFAILED_PROCESSING); +} + +int +WasmEngineI::addModule(vbytes const& wasmCode, bool instantiate) +{ + try + { + return impl->addModule(wasmCode, instantiate); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::I) << ": " << e.what() + << std::endl; + } + return -1; +} + +void +WasmEngineI::clearModules() +{ + return impl->clearModules(); +} + +int +WasmEngineI::addInstance(int m) +{ + try + { + return impl->addInstance(m); + } + catch (std::exception const& e) + { + std::cerr << engineName(wasmEngines::I) << ": " << e.what() + << std::endl; + } + return -1; +} + +int32_t +WasmEngineI::runFunc(std::string_view const funcName, int32_t p, int m, int i) +{ + return impl->runFunc(funcName, p, m, i); +} + +int64_t +WasmEngineI::runFunc64(std::string_view const funcName, int64_t p, int m, int i) +{ + return impl->runFunc64(funcName, p, m, i); +} + +std::vector +WasmEngineI::runSha(std::string_view const data, int m, int i) +{ + return impl->runSha(data, m, i); +} + +int32_t +WasmEngineI::runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) +{ + return impl->runEnc(funcName, sv_res, data, m, i); +} + +} // namespace ripple diff --git a/src/xrpld/app/misc/WasmiVM.h b/src/xrpld/app/misc/WasmiVM.h new file mode 100644 index 00000000000..212f22e3cd8 --- /dev/null +++ b/src/xrpld/app/misc/WasmiVM.h @@ -0,0 +1,111 @@ +//------------------------------------------------------------------------------ +/* + 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 + +namespace ripple { + +class WasmEngineIImpl; + +class WasmEngineI final : public WasmEngine +{ + std::unique_ptr impl; + +public: + WasmEngineI(); + virtual ~WasmEngineI(); + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + int32_t input) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& accountID) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + runP4( + vbytes const& wasmCode, + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data) override; + + virtual Expected, TER> + justRunP4( + std::string_view funcName, + vbytes const& escrow_tx_json_data, + vbytes const& escrow_lo_json_data, + int m, + int i) override; + + virtual Expected + run(vbytes const& wasmCode, + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider) override; + + virtual Expected + preRun(vbytes const& wasmCode, LedgerDataProvider* ledgerDataProvider) + override; + + virtual Expected + justRun( + std::string_view funcName, + LedgerDataProvider* ledgerDataProvider, + int m, + int i) override; + + Expected + justRun(std::string_view funcName, int m, int i) override; + + virtual int + addModule(vbytes const& wasmCode, bool instantiate) override; + virtual void + clearModules() override; + virtual int + addInstance(int m) override; + + virtual int32_t + runFunc(std::string_view const funcName, int32_t p, int m, int i) override; + + virtual int64_t + runFunc64(std::string_view const funcName, int64_t p, int m, int i) + override; + + virtual std::vector + runSha(std::string_view const data, int m, int i) override; + + virtual int32_t + runEnc( + std::string_view const funcName, + std::string& sv_res, + std::string_view const data, + int m, + int i) override; +}; + +} // namespace ripple diff --git a/src/xrpld/app/tx/detail/Escrow.cpp b/src/xrpld/app/tx/detail/Escrow.cpp index 48b9867d3a0..07e1c70de00 100644 --- a/src/xrpld/app/tx/detail/Escrow.cpp +++ b/src/xrpld/app/tx/detail/Escrow.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -97,9 +98,18 @@ EscrowCreate::makeTxConsequences(PreflightContext const& ctx) return TxConsequences{ctx.tx, ctx.tx[sfAmount].xrp()}; } +// TODO: add calculateBaseFee + NotTEC EscrowCreate::preflight(PreflightContext const& ctx) { + if (ctx.tx.isFieldPresent(sfFinishFunction) && + !ctx.rules.enabled(featureEscrowExtensions)) + { + JLOG(ctx.j.debug()) << "EscrowExtensions not enabled"; + return temDISABLED; + } + if (ctx.rules.enabled(fix1543) && ctx.tx.getFlags() & tfUniversalMask) return temINVALID_FLAG; @@ -154,6 +164,17 @@ EscrowCreate::preflight(PreflightContext const& ctx) return temDISABLED; } + if (ctx.tx.isFieldPresent(sfFinishFunction)) + { + auto const code = ctx.tx.getFieldVL(sfFinishFunction); + if (code.size() == 0 /* && code.size() > whateverTheMaxIs */) + { + JLOG(ctx.j.debug()) << "EscrowCreate.FinishFunction bad size"; + return temMALFORMED; + } + // TODO: add check to ensure this is valid WASM code + } + return preflight2(ctx); } @@ -254,6 +275,8 @@ EscrowCreate::doApply() (*slep)[~sfCancelAfter] = ctx_.tx[~sfCancelAfter]; (*slep)[~sfFinishAfter] = ctx_.tx[~sfFinishAfter]; (*slep)[~sfDestinationTag] = ctx_.tx[~sfDestinationTag]; + (*slep)[~sfFinishFunction] = ctx_.tx[~sfFinishFunction]; + (*slep)[~sfData] = ctx_.tx[~sfData]; ctx_.view().insert(slep); @@ -384,6 +407,22 @@ EscrowFinish::preclaim(PreclaimContext const& ctx) return tesSUCCESS; } +struct EscrowLedgerDataProvider : public LedgerDataProvider +{ + ApplyView& view_; + +public: + EscrowLedgerDataProvider(ApplyView& view) : view_(view) + { + } + + int32_t + get_ledger_sqn() override + { + return (int32_t)view_.seq(); + } +}; + TER EscrowFinish::doApply() { @@ -401,11 +440,17 @@ EscrowFinish::doApply() // Too soon: can't execute before the finish time if ((*slep)[~sfFinishAfter] && !after(now, (*slep)[sfFinishAfter])) + { + JLOG(j_.debug()) << "Too soon"; return tecNO_PERMISSION; + } // Too late: can't execute after the cancel time if ((*slep)[~sfCancelAfter] && after(now, (*slep)[sfCancelAfter])) + { + JLOG(j_.debug()) << "Too late"; return tecNO_PERMISSION; + } } else { @@ -413,13 +458,19 @@ EscrowFinish::doApply() if ((*slep)[~sfFinishAfter] && ctx_.view().info().parentCloseTime.time_since_epoch().count() <= (*slep)[sfFinishAfter]) + { + JLOG(j_.debug()) << "Too soon?"; return tecNO_PERMISSION; + } // Too late? if ((*slep)[~sfCancelAfter] && ctx_.view().info().parentCloseTime.time_since_epoch().count() <= (*slep)[sfCancelAfter]) + { + JLOG(j_.debug()) << "Too late?"; return tecNO_PERMISSION; + } } // Check cryptocondition fulfillment @@ -482,6 +533,45 @@ EscrowFinish::doApply() return err; } + // Execute extension + if ((*slep)[~sfFinishFunction]) + { + JLOG(j_.fatal()) << "HAS FINISH FUNCTION"; + // WASM execution + auto const wasmStr = slep->getFieldVL(sfFinishFunction); + std::vector wasm(wasmStr.begin(), wasmStr.end()); + std::string funcName("ready"); + + auto const escrowTx = + ctx_.tx.getJson(JsonOptions::none).toStyledString(); + auto const escrowObj = + slep->getJson(JsonOptions::none).toStyledString(); + // JLOG(j_.fatal()) << escrowTx; + // JLOG(j_.fatal()) << escrowObj; + std::vector escrowTxData(escrowTx.begin(), escrowTx.end()); + std::vector escrowObjData(escrowObj.begin(), escrowObj.end()); + + EscrowLedgerDataProvider ledgerDataProvider(ctx_.view()); + + auto re = runEscrowWasm(wasm, funcName, &ledgerDataProvider); + JLOG(j_.fatal()) << "ESCROW RAN"; + if (re.has_value()) + { + auto reValue = re.value(); + JLOG(j_.fatal()) << "Success: " + std::to_string(reValue); + if (!reValue) + { + // ctx_.view().update(slep); + return tecWASM_REJECTED; + } + } + else + { + JLOG(j_.fatal()) << "Failure: " + transHuman(re.error()); + return re.error(); + } + } + AccountID const account = (*slep)[sfAccount]; // Remove escrow from owner directory diff --git a/src/xrpld/app/tx/detail/Transactor.cpp b/src/xrpld/app/tx/detail/Transactor.cpp index 9d3e9e39460..ab45ee69259 100644 --- a/src/xrpld/app/tx/detail/Transactor.cpp +++ b/src/xrpld/app/tx/detail/Transactor.cpp @@ -831,6 +831,27 @@ removeExpiredCredentials( } } +static void +modifyWasmDataFields( + ApplyView& view, + std::vector> const& wasmObjects, + beast::Journal viewJ) +{ + for (auto const& value : wasmObjects) + { + auto const& index = value.first; + auto const& data = value.second; + // JLOG(viewJ.fatal()) << index << strHex(data); + if (auto const sle = view.peek(keylet::escrow(index))) + { + // JLOG(viewJ.fatal()) << "modifyWasmDataFields: escrow " << + // strHex(data); + sle->setFieldVL(sfData, data); + view.update(sle); + } + } +} + static void removeDeletedTrustLines( ApplyView& view, @@ -973,6 +994,7 @@ Transactor::operator()() else if ( (result == tecOVERSIZE) || (result == tecKILLED) || (result == tecINCOMPLETE) || (result == tecEXPIRED) || + (result == tecWASM_REJECTED) || (isTecClaimHardFail(result, view().flags()))) { JLOG(j_.trace()) << "reapplying because of " << transToken(result); @@ -985,13 +1007,16 @@ Transactor::operator()() std::vector removedTrustLines; std::vector expiredNFTokenOffers; std::vector expiredCredentials; + std::vector> modifiedWasmObjects; bool const doOffers = ((result == tecOVERSIZE) || (result == tecKILLED)); bool const doLines = (result == tecINCOMPLETE); bool const doNFTokenOffers = (result == tecEXPIRED); bool const doCredentials = (result == tecEXPIRED); - if (doOffers || doLines || doNFTokenOffers || doCredentials) + bool const doWasmData = (result == tecWASM_REJECTED); + if (doOffers || doLines || doNFTokenOffers || doCredentials || + doWasmData) { ctx_.visit([doOffers, &removedOffers, @@ -1000,7 +1025,9 @@ Transactor::operator()() doNFTokenOffers, &expiredNFTokenOffers, doCredentials, - &expiredCredentials]( + &expiredCredentials, + doWasmData, + &modifiedWasmObjects]( uint256 const& index, bool isDelete, std::shared_ptr const& before, @@ -1035,6 +1062,18 @@ Transactor::operator()() (before->getType() == ltCREDENTIAL)) expiredCredentials.push_back(index); } + + if (doWasmData && before && after && + (before->getType() == ltESCROW)) + { + // std::cout << "doWasmData " << + // strHex(before->getFieldVL(sfData)) << " " << + // strHex(after->getFieldVL(sfData)) << std::endl; std::cout + // << "doWasmData \n" << before->getFullText() << std::endl + // << after->getFullText() << std::endl; + modifiedWasmObjects.push_back( + std::make_pair(index, after->getFieldVL(sfData))); + } }); } @@ -1064,6 +1103,10 @@ Transactor::operator()() removeExpiredCredentials( view(), expiredCredentials, ctx_.app.journal("View")); + if (result == tecWASM_REJECTED) + modifyWasmDataFields( + view(), modifiedWasmObjects, ctx_.app.journal("View")); + applied = isTecClaim(result); }