diff --git a/.gitmodules b/.gitmodules index 5a54aed4e..e2088dbd5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,7 +28,7 @@ url = https://github.com/LuisaGroup/reproc.git [submodule "src/ext/marl"] path = src/ext/marl - url = https://github.com/LuisaGroup/marl.git -[submodule "src/ext/yyjson"] - path = src/ext/yyjson - url = https://github.com/ibireme/yyjson.git + url = https://github.com/LuisaGroup/marl.git +[submodule "src/ext/yyjson"] + path = src/ext/yyjson + url = https://github.com/ibireme/yyjson.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b765607f..720dccc79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,12 +29,12 @@ if (NOT SKBUILD AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.cmake") else () option(LUISA_COMPUTE_ENABLE_DSL "Enable C++ DSL" ON) option(LUISA_COMPUTE_ENABLE_TENSOR "Enable C++ DSL tensor extension" ON) - option(LUISA_COMPUTE_ENABLE_DX "Enable DirectX backend" OFF) - option(LUISA_COMPUTE_ENABLE_METAL "Enable Metal backend" OFF) + option(LUISA_COMPUTE_ENABLE_DX "Enable DirectX backend" ON) + option(LUISA_COMPUTE_ENABLE_METAL "Enable Metal backend" ON) option(LUISA_COMPUTE_ENABLE_CUDA "Enable CUDA backend" ON) option(LUISA_COMPUTE_ENABLE_CUDA_EXT_LCUB "Enable CUDA extension: LCUB" OFF) option(LUISA_COMPUTE_ENABLE_VULKAN "Enable Vulkan backend" OFF) - option(LUISA_COMPUTE_ENABLE_CPU "Enable CPU backend" OFF) + option(LUISA_COMPUTE_ENABLE_CPU "Enable CPU backend" ON) option(LUISA_COMPUTE_ENABLE_FALLBACK "Enable Fallback backend" ON) option(LUISA_COMPUTE_ENABLE_REMOTE "Enable Remote backend" ON) option(LUISA_COMPUTE_ENABLE_GUI "Enable GUI support" ON) diff --git a/include/luisa/ast/op.h b/include/luisa/ast/op.h index 276c0031e..740ea80e1 100644 --- a/include/luisa/ast/op.h +++ b/include/luisa/ast/op.h @@ -372,9 +372,12 @@ enum struct CallOp : uint32_t { // SER SHADER_EXECUTION_REORDER,// (uint hint, uint hint_bits): void + + // Clock + CLOCK, // (): uint64 }; -static constexpr size_t call_op_count = to_underlying(CallOp::SHADER_EXECUTION_REORDER) + 1u; +static constexpr size_t call_op_count = to_underlying(CallOp::CLOCK) + 1u; [[nodiscard]] constexpr auto is_atomic_operation(CallOp op) noexcept { auto op_value = luisa::to_underlying(op); diff --git a/include/luisa/core/intrin.h b/include/luisa/core/intrin.h index e63fee0e6..e080f30a0 100644 --- a/include/luisa/core/intrin.h +++ b/include/luisa/core/intrin.h @@ -1,54 +1,44 @@ -#pragma once - -#if defined(__x86_64__) || defined(_M_X64) -#define LUISA_ARCH_X86_64 -#elif defined(__aarch64__) -#define LUISA_ARCH_ARM64 -#else -#error Unsupported architecture -#endif - -#if defined(LUISA_ARCH_X86_64) - -#include -#include -#include - -#define LUISA_INTRIN_PAUSE() _mm_pause() - -namespace luisa { -using float16_t = int16_t; -using float32x4_t = __m128; -}// namespace luisa - -#elif defined(LUISA_ARCH_ARM64) - -#include - -namespace luisa { -using float16_t = ::float16_t; -using float32x4_t = ::float32x4_t; -}// namespace luisa - -#define LUISA_INTRIN_PAUSE() asm volatile("isb") - -#else - -#include -#define LUISA_INTRIN_PAUSE() std::this_thread::yield() - -#endif - -////////////// assume -#ifdef NDEBUG // assume only enabled in non-debug mode. -#if defined(__clang__)// Clang -#define LUISA_ASSUME(x) (__builtin_assume(x)) -#elif defined(_MSC_VER)// MSVC -#define LUISA_ASSUME(x) (__assume(x)) -#else// GCC -#define LUISA_ASSUME(x) \ - if (!(x)) __builtin_unreachable() -#endif -#else -#define LUISA_ASSUME(expression) assert(expression) -#endif \ No newline at end of file +#pragma once + +#if defined(__x86_64__) || defined(_M_X64) +#define LUISA_ARCH_X86_64 +#elif defined(__aarch64__) +#define LUISA_ARCH_ARM64 +#else +#error Unsupported architecture +#endif + +#if defined(LUISA_ARCH_X86_64) + +#include +#include +#include + +#define LUISA_INTRIN_PAUSE() _mm_pause() + +#elif defined(LUISA_ARCH_ARM64) + +#include + +#define LUISA_INTRIN_PAUSE() asm volatile("isb") + +#else + +#include +#define LUISA_INTRIN_PAUSE() std::this_thread::yield() + +#endif + +////////////// assume +#ifdef NDEBUG // assume only enabled in non-debug mode. +#if defined(__clang__)// Clang +#define LUISA_ASSUME(x) (__builtin_assume(x)) +#elif defined(_MSC_VER)// MSVC +#define LUISA_ASSUME(x) (__assume(x)) +#else// GCC +#define LUISA_ASSUME(x) \ + if (!(x)) __builtin_unreachable() +#endif +#else +#define LUISA_ASSUME(expression) assert(expression) +#endif diff --git a/include/luisa/dsl/builtin.h b/include/luisa/dsl/builtin.h index 046e916b6..cd02a6e67 100644 --- a/include/luisa/dsl/builtin.h +++ b/include/luisa/dsl/builtin.h @@ -60,6 +60,11 @@ inline void unreachable(luisa::string_view msg) noexcept { detail::FunctionBuilder::current()->call(CallOp::UNREACHABLE, {message}); } +inline ULong device_clock() noexcept { + return def(detail::FunctionBuilder::current()->call( + Type::of(), CallOp::CLOCK, {})); +} + /// Call assert in device code inline void device_assert(Expr pred) noexcept { detail::FunctionBuilder::current()->call( diff --git a/include/luisa/runtime/command_list.h b/include/luisa/runtime/command_list.h index 14aa82a6a..17fdae981 100644 --- a/include/luisa/runtime/command_list.h +++ b/include/luisa/runtime/command_list.h @@ -1,67 +1,69 @@ -#pragma once - -#include -#include -#include -#include - -#ifdef LUISA_ENABLE_API -#include -#endif -namespace lc::validation { -class Device; -}// namespace lc::validation -namespace luisa::compute { - -class LC_RUNTIME_API CommandList : concepts::Noncopyable { - friend class lc::validation::Device; - -public: - class Commit; - using CommandContainer = luisa::vector>; - using CallbackContainer = luisa::vector>; - -private: - CommandContainer _commands; - CallbackContainer _callbacks; - bool _committed{false}; - -public: - CommandList() noexcept = default; - ~CommandList() noexcept; - CommandList(CommandList &&another) noexcept; - CommandList &operator=(CommandList &&rhs) noexcept = delete; - [[nodiscard]] static CommandList create(size_t reserved_command_size = 0u, - size_t reserved_callback_size = 0u) noexcept; - - void reserve(size_t command_size, size_t callback_size) noexcept; - CommandList &operator<<(luisa::unique_ptr &&cmd) noexcept; - CommandList &append(luisa::unique_ptr &&cmd) noexcept; - CommandList &add_callback(luisa::move_only_function &&callback) noexcept; - void clear() noexcept; - [[nodiscard]] auto commands() const noexcept { return luisa::span{_commands}; } - [[nodiscard]] auto callbacks() const noexcept { return luisa::span{_callbacks}; } - [[nodiscard]] CommandContainer steal_commands() noexcept; - [[nodiscard]] CallbackContainer steal_callbacks() noexcept; - [[nodiscard]] auto empty() const noexcept { return _commands.empty() && _callbacks.empty(); } - [[nodiscard]] Commit commit() noexcept; -}; - -class CommandList::Commit { - -private: - CommandList _list; - -private: - friend class CommandList; - explicit Commit(CommandList &&list) noexcept - : _list{std::move(list)} {} - Commit(Commit &&) noexcept = default; - -public: - Commit &operator=(Commit &&) noexcept = delete; - Commit &operator=(const Commit &) noexcept = delete; - [[nodiscard]] auto command_list() && noexcept { return std::move(_list); } -}; - -}// namespace luisa::compute +#pragma once + +#include +#include +#include +#include + +#ifdef LUISA_ENABLE_API +#include +#endif + +namespace lc::validation { +class Device; +}// namespace lc::validation + +namespace luisa::compute { + +class LC_RUNTIME_API CommandList : concepts::Noncopyable { + friend class lc::validation::Device; + +public: + class Commit; + using CommandContainer = luisa::vector>; + using CallbackContainer = luisa::vector>; + +private: + CommandContainer _commands; + CallbackContainer _callbacks; + bool _committed{false}; + +public: + CommandList() noexcept = default; + ~CommandList() noexcept; + CommandList(CommandList &&another) noexcept; + CommandList &operator=(CommandList &&rhs) noexcept = delete; + [[nodiscard]] static CommandList create(size_t reserved_command_size = 0u, + size_t reserved_callback_size = 0u) noexcept; + + void reserve(size_t command_size, size_t callback_size) noexcept; + CommandList &operator<<(luisa::unique_ptr &&cmd) noexcept; + CommandList &append(luisa::unique_ptr &&cmd) noexcept; + CommandList &add_callback(luisa::move_only_function &&callback) noexcept; + void clear() noexcept; + [[nodiscard]] auto commands() const noexcept { return luisa::span{_commands}; } + [[nodiscard]] auto callbacks() const noexcept { return luisa::span{_callbacks}; } + [[nodiscard]] CommandContainer steal_commands() noexcept; + [[nodiscard]] CallbackContainer steal_callbacks() noexcept; + [[nodiscard]] auto empty() const noexcept { return _commands.empty() && _callbacks.empty(); } + [[nodiscard]] Commit commit() noexcept; +}; + +class CommandList::Commit { + +private: + CommandList _list; + +private: + friend class CommandList; + explicit Commit(CommandList &&list) noexcept + : _list{std::move(list)} {} + Commit(Commit &&) noexcept = default; + +public: + Commit &operator=(Commit &&) noexcept = delete; + Commit &operator=(const Commit &) noexcept = delete; + [[nodiscard]] auto command_list() && noexcept { return std::move(_list); } +}; + +}// namespace luisa::compute diff --git a/include/luisa/runtime/rhi/command.h b/include/luisa/runtime/rhi/command.h index c669cc617..040f32b66 100644 --- a/include/luisa/runtime/rhi/command.h +++ b/include/luisa/runtime/rhi/command.h @@ -612,6 +612,7 @@ class AccelBuildCommand final : public Command { [[nodiscard]] auto request() const noexcept { return _request; } [[nodiscard]] auto instance_count() const noexcept { return _instance_count; } [[nodiscard]] auto modifications() const noexcept { return luisa::span{_modifications}; } + [[nodiscard]] auto steal_modifications() noexcept { return std::move(_modifications); } [[nodiscard]] auto update_instance_buffer_only() const noexcept { return _update_instance_buffer_only; } LUISA_MAKE_COMMAND_COMMON(StreamTag::COMPUTE) }; diff --git a/include/luisa/runtime/rhi/resource.h b/include/luisa/runtime/rhi/resource.h index 27b2dd1ac..cb24289de 100644 --- a/include/luisa/runtime/rhi/resource.h +++ b/include/luisa/runtime/rhi/resource.h @@ -60,7 +60,6 @@ struct SwapchainCreationInfo : public ResourceCreationInfo { }; struct ShaderCreationInfo : public ResourceCreationInfo { - // luisa::string name; uint3 block_size; [[nodiscard]] static auto make_invalid() noexcept { diff --git a/include/luisa/xir/ilist.h b/include/luisa/xir/ilist.h index 345a7ff00..c743dbc19 100644 --- a/include/luisa/xir/ilist.h +++ b/include/luisa/xir/ilist.h @@ -146,6 +146,7 @@ class IntrusiveNode : public Base { assert(!is_head_sentinel() && "Inserting before a head sentinel."); node->_prev = _prev; node->_next = static_cast(this); + _prev->_next = node; _prev = node; } virtual void insert_after_self(T *node) noexcept { @@ -153,6 +154,7 @@ class IntrusiveNode : public Base { assert(!is_tail_sentinel() && "Inserting after a tail sentinel."); node->_next = _next; node->_prev = static_cast(this); + _next->_prev = node; _next = node; } }; diff --git a/include/luisa/xir/instructions/intrinsic.h b/include/luisa/xir/instructions/intrinsic.h index f3ebb68ca..9c204d10a 100644 --- a/include/luisa/xir/instructions/intrinsic.h +++ b/include/luisa/xir/instructions/intrinsic.h @@ -181,11 +181,11 @@ enum struct IntrinsicOp { BINDLESS_TEXTURE2D_SAMPLE, // (bindless_array, index: uint, uv: float2): float4 BINDLESS_TEXTURE2D_SAMPLE_LEVEL, // (bindless_array, index: uint, uv: float2, level: float): float4 BINDLESS_TEXTURE2D_SAMPLE_GRAD, // (bindless_array, index: uint, uv: float2, ddx: float2, ddy: float2): float4 - BINDLESS_TEXTURE2D_SAMPLE_GRAD_LEVEL,// (bindless_array, index: uint, uv: float2, ddx: float2, ddy: float2, mip_clamp: float): float4 + BINDLESS_TEXTURE2D_SAMPLE_GRAD_LEVEL,// (bindless_array, index: uint, uv: float2, ddx: float2, ddy: float2, mip_clamp: float): float4 BINDLESS_TEXTURE3D_SAMPLE, // (bindless_array, index: uint, uv: float3): float4 BINDLESS_TEXTURE3D_SAMPLE_LEVEL, // (bindless_array, index: uint, uv: float3, level: float): float4 BINDLESS_TEXTURE3D_SAMPLE_GRAD, // (bindless_array, index: uint, uv: float3, ddx: float3, ddy: float3): float4 - BINDLESS_TEXTURE3D_SAMPLE_GRAD_LEVEL,// (bindless_array, index: uint, uv: float3, ddx: float3, ddy: float3, mip_clamp: float): float4 + BINDLESS_TEXTURE3D_SAMPLE_GRAD_LEVEL,// (bindless_array, index: uint, uv: float3, ddx: float3, ddy: float3, mip_clamp: float): float4 BINDLESS_TEXTURE2D_SAMPLE_SAMPLER, // (bindless_array, index: uint, uv: float2, filter: uint, level: uint): float4 BINDLESS_TEXTURE2D_SAMPLE_LEVEL_SAMPLER, // (bindless_array, index: uint, uv: float2, level: float, filter: uint, level: uint): float4 @@ -208,8 +208,6 @@ enum struct IntrinsicOp { BINDLESS_BUFFER_READ, // (bindless_array, index: uint, elem_index: uint) -> T BINDLESS_BUFFER_WRITE,// (bindless_array, index: uint, elem_index: uint, value: T) -> void BINDLESS_BUFFER_SIZE, // (bindless_array, index: uint, stride: uint) -> size: uint64 - BINDLESS_BUFFER_TYPE, // (bindless_array, index: uint) -> uint64 (type id of the element); the returned value - // could be compared with the value of a TypeIDExpr to examine the type of the buffer BINDLESS_BYTE_BUFFER_READ, // (bindless_array, index: uint, offset_bytes: uint64) -> T BINDLESS_BYTE_BUFFER_WRITE,// (bindless_array, index: uint, offset_bytes: uint64, value: T) -> void @@ -240,10 +238,10 @@ enum struct IntrinsicOp { RAY_TRACING_INSTANCE_USER_ID, // (Accel, uint) RAY_TRACING_INSTANCE_VISIBILITY_MASK,// (Accel, uint) - RAY_TRACING_SET_INSTANCE_TRANSFORM, // (Accel, uint, float4x4) - RAY_TRACING_SET_INSTANCE_VISIBILITY,// (Accel, uint, uint) - RAY_TRACING_SET_INSTANCE_OPACITY, // (Accel, uint, bool) - RAY_TRACING_SET_INSTANCE_USER_ID, // (Accel, uint, uint) + RAY_TRACING_SET_INSTANCE_TRANSFORM, // (Accel, uint, float4x4) + RAY_TRACING_SET_INSTANCE_VISIBILITY_MASK,// (Accel, uint, uint) + RAY_TRACING_SET_INSTANCE_OPACITY, // (Accel, uint, bool) + RAY_TRACING_SET_INSTANCE_USER_ID, // (Accel, uint, uint) RAY_TRACING_TRACE_CLOSEST,// (Accel, ray, mask: uint): TriangleHit RAY_TRACING_TRACE_ANY, // (Accel, ray, mask: uint): bool @@ -307,6 +305,9 @@ enum struct IntrinsicOp { // shader execution re-ordering SHADER_EXECUTION_REORDER,// (uint hint, uint hint_bits): void + + // clock + CLOCK,// (): uint64 }; [[nodiscard]] LC_XIR_API luisa::string to_string(IntrinsicOp op) noexcept; diff --git a/include/luisa/xir/passes/outline.h b/include/luisa/xir/passes/outline.h new file mode 100644 index 000000000..162213f2d --- /dev/null +++ b/include/luisa/xir/passes/outline.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include +#include + +namespace luisa::compute::xir { + +// This pass will outline all outline instructions in the module. +// Information about the outlined functions will be returned. + +struct OutlineInfo { + luisa::unordered_map outlines; +}; + +LC_XIR_API OutlineInfo outline_pass_run_on_function(Module *module, Function *function) noexcept; +LC_XIR_API OutlineInfo outline_pass_run_on_module(Module *module) noexcept; + +}// namespace luisa::compute::xir diff --git a/scripts/download_and_patch_llvm.cmake b/scripts/download_and_patch_llvm.cmake new file mode 100644 index 000000000..0d0d50507 --- /dev/null +++ b/scripts/download_and_patch_llvm.cmake @@ -0,0 +1,18 @@ +option(LUISA_COMPUTE_DOWNLOAD_LLVM "Download and patch LLVM if not found" OFF) + +if (LUISA_COMPUTE_DOWNLOAD_LLVM) + set(LLVM_DOWNLOAD_VERSION "19.1.5") + set(LLVM_WIN_BINARY_URL "https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_DOWNLOAD_VERSION}/clang+llvm-${LLVM_DOWNLOAD_VERSION}-x86_64-pc-windows-msvc.tar.xz") + message(STATUS "LLVM not found. Downloading official prebuilt binaries ${LLVM_DOWNLOAD_VERSION} from ${LLVM_WIN_BINARY_URL}.") + include(FetchContent) + FetchContent_Declare( + llvm + URL ${LLVM_WIN_BINARY_URL} + ) + FetchContent_MakeAvailable(llvm) + + set(LLVM_DIR ${llvm_SOURCE_DIR}/lib/cmake/llvm CACHE PATH "Path to LLVMConfig.cmake" FORCE) + find_package(LLVM REQUIRED CONFIG PATHS ${LLVM_DIR}) +else () + message(WARNING "LLVM not found. Please either set `LLVM_DIR` to the directory containing 'LLVMConfig.cmake' or set `LUISA_COMPUTE_DOWNLOAD_LLVM=ON` to let LuisaCompute download it for you.") +endif () diff --git a/scripts/validate_options.cmake b/scripts/validate_options.cmake index 491a714ec..97e29b75e 100644 --- a/scripts/validate_options.cmake +++ b/scripts/validate_options.cmake @@ -109,9 +109,19 @@ endif () if (LUISA_COMPUTE_ENABLE_FALLBACK) find_package(LLVM CONFIG) find_package(embree CONFIG) + if (NOT LLVM_FOUND AND WIN32) + include(${CMAKE_SOURCE_DIR}/scripts/download_and_patch_llvm.cmake) + endif () if (NOT LLVM_FOUND OR LLVM_VERSION VERSION_LESS 16 OR NOT embree_FOUND OR embree_VERSION VERSION_LESS 3) report_feature_not_available(FALLBACK "fallback backend") + elseif (WIN32) + # LLVMDebugInfoPDB has a hard-coded path to diaguids.lib + # Let's find it and remove it! + get_target_property(LLVMDebugInfoPDB_LINK_LIBRARIES LLVMDebugInfoPDB INTERFACE_LINK_LIBRARIES) + list(FILTER LLVMDebugInfoPDB_LINK_LIBRARIES EXCLUDE REGEX "C:/Program Files.*/diaguids\\.lib") + message(STATUS "Patched LLVMDebugInfoPDB INTERFACE_LINK_LIBRARIES: ${LLVMDebugInfoPDB_LINK_LIBRARIES}") + set_target_properties(LLVMDebugInfoPDB PROPERTIES INTERFACE_LINK_LIBRARIES "${LLVMDebugInfoPDB_LINK_LIBRARIES}") endif () endif () diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c053200d4..ae467bcb2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -48,14 +48,12 @@ add_subdirectory(osl) add_subdirectory(gui) add_subdirectory(backends) add_subdirectory(api) -add_subdirectory(ir_v2) add_subdirectory(clangcxx) add_library(compute INTERFACE) target_link_libraries(compute INTERFACE luisa-compute-core - luisa-compute-vstl luisa-compute-ast luisa-compute-xir luisa-compute-dsl @@ -65,7 +63,6 @@ target_link_libraries(compute INTERFACE luisa-compute-api luisa-compute-backends luisa-compute-ir - luisa-compute-ir-v2 luisa-compute-clangcxx) if (LUISA_COMPUTE_ENABLE_CUDA_EXT_LCUB) diff --git a/src/backends/CMakeLists.txt b/src/backends/CMakeLists.txt index 80e8e9270..963cf2739 100644 --- a/src/backends/CMakeLists.txt +++ b/src/backends/CMakeLists.txt @@ -7,7 +7,6 @@ function(luisa_compute_add_backend name) add_library(luisa-compute-backend-${name} MODULE ${BACKEND_SOURCES}) target_link_libraries(luisa-compute-backend-${name} PRIVATE luisa-compute-ast - luisa-compute-vstl luisa-compute-runtime luisa-compute-gui) if (LUISA_COMPUTE_ENABLE_DSL) diff --git a/src/backends/common/CMakeLists.txt b/src/backends/common/CMakeLists.txt index aecdd9291..c008dee87 100644 --- a/src/backends/common/CMakeLists.txt +++ b/src/backends/common/CMakeLists.txt @@ -89,7 +89,8 @@ endif () if (LUISA_COMPUTE_ENABLE_CPU OR LUISA_COMPUTE_ENABLE_CUDA OR - LUISA_COMPUTE_ENABLE_REMOTE) + LUISA_COMPUTE_ENABLE_REMOTE OR + LUISA_COMPUTE_ENABLE_FALLBACK) find_package(Vulkan) diff --git a/src/backends/common/shader_print_formatter.h b/src/backends/common/shader_print_formatter.h index 54eeea594..1c9e58831 100644 --- a/src/backends/common/shader_print_formatter.h +++ b/src/backends/common/shader_print_formatter.h @@ -1,290 +1,292 @@ -#pragma once - -#include -#include -#include -#include -#include - -namespace luisa::compute { - -/* - * This class formats Print(fmt, args) statements in shader code, where - * the args are packed into a struct of the following layout: - * struct { - * uint size; - * uint fmt_id; - * Args... args; - * }; - * When printing, the formatter ignores the first two 4B words of each - * item and outputs the rest of the data according to the fmt string. - */ - -class ShaderPrintFormatter { - -public: - using Primitive = luisa::variant< - Type::Tag, luisa::string>; - -private: - size_t _size{}; - luisa::vector _offsets; - luisa::vector _primitives; - -public: - ShaderPrintFormatter(luisa::string_view fmt, const Type *arg_pack, bool has_header = true) noexcept { - auto args = arg_pack->members(); - size_t offset = 0; - if (has_header) { - LUISA_ASSERT(arg_pack->members().size() >= 2u && - arg_pack->members()[0] == Type::of() && - arg_pack->members()[1] == Type::of(), - "Invalid argument pack for shader printer."); - args = args.subspan(2u); - offset += 8; - } - luisa::string s; - luisa::string f; - auto commit_s = [this, &s] { - if (!s.empty()) { - _offsets.push_back(0u); - _primitives.emplace_back(s); - s.clear(); - } - }; - while (!fmt.empty()) { - auto c = fmt.front(); - fmt.remove_prefix(1u); - if (c == '{') { - if (!f.empty()) { - LUISA_ERROR_WITH_LOCATION("Invalid format string."); - } else if (fmt.front() == '{') {// escape - fmt.remove_prefix(1u); - s.push_back('{'); - } else { - f.push_back('{'); - commit_s(); - } - } else if (c == '}') { - if (!f.empty()) {// end of format group - f.push_back('}'); - LUISA_ASSERT(f == "{}", "Unsupported format string '{}'.", f);// TODO: support more formats? - LUISA_ASSERT(!args.empty(), "Not enough arguments for shader printer."); - auto arg = args.front(); - args = args.subspan(1u); - auto encode = [this, &s, &commit_s](auto &&self, size_t offset, const Type *arg) noexcept -> void { - offset = luisa::align(offset, arg->alignment()); - if (arg->is_scalar()) { - _offsets.push_back(offset); - _primitives.emplace_back(arg->tag()); - } else if (arg->is_vector()) { - s.push_back('('); - commit_s(); - for (auto i = 0u; i < arg->dimension(); i++) { - self(self, offset, arg->element()); - if (i + 1u < arg->dimension()) { - s.append(", "); - commit_s(); - } - offset += arg->element()->size(); - } - s.push_back(')'); - commit_s(); - } else if (arg->is_array()) { - s.push_back('['); - commit_s(); - for (auto i = 0u; i < arg->dimension(); i++) { - self(self, offset, arg->element()); - if (i + 1u < arg->dimension()) { - s.append(", "); - commit_s(); - } - offset += arg->element()->size(); - } - s.push_back(']'); - commit_s(); - } else if (arg->is_matrix()) { - s.push_back('<'); - commit_s(); - auto column = Type::vector(arg->element(), arg->dimension()); - for (auto i = 0u; i < arg->dimension(); i++) { - self(self, offset, column); - if (i + 1u < arg->dimension()) { - s.append(", "); - commit_s(); - } - offset += column->size(); - } - s.push_back('>'); - commit_s(); - } else if (arg->is_structure()) { - s.push_back('{'); - commit_s(); - for (auto i = 0u; i < arg->members().size(); i++) { - auto member = arg->members()[i]; - self(self, offset, member); - if (i + 1u < arg->members().size()) { - s.append(", "); - commit_s(); - } - offset += member->size(); - } - s.push_back('}'); - commit_s(); - } else { - LUISA_ERROR_WITH_LOCATION( - "Invalid argument type '{}' for printing.", - arg->description()); - } - }; - offset = luisa::align(offset, arg->alignment()); - encode(encode, offset, arg); - offset += arg->size(); - f.clear(); - } else {// not in a format group, only escape is allowed - if (fmt.front() == '}') { - fmt.remove_prefix(1u); - s.push_back('}'); - } else { - LUISA_ERROR_WITH_LOCATION("Invalid format string."); - } - } - } else { - if (!f.empty()) { - f.push_back(c); - } else { - s.push_back(c); - } - } - } - commit_s(); - LUISA_ASSERT(f.empty(), "Invalid format string."); - if (!args.empty()) { - LUISA_WARNING_WITH_LOCATION( - "Too many arguments for shader printer. Ignored."); - } - _size = luisa::align(offset, arg_pack->alignment()); - LUISA_ASSERT(_size <= arg_pack->size(), - "Invalid argument pack for shader printer."); - // optimize the format - luisa::vector primitives; - luisa::vector offsets; - primitives.reserve(_primitives.size()); - offsets.reserve(_offsets.size()); - for (auto i = 0u; i < _primitives.size(); i++) { - luisa::visit( - [&](auto &&p) noexcept { - using T = std::decay_t; - if constexpr (std::is_same_v) { - primitives.emplace_back(p); - offsets.emplace_back(_offsets[i]); - } else { - static_assert(std::is_same_v); - if (primitives.empty() || !luisa::holds_alternative(primitives.back())) { - primitives.emplace_back(p); - offsets.emplace_back(_offsets[i]); - } else { - luisa::get(primitives.back()).append(p); - } - } - }, - _primitives[i]); - } - _primitives = std::move(primitives); - _offsets = std::move(offsets); - } - - ~ShaderPrintFormatter() noexcept = default; - -public: - bool operator()(luisa::string &scratch, luisa::span item) const noexcept { - if (item.size() < _size) { return false; } - for (auto i = 0u; i < _offsets.size(); i++) { - auto data = item.data() + _offsets[i]; - luisa::visit( - [&](auto &&p) noexcept { - using T = std::decay_t; - if constexpr (std::is_same_v) { - auto print_primitive = [&](T v) noexcept { - using TT = std::decay_t; - std::memcpy(&v, data, sizeof(v)); - if constexpr (std::is_same_v) { - scratch.append(v ? "true" : "false"); - } else if constexpr (luisa::is_integral_v && sizeof(TT) <= sizeof(short)) { - luisa::format_to(std::back_inserter(scratch), "{}", static_cast(v)); - } else { - if constexpr (std::is_same_v) - luisa::format_to(std::back_inserter(scratch), "{}", static_cast(v)); - else - luisa::format_to(std::back_inserter(scratch), "{}", v); - } - }; - switch (p) { - case Type::Tag::BOOL: print_primitive(bool{}); break; - case Type::Tag::INT8: print_primitive(int8_t{}); break; - case Type::Tag::UINT8: print_primitive(uint8_t{}); break; - case Type::Tag::INT16: print_primitive(int16_t{}); break; - case Type::Tag::UINT16: print_primitive(uint16_t{}); break; - case Type::Tag::INT32: print_primitive(int32_t{}); break; - case Type::Tag::UINT32: print_primitive(uint32_t{}); break; - case Type::Tag::INT64: print_primitive(int64_t{}); break; - case Type::Tag::UINT64: print_primitive(uint64_t{}); break; - case Type::Tag::FLOAT16: print_primitive(half{}); break; - case Type::Tag::FLOAT32: print_primitive(float{}); break; - case Type::Tag::FLOAT64: print_primitive(double{}); break; - default: LUISA_ERROR_WITH_LOCATION("Unsupported type for shader printer."); - } - } else { - static_assert(std::is_same_v); - scratch.append(p); - } - }, - _primitives[i]); - } - return true; - } -}; - -inline size_t format_shader_print(luisa::span> formatters, - luisa::span contents, - const DeviceInterface::StreamLogCallback &log = {}) noexcept { - if (contents.empty()) { return 0u; } - luisa::string scratch; - scratch.reserve(1_k - 1u); - auto offset = static_cast(0u); - while (offset < contents.size_bytes()) { - struct Item { - uint size; - uint fmt; - const std::byte data[]; - }; - static_assert(sizeof(Item) == 8u); - auto raw = contents.data() + offset; - auto *item = reinterpret_cast(raw); - if (item->size == 0u) { - LUISA_WARNING("Invalid print item size: 0."); - return false; - } - if (auto item_end = offset + item->size; - item_end > contents.size_bytes()) { break; } - if (item->fmt < formatters.size()) { - scratch.clear(); - luisa::span payload{raw, item->size}; - if ((*formatters[item->fmt])(scratch, payload)) { - if (log) { - log(scratch); - } else { - LUISA_INFO("[DEVICE] {}", scratch); - } - } else { - break; - } - } else { - LUISA_WARNING("Unknown print format: {}", item->fmt); - } - offset += item->size; - } - return offset; -} - +#pragma once + +#include +#include +#include +#include +#include + +namespace luisa::compute { + +/* + * This class formats Print(fmt, args) statements in shader code, where + * the args are packed into a struct of the following layout: + * struct { + * uint size; + * uint fmt_id; + * Args... args; + * }; + * When printing, the formatter ignores the first two 4B words of each + * item and outputs the rest of the data according to the fmt string. + */ + +class ShaderPrintFormatter { + +public: + using Primitive = luisa::variant< + Type::Tag, luisa::string>; + +private: + size_t _size{}; + luisa::vector _offsets; + luisa::vector _primitives; + +public: + ShaderPrintFormatter(luisa::string_view fmt, const Type *arg_pack, bool has_header = true) noexcept { + auto args = arg_pack->members(); + size_t offset = 0; + if (has_header) { + LUISA_ASSERT(arg_pack->members().size() >= 2u && + arg_pack->members()[0] == Type::of() && + arg_pack->members()[1] == Type::of(), + "Invalid argument pack for shader printer."); + args = args.subspan(2u); + offset += 8; + } + luisa::string s; + luisa::string f; + auto commit_s = [this, &s] { + if (!s.empty()) { + _offsets.push_back(0u); + _primitives.emplace_back(s); + s.clear(); + } + }; + while (!fmt.empty()) { + auto c = fmt.front(); + fmt.remove_prefix(1u); + if (c == '{') { + if (!f.empty()) { + LUISA_ERROR_WITH_LOCATION("Invalid format string."); + } else if (fmt.front() == '{') {// escape + fmt.remove_prefix(1u); + s.push_back('{'); + } else { + f.push_back('{'); + commit_s(); + } + } else if (c == '}') { + if (!f.empty()) {// end of format group + f.push_back('}'); + LUISA_ASSERT(f == "{}", "Unsupported format string '{}'.", f);// TODO: support more formats? + LUISA_ASSERT(!args.empty(), "Not enough arguments for shader printer."); + auto arg = args.front(); + args = args.subspan(1u); + auto encode = [this, &s, &commit_s](auto &&self, size_t offset, const Type *arg) noexcept -> void { + offset = luisa::align(offset, arg->alignment()); + if (arg->is_scalar()) { + _offsets.push_back(offset); + _primitives.emplace_back(arg->tag()); + } else if (arg->is_vector()) { + s.push_back('('); + commit_s(); + for (auto i = 0u; i < arg->dimension(); i++) { + self(self, offset, arg->element()); + if (i + 1u < arg->dimension()) { + s.append(", "); + commit_s(); + } + offset += arg->element()->size(); + } + s.push_back(')'); + commit_s(); + } else if (arg->is_array()) { + s.push_back('['); + commit_s(); + for (auto i = 0u; i < arg->dimension(); i++) { + self(self, offset, arg->element()); + if (i + 1u < arg->dimension()) { + s.append(", "); + commit_s(); + } + offset += arg->element()->size(); + } + s.push_back(']'); + commit_s(); + } else if (arg->is_matrix()) { + s.push_back('<'); + commit_s(); + auto column = Type::vector(arg->element(), arg->dimension()); + for (auto i = 0u; i < arg->dimension(); i++) { + self(self, offset, column); + if (i + 1u < arg->dimension()) { + s.append(", "); + commit_s(); + } + offset += column->size(); + } + s.push_back('>'); + commit_s(); + } else if (arg->is_structure()) { + s.push_back('{'); + commit_s(); + for (auto i = 0u; i < arg->members().size(); i++) { + auto member = arg->members()[i]; + self(self, offset, member); + if (i + 1u < arg->members().size()) { + s.append(", "); + commit_s(); + } + offset += member->size(); + } + s.push_back('}'); + commit_s(); + } else { + LUISA_ERROR_WITH_LOCATION( + "Invalid argument type '{}' for printing.", + arg->description()); + } + }; + offset = luisa::align(offset, arg->alignment()); + encode(encode, offset, arg); + offset += arg->size(); + f.clear(); + } else {// not in a format group, only escape is allowed + if (fmt.front() == '}') { + fmt.remove_prefix(1u); + s.push_back('}'); + } else { + LUISA_ERROR_WITH_LOCATION("Invalid format string."); + } + } + } else { + if (!f.empty()) { + f.push_back(c); + } else { + s.push_back(c); + } + } + } + commit_s(); + LUISA_ASSERT(f.empty(), "Invalid format string."); + if (!args.empty()) { + LUISA_WARNING_WITH_LOCATION( + "Too many arguments for shader printer. Ignored."); + } + _size = luisa::align(offset, arg_pack->alignment()); + LUISA_ASSERT(_size <= arg_pack->size(), + "Invalid argument pack for shader printer."); + // optimize the format + luisa::vector primitives; + luisa::vector offsets; + primitives.reserve(_primitives.size()); + offsets.reserve(_offsets.size()); + for (auto i = 0u; i < _primitives.size(); i++) { + luisa::visit( + [&](auto &&p) noexcept { + using T = std::decay_t; + if constexpr (std::is_same_v) { + primitives.emplace_back(p); + offsets.emplace_back(_offsets[i]); + } else { + static_assert(std::is_same_v); + if (primitives.empty() || !luisa::holds_alternative(primitives.back())) { + primitives.emplace_back(p); + offsets.emplace_back(_offsets[i]); + } else { + luisa::get(primitives.back()).append(p); + } + } + }, + _primitives[i]); + } + _primitives = std::move(primitives); + _offsets = std::move(offsets); + } + + ~ShaderPrintFormatter() noexcept = default; + +public: + [[nodiscard]] auto size() const noexcept { return _size; } + + bool operator()(luisa::string &scratch, luisa::span item) const noexcept { + if (item.size() < _size) { return false; } + for (auto i = 0u; i < _offsets.size(); i++) { + auto data = item.data() + _offsets[i]; + luisa::visit( + [&](auto &&p) noexcept { + using T = std::decay_t; + if constexpr (std::is_same_v) { + auto print_primitive = [&](T v) noexcept { + using TT = std::decay_t; + std::memcpy(&v, data, sizeof(v)); + if constexpr (std::is_same_v) { + scratch.append(v ? "true" : "false"); + } else if constexpr (luisa::is_integral_v && sizeof(TT) <= sizeof(short)) { + luisa::format_to(std::back_inserter(scratch), "{}", static_cast(v)); + } else { + if constexpr (std::is_same_v) + luisa::format_to(std::back_inserter(scratch), "{}", static_cast(v)); + else + luisa::format_to(std::back_inserter(scratch), "{}", v); + } + }; + switch (p) { + case Type::Tag::BOOL: print_primitive(bool{}); break; + case Type::Tag::INT8: print_primitive(int8_t{}); break; + case Type::Tag::UINT8: print_primitive(uint8_t{}); break; + case Type::Tag::INT16: print_primitive(int16_t{}); break; + case Type::Tag::UINT16: print_primitive(uint16_t{}); break; + case Type::Tag::INT32: print_primitive(int32_t{}); break; + case Type::Tag::UINT32: print_primitive(uint32_t{}); break; + case Type::Tag::INT64: print_primitive(int64_t{}); break; + case Type::Tag::UINT64: print_primitive(uint64_t{}); break; + case Type::Tag::FLOAT16: print_primitive(half{}); break; + case Type::Tag::FLOAT32: print_primitive(float{}); break; + case Type::Tag::FLOAT64: print_primitive(double{}); break; + default: LUISA_ERROR_WITH_LOCATION("Unsupported type for shader printer."); + } + } else { + static_assert(std::is_same_v); + scratch.append(p); + } + }, + _primitives[i]); + } + return true; + } +}; + +inline size_t format_shader_print(luisa::span> formatters, + luisa::span contents, + const DeviceInterface::StreamLogCallback &log = {}) noexcept { + if (contents.empty()) { return 0u; } + luisa::string scratch; + scratch.reserve(1_k - 1u); + auto offset = static_cast(0u); + while (offset < contents.size_bytes()) { + struct Item { + uint size; + uint fmt; + const std::byte data[]; + }; + static_assert(sizeof(Item) == 8u); + auto raw = contents.data() + offset; + auto *item = reinterpret_cast(raw); + if (item->size == 0u) { + LUISA_WARNING("Invalid print item size: 0."); + return false; + } + if (auto item_end = offset + item->size; + item_end > contents.size_bytes()) { break; } + if (item->fmt < formatters.size()) { + scratch.clear(); + luisa::span payload{raw, item->size}; + if ((*formatters[item->fmt])(scratch, payload)) { + if (log) { + log(scratch); + } else { + LUISA_INFO("[DEVICE] {}", scratch); + } + } else { + break; + } + } else { + LUISA_WARNING("Unknown print format: {}", item->fmt); + } + offset += item->size; + } + return offset; +} + }// namespace luisa::compute \ No newline at end of file diff --git a/src/backends/common/vulkan_instance.h b/src/backends/common/vulkan_instance.h index c7b1e8847..4934e7ed9 100644 --- a/src/backends/common/vulkan_instance.h +++ b/src/backends/common/vulkan_instance.h @@ -43,12 +43,12 @@ if (ret != VK_SUCCESS) [[unlikely]] { \ if (ret > 0 || ret == VK_ERROR_OUT_OF_DATE_KHR) [[likely]] { \ LUISA_WARNING_WITH_LOCATION( \ - "Vulkan call `" #x "` returned {}.", \ - ::luisa::to_string(ret)); \ + "Vulkan call `" #x "` returned {} (code = {}).", \ + ::luisa::to_string(ret), luisa::to_underlying(ret)); \ } else [[unlikely]] { \ LUISA_ERROR_WITH_LOCATION( \ - "Vulkan call `" #x "` failed: {}.", \ - ::luisa::to_string(ret)); \ + "Vulkan call `" #x "` failed: {} (code = {}).", \ + ::luisa::to_string(ret), luisa::to_underlying(ret)); \ } \ } \ } while (false) diff --git a/src/backends/common/vulkan_swapchain.cpp b/src/backends/common/vulkan_swapchain.cpp index fa23d89a2..06b12ac8a 100644 --- a/src/backends/common/vulkan_swapchain.cpp +++ b/src/backends/common/vulkan_swapchain.cpp @@ -1404,7 +1404,9 @@ class VulkanSwapchainForCPU { LUISA_EXPORT_API void *luisa_compute_create_cpu_swapchain(uint64_t display_handle, uint64_t window_handle, uint width, uint height, bool allow_hdr, bool vsync, uint back_buffer_count) noexcept { - return new VulkanSwapchainForCPU{display_handle, window_handle, width, height, allow_hdr, vsync, back_buffer_count}; + return luisa::new_with_allocator( + display_handle, window_handle, width, height, + allow_hdr, vsync, back_buffer_count); } LUISA_EXPORT_API uint8_t luisa_compute_cpu_swapchain_storage(void *swapchain) noexcept { @@ -1416,7 +1418,7 @@ LUISA_EXPORT_API void *luisa_compute_cpu_swapchain_native_handle(void *swapchain } LUISA_EXPORT_API void luisa_compute_destroy_cpu_swapchain(void *swapchain) noexcept { - delete static_cast(swapchain); + luisa::delete_with_allocator(static_cast(swapchain)); } LUISA_EXPORT_API void luisa_compute_cpu_swapchain_present(void *swapchain, const void *pixels, uint64_t size) noexcept { diff --git a/src/backends/cuda/cuda_codegen_ast.cpp b/src/backends/cuda/cuda_codegen_ast.cpp index bbb7d0b51..071f9be31 100644 --- a/src/backends/cuda/cuda_codegen_ast.cpp +++ b/src/backends/cuda/cuda_codegen_ast.cpp @@ -1060,8 +1060,16 @@ void CUDACodegenAST::visit(const CallExpr *expr) { case CallOp::TEXTURE3D_SAMPLE: [[fallthrough]]; case CallOp::TEXTURE3D_SAMPLE_LEVEL: [[fallthrough]]; case CallOp::TEXTURE3D_SAMPLE_GRAD: [[fallthrough]]; - case CallOp::TEXTURE3D_SAMPLE_GRAD_LEVEL: - LUISA_NOT_IMPLEMENTED(); + case CallOp::TEXTURE3D_SAMPLE_GRAD_LEVEL: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE2D_SAMPLE_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE2D_SAMPLE_LEVEL_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD_LEVEL_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE3D_SAMPLE_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE3D_SAMPLE_LEVEL_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD_LEVEL_SAMPLER: LUISA_NOT_IMPLEMENTED(); + case CallOp::CLOCK: _scratch << "clock64"; break; } _scratch << "("; if (auto op = expr->op(); is_atomic_operation(op)) { diff --git a/src/backends/dx/CMakeLists.txt b/src/backends/dx/CMakeLists.txt index 17eec5b50..a2bde2f99 100644 --- a/src/backends/dx/CMakeLists.txt +++ b/src/backends/dx/CMakeLists.txt @@ -53,7 +53,7 @@ if (WIN32) SUPPORT_DIR ${LUISA_COMPUTE_DX_SDK_DIR}) target_precompile_headers(luisa-compute-backend-dx PRIVATE pch.h) target_include_directories(luisa-compute-backend-dx PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) - target_link_libraries(luisa-compute-backend-dx PRIVATE D3D12 d3dcompiler dxgi luisa-compute-vstl DirectML) + target_link_libraries(luisa-compute-backend-dx PRIVATE D3D12 d3dcompiler dxgi DirectML) target_compile_definitions(luisa-compute-backend-dx PRIVATE UNICODE) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_compile_definitions(luisa-compute-backend-dx PRIVATE diff --git a/src/backends/dx/DXRuntime/Device.cpp b/src/backends/dx/DXRuntime/Device.cpp index 507d6b5f2..80ecaba6b 100644 --- a/src/backends/dx/DXRuntime/Device.cpp +++ b/src/backends/dx/DXRuntime/Device.cpp @@ -224,7 +224,7 @@ Device::Device(Context &&ctx, DeviceConfig const *settings) LUISA_INFO("Adapter mismatch, shader cache cleared."); fileIo->clear_shader_cache(); } - fileIo->write_shader_cache("dx_adapterid", {reinterpret_cast(&adapterID), sizeof(vstd::MD5)}); + static_cast(fileIo->write_shader_cache("dx_adapterid", {reinterpret_cast(&adapterID), sizeof(vstd::MD5)})); } defaultAllocator = vstd::make_unique(this, profiler); allocatorInterface.device = this; diff --git a/src/backends/fallback/CMakeLists.txt b/src/backends/fallback/CMakeLists.txt index 8b27aa82e..3078fb785 100644 --- a/src/backends/fallback/CMakeLists.txt +++ b/src/backends/fallback/CMakeLists.txt @@ -1,37 +1,77 @@ find_package(LLVM CONFIG) find_package(embree CONFIG) +if (NOT embree_FOUND) + message(WARNING "Embree not found. Fallback backend will not be built.") +endif () + +if (NOT LLVM_FOUND) + message(WARNING "LLVM not found. Fallback backend will not be built.") +endif () + if (LLVM_FOUND AND embree_FOUND) set(LUISA_COMPUTE_ENABLE_FALLBACK ON) set(LC_BACKEND_FALLBACK_SRC fallback_device.cpp - #llvm_codegen.cpp - #llvm_codegen_value.cpp - #llvm_codegen_builtin.cpp - #llvm_codegen_type.cpp - #llvm_codegen_expr.cpp - #llvm_codegen_func.cpp - #llvm_codegen_stmt.cpp - #llvm_event.cpp - #llvm_shader.cpp - thread_pool.cpp - #dirty_range.cpp + fallback_device_api.cpp + fallback_device_api_ir_module.cpp + fallback_command_queue.cpp fallback_bindless_array.cpp fallback_stream.cpp fallback_texture.cpp fallback_mesh.cpp fallback_accel.cpp fallback_texture_bc.cpp - fallback_texture_sampling.cpp fallback_codegen.cpp fallback_shader.cpp fallback_buffer.cpp + fallback_swapchain.cpp ) + luisa_compute_add_backend(fallback SOURCES ${LC_BACKEND_FALLBACK_SRC}) + + # exclude codegen from unity build since it's too big + set_source_files_properties(fallback_codegen.cpp PROPERTIES UNITY_BUILD OFF) + + # use libdispatch or TBB for parallel_for on non-Apple Unix systems if available + if (UNIX AND NOT APPLE) + # libdispatch + find_library(DISPATCH_LIB dispatch) + find_path(DISPATCH_INCLUDE_DIR dispatch/dispatch.h) + if (DISPATCH_LIB AND DISPATCH_INCLUDE_DIR) + target_compile_definitions(luisa-compute-backend-fallback PRIVATE LUISA_COMPUTE_ENABLE_LIBDISPATCH=1) + target_link_libraries(luisa-compute-backend-fallback PRIVATE ${DISPATCH_LIB}) + target_include_directories(luisa-compute-backend-fallback PRIVATE ${DISPATCH_INCLUDE_DIR}) + else () + find_package(TBB CONFIG) + if (TBB_FOUND) + target_compile_definitions(luisa-compute-backend-fallback PRIVATE LUISA_COMPUTE_ENABLE_TBB=1) + target_link_libraries(luisa-compute-backend-fallback PRIVATE TBB::tbb) + else () + message(WARNING "TBB and libdispatch not found. Performance of the fallback backend may be affected.") + endif () + endif () + endif () + message(STATUS "Build with fallback backend (LLVM ${LLVM_VERSION}, Embree ${embree_VERSION})") llvm_map_components_to_libnames(LLVM_LIBS core executionengine support orcjit nativecodegen irreader passes analysis coroutines) + if (UNIX AND NOT APPLE) + # check if the libraries exist + try_compile(LLVM_LIBS_EXIST + SOURCE_FROM_CONTENT "try_link_llvm.cpp" "int main() {}" + LINK_LIBRARIES ${LLVM_LIBS}) + if (NOT LLVM_LIBS_EXIST) + message(WARNING "LLVM libraries not found. Trying to link with LLVM shared libraries.") + find_library(LLVM_DYLIB LLVM REQUIRED) + message(STATUS "LLVM libraries found at ${LLVM_DYLIB}") + set(LLVM_LIBS ${LLVM_DYLIB}) + endif () + endif () target_include_directories(luisa-compute-backend-fallback PRIVATE ${LLVM_INCLUDE_DIRS}) - target_link_libraries(luisa-compute-backend-fallback PRIVATE embree ${LLVM_LIBS} luisa-compute-xir) + target_link_libraries(luisa-compute-backend-fallback PRIVATE + embree ${LLVM_LIBS} + luisa-compute-xir + luisa-compute-vulkan-swapchain) if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_compile_options(luisa-compute-backend-fallback PRIVATE /wd4624 /wd4996 # do not complain about LLVM diff --git a/src/backends/fallback/fallback_accel.cpp b/src/backends/fallback/fallback_accel.cpp index f8e88c864..d3bf4f605 100644 --- a/src/backends/fallback/fallback_accel.cpp +++ b/src/backends/fallback/fallback_accel.cpp @@ -3,193 +3,71 @@ // #include +#include #include "fallback_mesh.h" #include "fallback_accel.h" -#include "thread_pool.h" +#include "fallback_command_queue.h" -namespace luisa::compute::fallback -{ - FallbackAccel::FallbackAccel(RTCDevice device, AccelUsageHint hint) noexcept - : _handle{rtcNewScene(device)}, _device(device) - { - switch (hint) - { - case AccelUsageHint::FAST_TRACE: - rtcSetSceneBuildQuality(_handle, RTC_BUILD_QUALITY_HIGH); - rtcSetSceneFlags(_handle, RTC_SCENE_FLAG_COMPACT); - break; - case AccelUsageHint::FAST_BUILD: - rtcSetSceneBuildQuality(_handle, RTC_BUILD_QUALITY_LOW); - rtcSetSceneFlags(_handle, RTC_SCENE_FLAG_DYNAMIC); - break; - } - } - - FallbackAccel::~FallbackAccel() noexcept { rtcReleaseScene(_handle); } +namespace luisa::compute::fallback { - void FallbackAccel::build(ThreadPool& pool, size_t instance_count, - luisa::span mods) noexcept - { - using Mod = AccelBuildCommand::Modification; - pool.async([this, instance_count, mods = luisa::vector{mods.cbegin(), mods.cend()}]() - { - if (instance_count < _instances.size()) - { - // remove redundant geometries - for (auto i = instance_count; i < _instances.size(); i++) { rtcDetachGeometry(_handle, i); } - _instances.resize(instance_count); - } - else - { - // create new geometries - auto device = rtcGetSceneDevice(_handle); - _instances.reserve(next_pow2(instance_count)); - for (auto i = _instances.size(); i < instance_count; i++) - { - auto geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_INSTANCE); - rtcSetGeometryBuildQuality(geometry, RTC_BUILD_QUALITY_HIGH); - rtcAttachGeometryByID(_handle, geometry, i); - rtcReleaseGeometry(geometry); // already moved into the scene - _instances.emplace_back().geometry = geometry; - } - } - for (auto m: mods) - { - auto geometry = _instances[m.index].geometry; - if (m.flags & Mod::flag_primitive) - { - auto fbMesh = reinterpret_cast(m.primitive); - rtcSetGeometryInstancedScene( - geometry, fbMesh->handle()); - } - if (m.flags & Mod::flag_transform) - { - std::memcpy( - _instances[m.index].affine, m.affine, sizeof(m.affine)); - } - if (m.flags & Mod::flag_visibility) - { - _instances[m.index].visible = true; - } else - { - _instances[m.index].visible = false; - } - _instances[m.index].dirty = true; - } - for (auto&& instance: _instances) - { - if (instance.dirty) - { - auto geometry = instance.geometry; - rtcSetGeometryTransform(geometry, 0u, RTC_FORMAT_FLOAT3X4_ROW_MAJOR, instance.affine); - instance.visible ? rtcEnableGeometry(geometry) : rtcDisableGeometry(geometry); - rtcCommitGeometry(geometry); - instance.dirty = false; - } - } - rtcCommitScene(_handle); - auto error = rtcGetDeviceError(_device); - if (error != RTC_ERROR_NONE) { - printf("Embree Error: %d\n", error); - } - }); - } +FallbackAccel::FallbackAccel(RTCDevice device, const AccelOption &option) noexcept + : _handle{rtcNewScene(device)} { luisa_fallback_accel_set_flags(_handle, option); } - std::array FallbackAccel::_compress(float4x4 m) noexcept - { - return { - m[0].x, m[1].x, m[2].x, m[3].x, - m[0].y, m[1].y, m[2].y, m[3].y, - m[0].z, m[1].z, m[2].z, m[3].z - }; - } +FallbackAccel::~FallbackAccel() noexcept { rtcReleaseScene(_handle); } - float4x4 FallbackAccel::_decompress(std::array m) noexcept - { - return luisa::make_float4x4( - m[0], m[4], m[8], 0.f, - m[1], m[5], m[9], 0.f, - m[2], m[6], m[10], 0.f, - m[3], m[7], m[11], 1.f); +void FallbackAccel::build(luisa::unique_ptr cmd) noexcept { + LUISA_ASSERT(!cmd->update_instance_buffer_only(), + "FallbackAccel does not support update_instance_buffer_only."); + if (auto n = cmd->instance_count(); n < _instances.size()) { + // remove redundant geometries + for (auto i = n; i < _instances.size(); i++) { rtcDetachGeometry(_handle, i); } + _instances.resize(n); + } else { + // create new geometries + auto device = rtcGetSceneDevice(_handle); + _instances.reserve(next_pow2(n)); + for (auto i = _instances.size(); i < n; i++) { + auto geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_INSTANCE); + rtcSetGeometryBuildQuality(geometry, RTC_BUILD_QUALITY_HIGH); + rtcAttachGeometry(_handle, geometry); + rtcReleaseGeometry(geometry);// already moved into the scene + auto &instance = _instances.emplace_back(); + instance.geometry = geometry; + } } - - namespace detail - { - void accel_trace_closest(const FallbackAccel* accel, float ox, float oy, float oz, float dx, float dy, float dz, - float tmin, float tmax, uint mask, SurfaceHit* hit) noexcept - { -#if LUISA_COMPUTE_EMBREE_VERSION == 3 - RTCIntersectContext ctx{}; - rtcInitIntersectContext(&ctx); -#else - RTCRayQueryContext ctx{}; - rtcInitRayQueryContext(&ctx); - RTCIntersectArguments args{.context = &ctx}; -#endif - RTCRayHit rh{}; - rh.ray.org_x = ox; - rh.ray.org_y = oy; - rh.ray.org_z = oz; - rh.ray.dir_x = dx; - rh.ray.dir_y = dy; - rh.ray.dir_z = dz; - rh.ray.tnear = tmin; - rh.ray.tfar = tmax; - - rh.ray.mask = mask; - rh.hit.geomID = RTC_INVALID_GEOMETRY_ID; - rh.hit.primID = RTC_INVALID_GEOMETRY_ID; - rh.hit.instID[0] = RTC_INVALID_GEOMETRY_ID; - rh.ray.flags = 0; -#if LUISA_COMPUTE_EMBREE_VERSION == 3 - rtcIntersect1(accel->scene(), &ctx, &rh); -#else - rtcIntersect1(accel->scene(), &rh, &args); -#endif - hit->inst = rh.hit.instID[0]; - hit->prim = rh.hit.primID; - hit->bary = make_float2(rh.hit.u, rh.hit.v); - hit->committed_ray_t = rh.ray.tfar; + for (auto m : cmd->modifications()) { + using Mod = AccelBuildCommand::Modification; + if (m.flags & Mod::flag_primitive) { + auto geometry = _instances[m.index].geometry; + auto mesh = reinterpret_cast(m.primitive); + rtcSetGeometryInstancedScene(geometry, mesh->handle()); } - - bool accel_trace_any(const FallbackAccel* accel, float ox, float oy, float oz, float dx, float dy, float dz, - float tmin, float tmax, uint mask) noexcept - { -#if LUISA_COMPUTE_EMBREE_VERSION == 3 - RTCIntersectContext ctx{}; - rtcInitIntersectContext(&ctx); -#else - RTCRayQueryContext ctx{}; - rtcInitRayQueryContext(&ctx); - RTCOccludedArguments args{.context = &ctx}; -#endif - RTCRay ray{}; - ray.org_x = ox; - ray.org_y = oy; - ray.org_z = oz; - ray.dir_x = dx; - ray.dir_y = dy; - ray.dir_z = dz; - ray.tnear = tmin; - ray.tfar = tmax; - - ray.mask = mask; - ray.flags = 0; -#if LUISA_COMPUTE_EMBREE_VERSION == 3 - rtcOccluded1(accel->scene(), &ctx, &ray); -#else - rtcOccluded1(accel->scene(), &ray, &args); -#endif - return ray.tfar < 0.f; + if (m.flags & Mod::flag_transform) { + std::memcpy(_instances[m.index].affine, m.affine, sizeof(m.affine)); } - } // namespace detail -} // namespace luisa::compute::fallback - -void intersect_closest_wrapper(void* accel, float ox, float oy, float oz, float dx, float dy, float dz, float tmin, - float tmax, unsigned mask, void* hit) -{ - luisa::compute::fallback::detail::accel_trace_closest( - reinterpret_cast(accel), - ox, oy, oz, dx, dy, dz, tmin, tmax, mask, reinterpret_cast(hit)); + if (m.flags & Mod::flag_visibility) { + _instances[m.index].mask = m.vis_mask; + } + if (m.flags & Mod::flag_user_id) { + _instances[m.index].user_id = m.user_id; + } + if (m.flags & Mod::flag_opaque) { + _instances[m.index].opaque = m.flags & Mod::flag_opaque_on; + } + _instances[m.index].dirty = true; + } + for (auto &&instance : _instances) { + if (instance.dirty) { + auto geometry = instance.geometry; + rtcSetGeometryTransform(geometry, 0u, RTC_FORMAT_FLOAT3X4_ROW_MAJOR, instance.affine); + rtcSetGeometryMask(geometry, instance.mask); + rtcCommitGeometry(geometry); + instance.dirty = false; + } + } + // TODO: support update? + rtcCommitScene(_handle); } + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_accel.h b/src/backends/fallback/fallback_accel.h index 7ca849703..693598e45 100644 --- a/src/backends/fallback/fallback_accel.h +++ b/src/backends/fallback/fallback_accel.h @@ -11,7 +11,6 @@ #include #include "fallback_embree.h" -#include "llvm_abi.h" namespace luisa { class ThreadPool; @@ -19,59 +18,39 @@ class ThreadPool; namespace luisa::compute::fallback { +class FallbackCommandQueue; class FallbackMesh; -class FallbackAccel { +class alignas(16) FallbackAccel { public: struct alignas(16) Instance { float affine[12]; - bool visible; + uint8_t mask; + bool opaque; bool dirty; - uint pad; + uint user_id; RTCGeometry geometry; }; static_assert(sizeof(Instance) == 64u); - struct alignas(16) Handle { - const FallbackAccel *accel; + struct alignas(16) View { + RTCScene scene; Instance *instances; }; private: - const RTCDevice _device; RTCScene _handle; - mutable luisa::vector _instances; - -private: - [[nodiscard]] static std::array _compress(float4x4 m) noexcept; - [[nodiscard]] static float4x4 _decompress(std::array m) noexcept; + luisa::vector _instances; public: - [[nodiscard]] RTCScene scene()const noexcept {return _handle;} - FallbackAccel(RTCDevice device, AccelUsageHint hint) noexcept; + [[nodiscard]] RTCScene handle() const noexcept { return _handle; } + FallbackAccel(RTCDevice device, const AccelOption &option) noexcept; ~FallbackAccel() noexcept; - void build(ThreadPool &pool, size_t instance_count, - luisa::span mods) noexcept; - [[nodiscard]] auto handle() const noexcept { return Handle{this, _instances.data()}; } + void build(luisa::unique_ptr cmd) noexcept; + [[nodiscard]] auto view() noexcept { return View{_handle, _instances.data()}; } }; -[[nodiscard]] void accel_trace_closest(const FallbackAccel *accel, float ox, float oy, float oz, float dx, float dy, float dz, float tmin, float tmax, uint mask, SurfaceHit* hit) noexcept; -[[nodiscard]] bool accel_trace_any(const FallbackAccel *accel, float ox, float oy, float oz, float dx, float dy, float dz, float tmin, float tmax, uint mask) noexcept; - -struct alignas(16) FallbackAccelInstance { - float affine[12]; - bool visible; - bool dirty; - uint pad; - uint geom0; - uint geom1; -}; +using FallbackAccelView = FallbackAccel::View; }// namespace luisa::compute::fallback - -LUISA_STRUCT(luisa::compute::fallback::FallbackAccelInstance, - affine, visible, dirty, pad, geom0, geom1) {}; - -void intersect_closest_wrapper(void *accel, float ox, float oy, float oz, float dx, float dy, float dz, float tmin, float tmax, unsigned mask, void *hit); - diff --git a/src/backends/fallback/fallback_bindless_array.cpp b/src/backends/fallback/fallback_bindless_array.cpp index 55f188fc7..545aafe0b 100644 --- a/src/backends/fallback/fallback_bindless_array.cpp +++ b/src/backends/fallback/fallback_bindless_array.cpp @@ -3,39 +3,57 @@ // #include "fallback_bindless_array.h" -#include "thread_pool.h" -#include "luisa/runtime/rtx/triangle.h" -#include "luisa/rust/api_types.hpp" +#include "fallback_buffer.h" -namespace luisa::compute::fallback -{ - FallbackBindlessArray::FallbackBindlessArray(size_t capacity) noexcept - : _slots(capacity), _tracker{capacity} - { - } +namespace luisa::compute::fallback { +FallbackBindlessArray::FallbackBindlessArray(size_t capacity) noexcept + : _slots(capacity) {} - void FallbackBindlessArray::update(ThreadPool& pool, luisa::span modifications) noexcept - { - using Mod = BindlessArrayUpdateCommand::Modification; - pool.async([this,mods = luisa::vector{modifications.cbegin(), modifications.cend()}] - { - for (auto m: mods) - { - _slots[m.slot].buffer = reinterpret_cast(m.buffer.handle); +void FallbackBindlessArray::update(luisa::unique_ptr cmd) noexcept { + for (auto m : cmd->modifications()) { + auto &slot = _slots[m.slot]; + switch (m.buffer.op) { + case BindlessArrayUpdateCommand::Modification::Operation::EMPLACE: { + auto view = reinterpret_cast(m.buffer.handle)->view_with_offset(m.buffer.offset_bytes); + slot.buffer = view.ptr; + slot.set_buffer_size(view.size); + break; } - }); - _tracker.commit(); - } - - bool FallbackBindlessArray::uses_resource(uint64_t handle) const noexcept - { - return _tracker.contains(handle); + case BindlessArrayUpdateCommand::Modification::Operation::REMOVE: { + slot.buffer = nullptr; + slot.set_buffer_size(0); + break; + } + default: break; + } + switch (m.tex2d.op) { + case BindlessArrayUpdateCommand::Modification::Operation::EMPLACE: { + slot.tex2d = reinterpret_cast(m.tex2d.handle); + slot.set_sampler_2d(m.tex2d.sampler); + break; + } + case BindlessArrayUpdateCommand::Modification::Operation::REMOVE: { + slot.tex2d = nullptr; + slot.set_sampler_2d(0); + break; + } + default: break; + } + switch (m.tex3d.op) { + case BindlessArrayUpdateCommand::Modification::Operation::EMPLACE: { + slot.tex3d = reinterpret_cast(m.tex3d.handle); + slot.set_sampler_3d(m.tex3d.sampler); + break; + } + case BindlessArrayUpdateCommand::Modification::Operation::REMOVE: { + slot.tex3d = nullptr; + slot.set_sampler_3d(0); + break; + } + default: break; + } } -} // namespace luisa::compute::Fallback -void bindless_buffer_read(void* bindless, unsigned slot, unsigned elem, unsigned stride, void* buffer) -{ - auto a = reinterpret_cast(bindless); - auto ptr = reinterpret_cast(a->slot(slot).buffer); - memcpy(buffer, ptr + elem*stride, stride); } + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_bindless_array.h b/src/backends/fallback/fallback_bindless_array.h index f54952b80..fc3ed8ee4 100644 --- a/src/backends/fallback/fallback_bindless_array.h +++ b/src/backends/fallback/fallback_bindless_array.h @@ -4,45 +4,57 @@ #pragma once -//#include #include #include #include "../common/resource_tracker.h" #include "fallback_texture.h" -#include "dirty_range.h" -namespace luisa -{ - class ThreadPool; -} +namespace luisa { +class ThreadPool; +}// namespace luisa namespace luisa::compute::fallback { class FallbackBindlessArray { public: - - struct Slot { + struct alignas(16) Slot { const void *buffer{nullptr}; - size_t buffer_offset{}; - Sampler sampler2d{}; - Sampler sampler3d{}; + uint64_t _compressed_buffer_size_sampler_2d_sampler_3d{};// [63:8] compressed buffer offset, [7:4] sampler 2d, [3:0] sampler 3d const FallbackTexture *tex2d{nullptr}; const FallbackTexture *tex3d{nullptr}; + + [[nodiscard]] auto buffer_size() const noexcept { return _compressed_buffer_size_sampler_2d_sampler_3d >> 8u; } + [[nodiscard]] auto sampler_2d() const noexcept { return Sampler::decode(_compressed_buffer_size_sampler_2d_sampler_3d >> 4u & 0xfu); } + [[nodiscard]] auto sampler_3d() const noexcept { return Sampler::decode(_compressed_buffer_size_sampler_2d_sampler_3d & 0xfu); } + void set_buffer_size(size_t offset) noexcept { + _compressed_buffer_size_sampler_2d_sampler_3d = (offset << 8u) | (_compressed_buffer_size_sampler_2d_sampler_3d & ~0xffull); + } + void set_sampler_2d(uint code) noexcept { + _compressed_buffer_size_sampler_2d_sampler_3d = (code << 4u) | (_compressed_buffer_size_sampler_2d_sampler_3d & ~0xf0ull); + } + void set_sampler_3d(uint code) noexcept { + _compressed_buffer_size_sampler_2d_sampler_3d = (code) | (_compressed_buffer_size_sampler_2d_sampler_3d & ~0x0full); + } + void set_sampler_2d(Sampler sampler) noexcept { set_sampler_2d(sampler.code()); } + void set_sampler_3d(Sampler sampler) noexcept { set_sampler_3d(sampler.code()); } + }; + + struct alignas(16) View { + Slot *slots{nullptr}; + size_t size{0}; }; private: luisa::vector _slots{}; - //DirtyRange _dirty; - ResourceTracker _tracker; public: explicit FallbackBindlessArray(size_t capacity) noexcept; - auto& slot(unsigned int idx) const noexcept { return _slots[idx]; } - void update(ThreadPool &pool, luisa::span modifications) noexcept; - [[nodiscard]] bool uses_resource(uint64_t handle) const noexcept; + [[nodiscard]] auto &slot(unsigned int idx) const noexcept { return _slots[idx]; } + void update(luisa::unique_ptr cmd) noexcept; + [[nodiscard]] auto view() noexcept { return View{_slots.data(), _slots.size()}; } }; -}// namespace luisa::compute::Fallback +using FallbackBindlessArrayView = FallbackBindlessArray::View; -void bindless_buffer_read(void* bindless, unsigned slot, unsigned elem, unsigned stride, void* buffer); \ No newline at end of file +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_buffer.cpp b/src/backends/fallback/fallback_buffer.cpp index 5865c4e13..bec105536 100644 --- a/src/backends/fallback/fallback_buffer.cpp +++ b/src/backends/fallback/fallback_buffer.cpp @@ -7,9 +7,22 @@ namespace luisa::compute::fallback { -FallbackBufferView FallbackBuffer::view(size_t offset) noexcept { - LUISA_ASSERT(offset <= data.size(), "Buffer view out of range."); - return {static_cast(data.data() + offset), data.size() - offset}; +FallbackBufferView FallbackBuffer::view(size_t offset, size_t size) noexcept { + LUISA_DEBUG_ASSERT(offset + size <= _size, "Buffer view out of range."); + return {_data + offset, size}; +} + +FallbackBufferView FallbackBuffer::view_with_offset(size_t offset) noexcept { + LUISA_DEBUG_ASSERT(offset <= _size, "Buffer view out of range."); + return {_data + offset, _size - offset}; +} + +FallbackBuffer::FallbackBuffer(size_t size_bytes) : _size{size_bytes} { + _data = luisa::allocate_with_allocator(_size); +} + +FallbackBuffer::~FallbackBuffer() noexcept { + luisa::deallocate_with_allocator(_data); } }// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_buffer.h b/src/backends/fallback/fallback_buffer.h index dd6ca0fc5..374f9e657 100644 --- a/src/backends/fallback/fallback_buffer.h +++ b/src/backends/fallback/fallback_buffer.h @@ -7,20 +7,24 @@ #include namespace luisa::compute::fallback { + struct alignas(16) FallbackBufferView { void *ptr; size_t size; }; class FallbackBuffer { -public: - // FIXME: size - void *addr() { return data.data(); } - [[nodiscard]] FallbackBufferView view(size_t offset) noexcept; private: + size_t _size; + std::byte *_data{}; - std::vector data{}; +public: + explicit FallbackBuffer(size_t size); + ~FallbackBuffer() noexcept; + [[nodiscard]] auto data() noexcept { return _data; } + [[nodiscard]] FallbackBufferView view(size_t offset, size_t size) noexcept; + [[nodiscard]] FallbackBufferView view_with_offset(size_t offset) noexcept; }; }// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.cpp b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.cpp new file mode 100644 index 000000000..e3c90527a --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.cpp @@ -0,0 +1,729 @@ +#define LUISA_COMPUTE_FALLBACK_DEVICE_LIB +#include "../fallback_device_api.h" + +extern "C" {// wrappers + +#define LUISA_FALLBACK_WRAPPER __attribute__((visibility("hidden"))) __attribute__((used)) __attribute__((always_inline)) + +using llvm_float2 = float __attribute__((ext_vector_type(2))); +using llvm_float3 = float __attribute__((ext_vector_type(3))); +using llvm_float4 = float __attribute__((ext_vector_type(4))); + +static_assert(alignof(llvm_float2) == alignof(float2) && sizeof(llvm_float2) == sizeof(float2)); +static_assert(alignof(llvm_float3) == alignof(float3) && sizeof(llvm_float3) == sizeof(float3)); +static_assert(alignof(llvm_float4) == alignof(float4) && sizeof(llvm_float4) == sizeof(float4)); + +struct llvm_float2x2 { + llvm_float2 cols[2]; +}; + +struct llvm_float3x3 { + llvm_float3 cols[3]; +}; + +struct llvm_float4x4 { + llvm_float4 cols[4]; +}; + +static_assert(alignof(llvm_float2x2) == alignof(float2x2) && sizeof(llvm_float2x2) == sizeof(float2x2)); +static_assert(alignof(llvm_float3x3) == alignof(float3x3) && sizeof(llvm_float3x3) == sizeof(float3x3)); +static_assert(alignof(llvm_float4x4) == alignof(float4x4) && sizeof(llvm_float4x4) == sizeof(float4x4)); + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix2d_mul_vector(const float2x2 *pm, const float2 *pv, float2 *out) noexcept { + auto m = *reinterpret_cast(pm); + auto v = *reinterpret_cast(pv); + auto r = m.cols[0] * v.x + m.cols[1] * v.y; + *reinterpret_cast(out) = r; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix2d_mul_matrix(const float2x2 *pm, const float2x2 *pn, float2x2 *out) noexcept { + luisa_fallback_wrapper_matrix2d_mul_vector(pm, &pn->cols[0], &out->cols[0]); + luisa_fallback_wrapper_matrix2d_mul_vector(pm, &pn->cols[1], &out->cols[1]); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix3d_mul_vector(const float3x3 *pm, const float3 *pv, float3 *out) noexcept { + auto m = *reinterpret_cast(pm); + auto v = *reinterpret_cast(pv); + auto r = m.cols[0] * v.x + m.cols[1] * v.y + m.cols[2] * v.z; + *reinterpret_cast(out) = r; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix3d_mul_matrix(const float3x3 *pm, const float3x3 *pn, float3x3 *out) noexcept { + luisa_fallback_wrapper_matrix3d_mul_vector(pm, &pn->cols[0], &out->cols[0]); + luisa_fallback_wrapper_matrix3d_mul_vector(pm, &pn->cols[1], &out->cols[1]); + luisa_fallback_wrapper_matrix3d_mul_vector(pm, &pn->cols[2], &out->cols[2]); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix4d_mul_vector(const float4x4 *pm, const float4 *pv, float4 *out) noexcept { + auto m = *reinterpret_cast(pm); + auto v = *reinterpret_cast(pv); + auto r = m.cols[0] * v.x + m.cols[1] * v.y + m.cols[2] * v.z + m.cols[3] * v.w; + *reinterpret_cast(out) = r; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix4d_mul_matrix(const float4x4 *pm, const float4x4 *pn, float4x4 *out) noexcept { + luisa_fallback_wrapper_matrix4d_mul_vector(pm, &pn->cols[0], &out->cols[0]); + luisa_fallback_wrapper_matrix4d_mul_vector(pm, &pn->cols[1], &out->cols[1]); + luisa_fallback_wrapper_matrix4d_mul_vector(pm, &pn->cols[2], &out->cols[2]); + luisa_fallback_wrapper_matrix4d_mul_vector(pm, &pn->cols[3], &out->cols[3]); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix2d_transpose(const float2x2 *pm, float2x2 *p_out) noexcept { + auto m = *reinterpret_cast(pm); + auto out = reinterpret_cast(p_out); + out->cols[0] = {m.cols[0].x, m.cols[1].x}; + out->cols[1] = {m.cols[0].y, m.cols[1].y}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix3d_transpose(const float3x3 *pm, float3x3 *p_out) noexcept { + auto m = *reinterpret_cast(pm); + auto out = reinterpret_cast(p_out); + out->cols[0] = {m.cols[0].x, m.cols[1].x, m.cols[2].x}; + out->cols[1] = {m.cols[0].y, m.cols[1].y, m.cols[2].y}; + out->cols[2] = {m.cols[0].z, m.cols[1].z, m.cols[2].z}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix4d_transpose(const float4x4 *pm, float4x4 *p_out) noexcept { + auto m = *reinterpret_cast(pm); + auto out = reinterpret_cast(p_out); + out->cols[0] = {m.cols[0].x, m.cols[1].x, m.cols[2].x, m.cols[3].x}; + out->cols[1] = {m.cols[0].y, m.cols[1].y, m.cols[2].y, m.cols[3].y}; + out->cols[2] = {m.cols[0].z, m.cols[1].z, m.cols[2].z, m.cols[3].z}; + out->cols[3] = {m.cols[0].w, m.cols[1].w, m.cols[2].w, m.cols[3].w}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_vector2d_outer_product(const float2 *p_lhs, const float2 *p_rhs, float2x2 *p_out) noexcept { + auto lhs = *reinterpret_cast(p_lhs); + auto rhs = *reinterpret_cast(p_rhs); + auto out = reinterpret_cast(p_out); + out->cols[0] = lhs * rhs.x; + out->cols[1] = lhs * rhs.y; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_vector3d_outer_product(const float3 *p_lhs, const float3 *p_rhs, float3x3 *p_out) noexcept { + auto lhs = *reinterpret_cast(p_lhs); + auto rhs = *reinterpret_cast(p_rhs); + auto out = reinterpret_cast(p_out); + out->cols[0] = lhs * rhs.x; + out->cols[1] = lhs * rhs.y; + out->cols[2] = lhs * rhs.z; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_vector4d_outer_product(const float4 *p_lhs, const float4 *p_rhs, float4x4 *p_out) noexcept { + auto lhs = *reinterpret_cast(p_lhs); + auto rhs = *reinterpret_cast(p_rhs); + auto out = reinterpret_cast(p_out); + out->cols[0] = lhs * rhs.x; + out->cols[1] = lhs * rhs.y; + out->cols[2] = lhs * rhs.z; + out->cols[3] = lhs * rhs.w; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix2d_outer_product(const float2x2 *p_lhs, const float2x2 *p_rhs, float2x2 *p_out) noexcept { + float2x2 rhs_T; + luisa_fallback_wrapper_matrix2d_transpose(p_rhs, &rhs_T); + luisa_fallback_wrapper_matrix2d_mul_matrix(p_lhs, &rhs_T, p_out); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix3d_outer_product(const float3x3 *p_lhs, const float3x3 *p_rhs, float3x3 *p_out) noexcept { + float3x3 rhs_T; + luisa_fallback_wrapper_matrix3d_transpose(p_rhs, &rhs_T); + luisa_fallback_wrapper_matrix3d_mul_matrix(p_lhs, &rhs_T, p_out); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix4d_outer_product(const float4x4 *p_lhs, const float4x4 *p_rhs, float4x4 *p_out) noexcept { + float4x4 rhs_T; + luisa_fallback_wrapper_matrix4d_transpose(p_rhs, &rhs_T); + luisa_fallback_wrapper_matrix4d_mul_matrix(p_lhs, &rhs_T, p_out); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_matrix2d_determinant(const float2x2 *pm) noexcept { + auto m = *reinterpret_cast(pm); + return m.cols[0].x * m.cols[1].y - m.cols[1].x * m.cols[0].y; +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_matrix3d_determinant(const float3x3 *pm) noexcept { + auto m = *reinterpret_cast(pm); + return m.cols[0].x * (m.cols[1].y * m.cols[2].z - m.cols[2].y * m.cols[1].z) - + m.cols[1].x * (m.cols[0].y * m.cols[2].z - m.cols[2].y * m.cols[0].z) + + m.cols[2].x * (m.cols[0].y * m.cols[1].z - m.cols[1].y * m.cols[0].z); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_matrix4d_determinant(const float4x4 *pm) noexcept { + auto m = *reinterpret_cast(pm); + const auto coef00 = m.cols[2].z * m.cols[3].w - m.cols[3].z * m.cols[2].w; + const auto coef02 = m.cols[1].z * m.cols[3].w - m.cols[3].z * m.cols[1].w; + const auto coef03 = m.cols[1].z * m.cols[2].w - m.cols[2].z * m.cols[1].w; + const auto coef04 = m.cols[2].y * m.cols[3].w - m.cols[3].y * m.cols[2].w; + const auto coef06 = m.cols[1].y * m.cols[3].w - m.cols[3].y * m.cols[1].w; + const auto coef07 = m.cols[1].y * m.cols[2].w - m.cols[2].y * m.cols[1].w; + const auto coef08 = m.cols[2].y * m.cols[3].z - m.cols[3].y * m.cols[2].z; + const auto coef10 = m.cols[1].y * m.cols[3].z - m.cols[3].y * m.cols[1].z; + const auto coef11 = m.cols[1].y * m.cols[2].z - m.cols[2].y * m.cols[1].z; + const auto coef12 = m.cols[2].x * m.cols[3].w - m.cols[3].x * m.cols[2].w; + const auto coef14 = m.cols[1].x * m.cols[3].w - m.cols[3].x * m.cols[1].w; + const auto coef15 = m.cols[1].x * m.cols[2].w - m.cols[2].x * m.cols[1].w; + const auto coef16 = m.cols[2].x * m.cols[3].z - m.cols[3].x * m.cols[2].z; + const auto coef18 = m.cols[1].x * m.cols[3].z - m.cols[3].x * m.cols[1].z; + const auto coef19 = m.cols[1].x * m.cols[2].z - m.cols[2].x * m.cols[1].z; + const auto coef20 = m.cols[2].x * m.cols[3].y - m.cols[3].x * m.cols[2].y; + const auto coef22 = m.cols[1].x * m.cols[3].y - m.cols[3].x * m.cols[1].y; + const auto coef23 = m.cols[1].x * m.cols[2].y - m.cols[2].x * m.cols[1].y; + const auto fac0 = llvm_float4{coef00, coef00, coef02, coef03}; + const auto fac1 = llvm_float4{coef04, coef04, coef06, coef07}; + const auto fac2 = llvm_float4{coef08, coef08, coef10, coef11}; + const auto fac3 = llvm_float4{coef12, coef12, coef14, coef15}; + const auto fac4 = llvm_float4{coef16, coef16, coef18, coef19}; + const auto fac5 = llvm_float4{coef20, coef20, coef22, coef23}; + const auto Vec0 = llvm_float4{m.cols[1].x, m.cols[0].x, m.cols[0].x, m.cols[0].x}; + const auto Vec1 = llvm_float4{m.cols[1].y, m.cols[0].y, m.cols[0].y, m.cols[0].y}; + const auto Vec2 = llvm_float4{m.cols[1].z, m.cols[0].z, m.cols[0].z, m.cols[0].z}; + const auto Vec3 = llvm_float4{m.cols[1].w, m.cols[0].w, m.cols[0].w, m.cols[0].w}; + const auto inv0 = Vec1 * fac0 - Vec2 * fac1 + Vec3 * fac2; + const auto inv1 = Vec0 * fac0 - Vec2 * fac3 + Vec3 * fac4; + const auto inv2 = Vec0 * fac1 - Vec1 * fac3 + Vec3 * fac5; + const auto inv3 = Vec0 * fac2 - Vec1 * fac4 + Vec2 * fac5; + constexpr auto sign_a = llvm_float4{+1.0f, -1.0f, +1.0f, -1.0f}; + constexpr auto sign_b = llvm_float4{-1.0f, +1.0f, -1.0f, +1.0f}; + const auto inv_0 = inv0 * sign_a; + const auto inv_1 = inv1 * sign_b; + const auto inv_2 = inv2 * sign_a; + const auto inv_3 = inv3 * sign_b; + const auto dot0 = m.cols[0] * inv_0; + return dot0.x + dot0.y + dot0.z + dot0.w; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix2d_inverse(const float2x2 *pm, float2x2 *out) noexcept { + auto m = *reinterpret_cast(pm); + const auto one_over_determinant = 1.0f / (m.cols[0].x * m.cols[1].y - m.cols[1].x * m.cols[0].y); + out->cols[0].x = +m.cols[1].y * one_over_determinant; + out->cols[0].y = -m.cols[0].y * one_over_determinant; + out->cols[1].x = -m.cols[1].x * one_over_determinant; + out->cols[1].y = +m.cols[0].x * one_over_determinant; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix3d_inverse(const float3x3 *pm, float3x3 *out) noexcept { + auto m = *reinterpret_cast(pm); + const auto determinant = m.cols[0].x * (m.cols[1].y * m.cols[2].z - m.cols[2].y * m.cols[1].z) - + m.cols[1].x * (m.cols[0].y * m.cols[2].z - m.cols[2].y * m.cols[0].z) + + m.cols[2].x * (m.cols[0].y * m.cols[1].z - m.cols[1].y * m.cols[0].z); + const auto one_over_determinant = 1.0f / determinant; + out->cols[0].x = (m.cols[1].y * m.cols[2].z - m.cols[2].y * m.cols[1].z) * one_over_determinant; + out->cols[0].y = (m.cols[2].y * m.cols[0].z - m.cols[0].y * m.cols[2].z) * one_over_determinant; + out->cols[0].z = (m.cols[0].y * m.cols[1].z - m.cols[1].y * m.cols[0].z) * one_over_determinant; + out->cols[1].x = (m.cols[2].x * m.cols[1].z - m.cols[1].x * m.cols[2].z) * one_over_determinant; + out->cols[1].y = (m.cols[0].x * m.cols[2].z - m.cols[2].x * m.cols[0].z) * one_over_determinant; + out->cols[1].z = (m.cols[1].x * m.cols[0].z - m.cols[0].x * m.cols[1].z) * one_over_determinant; + out->cols[2].x = (m.cols[1].x * m.cols[2].y - m.cols[2].x * m.cols[1].y) * one_over_determinant; + out->cols[2].y = (m.cols[2].x * m.cols[0].y - m.cols[0].x * m.cols[2].y) * one_over_determinant; + out->cols[2].z = (m.cols[0].x * m.cols[1].y - m.cols[1].x * m.cols[0].y) * one_over_determinant; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_matrix4d_inverse(const float4x4 *pm, float4x4 *out) noexcept { + auto m = *reinterpret_cast(pm); + const auto coef00 = m.cols[2].z * m.cols[3].w - m.cols[3].z * m.cols[2].w; + const auto coef02 = m.cols[1].z * m.cols[3].w - m.cols[3].z * m.cols[1].w; + const auto coef03 = m.cols[1].z * m.cols[2].w - m.cols[2].z * m.cols[1].w; + const auto coef04 = m.cols[2].y * m.cols[3].w - m.cols[3].y * m.cols[2].w; + const auto coef06 = m.cols[1].y * m.cols[3].w - m.cols[3].y * m.cols[1].w; + const auto coef07 = m.cols[1].y * m.cols[2].w - m.cols[2].y * m.cols[1].w; + const auto coef08 = m.cols[2].y * m.cols[3].z - m.cols[3].y * m.cols[2].z; + const auto coef10 = m.cols[1].y * m.cols[3].z - m.cols[3].y * m.cols[1].z; + const auto coef11 = m.cols[1].y * m.cols[2].z - m.cols[2].y * m.cols[1].z; + const auto coef12 = m.cols[2].x * m.cols[3].w - m.cols[3].x * m.cols[2].w; + const auto coef14 = m.cols[1].x * m.cols[3].w - m.cols[3].x * m.cols[1].w; + const auto coef15 = m.cols[1].x * m.cols[2].w - m.cols[2].x * m.cols[1].w; + const auto coef16 = m.cols[2].x * m.cols[3].z - m.cols[3].x * m.cols[2].z; + const auto coef18 = m.cols[1].x * m.cols[3].z - m.cols[3].x * m.cols[1].z; + const auto coef19 = m.cols[1].x * m.cols[2].z - m.cols[2].x * m.cols[1].z; + const auto coef20 = m.cols[2].x * m.cols[3].y - m.cols[3].x * m.cols[2].y; + const auto coef22 = m.cols[1].x * m.cols[3].y - m.cols[3].x * m.cols[1].y; + const auto coef23 = m.cols[1].x * m.cols[2].y - m.cols[2].x * m.cols[1].y; + const auto fac0 = llvm_float4{coef00, coef00, coef02, coef03}; + const auto fac1 = llvm_float4{coef04, coef04, coef06, coef07}; + const auto fac2 = llvm_float4{coef08, coef08, coef10, coef11}; + const auto fac3 = llvm_float4{coef12, coef12, coef14, coef15}; + const auto fac4 = llvm_float4{coef16, coef16, coef18, coef19}; + const auto fac5 = llvm_float4{coef20, coef20, coef22, coef23}; + const auto Vec0 = llvm_float4{m.cols[1].x, m.cols[0].x, m.cols[0].x, m.cols[0].x}; + const auto Vec1 = llvm_float4{m.cols[1].y, m.cols[0].y, m.cols[0].y, m.cols[0].y}; + const auto Vec2 = llvm_float4{m.cols[1].z, m.cols[0].z, m.cols[0].z, m.cols[0].z}; + const auto Vec3 = llvm_float4{m.cols[1].w, m.cols[0].w, m.cols[0].w, m.cols[0].w}; + const auto inv0 = Vec1 * fac0 - Vec2 * fac1 + Vec3 * fac2; + const auto inv1 = Vec0 * fac0 - Vec2 * fac3 + Vec3 * fac4; + const auto inv2 = Vec0 * fac1 - Vec1 * fac3 + Vec3 * fac5; + const auto inv3 = Vec0 * fac2 - Vec1 * fac4 + Vec2 * fac5; + constexpr auto sign_a = llvm_float4{+1.0f, -1.0f, +1.0f, -1.0f}; + constexpr auto sign_b = llvm_float4{-1.0f, +1.0f, -1.0f, +1.0f}; + const auto inv_0 = inv0 * sign_a; + const auto inv_1 = inv1 * sign_b; + const auto inv_2 = inv2 * sign_a; + const auto inv_3 = inv3 * sign_b; + const auto dot0 = m.cols[0] * llvm_float4{inv_0.x, inv_1.x, inv_2.x, inv_3.x}; + const auto dot1 = dot0.x + dot0.y + dot0.z + dot0.w; + const auto one_over_determinant = 1.0f / dot1; + auto result = reinterpret_cast(out); + result->cols[0] = inv_0 * one_over_determinant; + result->cols[1] = inv_1 * one_over_determinant; + result->cols[2] = inv_2 * one_over_determinant; + result->cols[3] = inv_3 * one_over_determinant; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_read_int(const TextureView *handle, const uint2 *coord, int4 *out) noexcept { + auto packed_view = reinterpret_cast(handle); + *out = luisa_fallback_texture2d_read_int(packed_view->data, packed_view->extra, coord->x, coord->y); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_read_uint(const TextureView *handle, const uint2 *coord, uint4 *out) noexcept { + auto packed_view = reinterpret_cast(handle); + *out = luisa_fallback_texture2d_read_uint(packed_view->data, packed_view->extra, coord->x, coord->y); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_read_float(const TextureView *handle, const uint2 *coord, float4 *out) noexcept { + auto packed_view = reinterpret_cast(handle); + *out = luisa_fallback_texture2d_read_float(packed_view->data, packed_view->extra, coord->x, coord->y); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_write_float(const TextureView *handle, const uint2 *coord, const float4 *value) noexcept { + auto packed_view = reinterpret_cast(handle); + luisa_fallback_texture2d_write_float(packed_view->data, packed_view->extra, coord->x, coord->y, *value); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_write_uint(const TextureView *handle, const uint2 *coord, const uint4 *value) noexcept { + auto packed_view = reinterpret_cast(handle); + luisa_fallback_texture2d_write_uint(packed_view->data, packed_view->extra, coord->x, coord->y, *value); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_write_int(const TextureView *handle, const uint2 *coord, const int4 *value) noexcept { + auto packed_view = reinterpret_cast(handle); + luisa_fallback_texture2d_write_int(packed_view->data, packed_view->extra, coord->x, coord->y, *value); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_read_int(const TextureView *handle, const uint3 *coord, int4 *out) noexcept { + auto packed_view = reinterpret_cast(handle); + *out = luisa_fallback_texture3d_read_int(packed_view->data, packed_view->extra, coord->x, coord->y, coord->z); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_read_uint(const TextureView *handle, const uint3 *coord, uint4 *out) noexcept { + auto packed_view = reinterpret_cast(handle); + *out = luisa_fallback_texture3d_read_uint(packed_view->data, packed_view->extra, coord->x, coord->y, coord->z); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_read_float(const TextureView *handle, const uint3 *coord, float4 *out) noexcept { + auto packed_view = reinterpret_cast(handle); + *out = luisa_fallback_texture3d_read_float(packed_view->data, packed_view->extra, coord->x, coord->y, coord->z); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_write_float(const TextureView *handle, const uint3 *coord, const float4 *value) noexcept { + auto packed_view = reinterpret_cast(handle); + luisa_fallback_texture3d_write_float(packed_view->data, packed_view->extra, coord->x, coord->y, coord->z, *value); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_write_uint(const TextureView *handle, const uint3 *coord, const uint4 *value) noexcept { + auto packed_view = reinterpret_cast(handle); + luisa_fallback_texture3d_write_uint(packed_view->data, packed_view->extra, coord->x, coord->y, coord->z, *value); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_write_int(const TextureView *handle, const uint3 *coord, const int4 *value) noexcept { + auto packed_view = reinterpret_cast(handle); + luisa_fallback_texture3d_write_int(packed_view->data, packed_view->extra, coord->x, coord->y, coord->z, *value); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture2d_size(const TextureView *handle, uint2 *out) noexcept { + *out = {handle->_width, handle->_height}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_texture3d_size(const TextureView *handle, uint3 *out) noexcept { + *out = {handle->_width, handle->_height, handle->_depth}; +} + +#define LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(bindless_handle, slot_index) \ + auto texture = bindless_handle->slots[slot_index].tex2d; \ + auto sampler = (bindless_handle->slots[slot_index]._compressed_buffer_size_sampler_2d_sampler_3d >> 4u) & 0x0fu; + +#define LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(bindless_handle, slot_index) \ + auto texture = bindless_handle->slots[slot_index].tex3d; \ + auto sampler = bindless_handle->slots[slot_index]._compressed_buffer_size_sampler_2d_sampler_3d & 0x0fu; + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_sample(const BindlessArrayView *handle, uint slot_index, const float2 *uv, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + *out = luisa_fallback_bindless_texture2d_sample(texture, sampler, uv->x, uv->y); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_sample_level(const BindlessArrayView *handle, uint slot_index, const float2 *uv, float level, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + *out = luisa_fallback_bindless_texture2d_sample_level(texture, sampler, uv->x, uv->y, level); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_sample_grad(const BindlessArrayView *handle, uint slot_index, const float2 *uv, const float2 *ddx, const float2 *ddy, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + *out = luisa_fallback_bindless_texture2d_sample_grad(texture, sampler, uv->x, uv->y, ddx->x, ddx->y, ddy->x, ddy->y); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_sample_grad_level(const BindlessArrayView *handle, uint slot_index, const float2 *uv, const float2 *ddx, const float2 *ddy, float level, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + *out = luisa_fallback_bindless_texture2d_sample_grad_level(texture, sampler, uv->x, uv->y, ddx->x, ddx->y, ddy->x, ddy->y, level); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_sample(const BindlessArrayView *handle, uint slot_index, const float3 *uvw, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + *out = luisa_fallback_bindless_texture3d_sample(texture, sampler, uvw->x, uvw->y, uvw->z); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_sample_level(const BindlessArrayView *handle, uint slot_index, const float3 *uvw, float level, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + *out = luisa_fallback_bindless_texture3d_sample_level(texture, sampler, uvw->x, uvw->y, uvw->z, level); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_sample_grad(const BindlessArrayView *handle, uint slot_index, const float3 *uvw, const float3 *ddx, const float3 *ddy, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + *out = luisa_fallback_bindless_texture3d_sample_grad(texture, sampler, uvw->x, uvw->y, uvw->z, ddx->x, ddx->y, ddx->z, ddy->x, ddy->y, ddy->z); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_sample_grad_level(const BindlessArrayView *handle, uint slot_index, const float3 *uvw, const float3 *ddx, const float3 *ddy, float level, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + *out = luisa_fallback_bindless_texture3d_sample_grad_level(texture, sampler, uvw->x, uvw->y, uvw->z, ddx->x, ddx->y, ddx->z, ddy->x, ddy->y, ddy->z, level); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_read(const BindlessArrayView *handle, uint slot_index, const uint2 *coord, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + *out = luisa_fallback_bindless_texture2d_read(texture, coord->x, coord->y); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_read(const BindlessArrayView *handle, uint slot_index, const uint3 *coord, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + *out = luisa_fallback_bindless_texture3d_read(texture, coord->x, coord->y, coord->z); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_read_level(const BindlessArrayView *handle, uint slot_index, const uint2 *coord, uint level, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + *out = luisa_fallback_bindless_texture2d_read_level(texture, coord->x, coord->y, level); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_read_level(const BindlessArrayView *handle, uint slot_index, const uint3 *coord, uint level, float4 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + *out = luisa_fallback_bindless_texture3d_read_level(texture, coord->x, coord->y, coord->z, level); +} + +struct alignas(16) TextureHeader { + void *data; + unsigned short size[3]; +}; + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_size_level(const BindlessArrayView *handle, uint slot_index, uint level, uint2 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE2D(handle, slot_index) + auto t = reinterpret_cast(texture); + auto width = static_cast(t->size[0]) >> level; + auto height = static_cast(t->size[1]) >> level; + *out = {width > 0u ? width : 1u, height > 0u ? height : 1u}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_size_level(const BindlessArrayView *handle, uint slot_index, uint level, uint3 *out) noexcept { + LUISA_FALLBACK_BINDLESS_DECODE_TEXTURE3D(handle, slot_index) + auto t = reinterpret_cast(texture); + auto width = static_cast(t->size[0]) >> level; + auto height = static_cast(t->size[1]) >> level; + auto depth = static_cast(t->size[2]) >> level; + *out = {width > 0u ? width : 1u, height > 0u ? height : 1u, depth > 0u ? depth : 1u}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture2d_size(const BindlessArrayView *handle, uint slot_index, uint2 *out) noexcept { + return luisa_fallback_wrapper_bindless_texture2d_size_level(handle, slot_index, 0u, out); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_bindless_texture3d_size(const BindlessArrayView *handle, uint slot_index, uint3 *out) noexcept { + return luisa_fallback_wrapper_bindless_texture3d_size_level(handle, slot_index, 0u, out); +} + +/* Ray structure for a single ray */ +struct alignas(16) EmbreeRay { + llvm_float4 org_tnear; // Ray origin and near t value + llvm_float4 dir_time; // Ray direction and far t value + + struct { + float tfar; + uint mask; + uint id; + uint flags; + } extra; +}; + +/* Hit structure for a single ray */ +struct alignas(16) EmbreeHit { + float Ng_x; // x coordinate of geometry normal + float Ng_y; // y coordinate of geometry normal + float Ng_z; // z coordinate of geometry normal + float u; // barycentric u coordinate of hit + float v; // barycentric v coordinate of hit + uint primID; // primitive ID + uint geomID; // geometry ID + uint instID[1]; // instance ID +}; + +/* Combined ray/hit structure for a single ray */ +struct alignas(16) EmbreeRayHit { + EmbreeRay ray; + EmbreeHit hit; +}; + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_trace_closest_motion(const AccelView *handle, const Ray *ray, float time, uint mask, SurfaceHit *out) noexcept { + EmbreeRayHit ray_hit; + auto org_tnear = reinterpret_cast(&ray->origin); + auto dir_tfar = reinterpret_cast(&ray->direction); + ray_hit.ray.org_tnear = *org_tnear; + ray_hit.ray.dir_time = {dir_tfar->x, dir_tfar->y, dir_tfar->z, time}; + ray_hit.ray.extra = {ray->t_max, mask, 0u, 0u}; + ray_hit.hit.primID = -1; + ray_hit.hit.geomID = -1; + ray_hit.hit.instID[0] = -1; + luisa_fallback_accel_trace_closest(handle->embree_scene, &ray_hit); + *out = {.inst = ray_hit.hit.instID[0], + .prim = ray_hit.hit.primID, + .bary = {ray_hit.hit.u, ray_hit.hit.v}, + .committed_ray_t = ray_hit.ray.extra.tfar}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_trace_any_motion(const AccelView *handle, const Ray *ray, float time, uint mask, bool *out) noexcept { + EmbreeRay ray_; + auto org_tnear = reinterpret_cast(&ray->origin); + auto dir_tfar = reinterpret_cast(&ray->direction); + ray_.org_tnear = *org_tnear; + ray_.dir_time = {dir_tfar->x, dir_tfar->y, dir_tfar->z, time}; + ray_.extra = {ray->t_max, mask, 0u, 0u}; + luisa_fallback_accel_trace_any(handle->embree_scene, &ray_); + *out = ray_.extra.tfar < 0.f; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_trace_closest(const AccelView *handle, const Ray *ray, uint mask, SurfaceHit *out) noexcept { + luisa_fallback_wrapper_accel_trace_closest_motion(handle, ray, 0.f, mask, out); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_trace_any(const AccelView *handle, const Ray *ray, uint mask, bool *out) noexcept { + luisa_fallback_wrapper_accel_trace_any_motion(handle, ray, 0.f, mask, out); +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_instance_transform(const AccelView *handle, uint instance_id, float4x4 *out) noexcept { + auto rows = reinterpret_cast(handle->instances[instance_id].affine); + auto r0 = rows[0]; + auto r1 = rows[1]; + auto r2 = rows[2]; + auto m = reinterpret_cast(out); + m->cols[0] = {r0.x, r1.x, r2.x, 0.f}; + m->cols[1] = {r0.y, r1.y, r2.y, 0.f}; + m->cols[2] = {r0.z, r1.z, r2.z, 0.f}; + m->cols[3] = {r0.w, r1.w, r2.w, 1.f}; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_instance_user_id(const AccelView *handle, uint instance_id, uint *out) noexcept { + *out = handle->instances[instance_id].user_id; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_instance_visibility_mask(const AccelView *handle, uint instance_id, uint *out) noexcept { + *out = handle->instances[instance_id].mask; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_set_instance_transform(AccelView *handle, uint instance_id, const float4x4 *transform) noexcept { + auto &instance = handle->instances[instance_id]; + auto rows = reinterpret_cast(instance.affine); + auto m = *reinterpret_cast(transform); + rows[0] = {m.cols[0].x, m.cols[1].x, m.cols[2].x, m.cols[3].x}; + rows[1] = {m.cols[0].y, m.cols[1].y, m.cols[2].y, m.cols[3].y}; + rows[2] = {m.cols[0].z, m.cols[1].z, m.cols[2].z, m.cols[3].z}; + instance.dirty = true; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_set_instance_visibility_mask(AccelView *handle, uint instance_id, uint mask) noexcept { + auto &instance = handle->instances[instance_id]; + instance.mask = mask; + instance.dirty = true; +} + +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_set_instance_user_id(AccelView *handle, uint instance_id, uint user_id) noexcept { + auto &instance = handle->instances[instance_id]; + instance.user_id = user_id; + instance.dirty = true; +} + +// opaque +LUISA_FALLBACK_WRAPPER void luisa_fallback_wrapper_accel_set_instance_opacity(AccelView *handle, uint instance_id, bool opacity) noexcept { + auto &instance = handle->instances[instance_id]; + instance.opaque = opacity; + instance.dirty = true; +} + +#define LUISA_FALLBACK_ATOMIC_MEMORY_ORDER __ATOMIC_RELAXED + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_exchange_int(int *a, int b) noexcept { + return __atomic_exchange_n(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_exchange_uint(uint *a, uint b) noexcept { + return __atomic_exchange_n(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_exchange_long(int64_t *a, int64_t b) noexcept { + return __atomic_exchange_n(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_exchange_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_exchange_n(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_atomic_exchange_float(float *a, float b) noexcept { + return __builtin_bit_cast(float, __atomic_exchange_n(reinterpret_cast(a), __builtin_bit_cast(int, b), LUISA_FALLBACK_ATOMIC_MEMORY_ORDER)); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_compare_exchange_int(int *a, int b, int c) noexcept { + __atomic_compare_exchange_n(a, &b, c, true, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); + return b; +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_compare_exchange_uint(uint *a, uint b, uint c) noexcept { + __atomic_compare_exchange_n(a, &b, c, true, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); + return b; +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_compare_exchange_long(int64_t *a, int64_t b, int64_t c) noexcept { + __atomic_compare_exchange_n(a, &b, c, true, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); + return b; +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_compare_exchange_ulong(uint64_t *a, uint64_t b, uint64_t c) noexcept { + __atomic_compare_exchange_n(a, &b, c, true, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); + return b; +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_atomic_compare_exchange_float(float *a, float b, float c) noexcept { + __atomic_compare_exchange_n(reinterpret_cast(a), reinterpret_cast(&b), __builtin_bit_cast(int, c), true, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); + return b; +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_add_int(int *a, int b) noexcept { + return __atomic_fetch_add(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_add_uint(uint *a, uint b) noexcept { + return __atomic_fetch_add(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_add_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_add(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_add_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_add(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_atomic_fetch_add_float(float *a, float b) noexcept { + return __atomic_fetch_add(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_sub_int(int *a, int b) noexcept { + return __atomic_fetch_sub(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_sub_uint(uint *a, uint b) noexcept { + return __atomic_fetch_sub(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_sub_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_sub(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_sub_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_sub(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_atomic_fetch_sub_float(float *a, float b) noexcept { + return __atomic_fetch_sub(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_and_int(int *a, int b) noexcept { + return __atomic_fetch_and(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_and_uint(uint *a, uint b) noexcept { + return __atomic_fetch_and(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_and_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_and(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_and_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_and(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_or_int(int *a, int b) noexcept { + return __atomic_fetch_or(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_or_uint(uint *a, uint b) noexcept { + return __atomic_fetch_or(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_or_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_or(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_or_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_or(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_xor_int(int *a, int b) noexcept { + return __atomic_fetch_xor(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_xor_uint(uint *a, uint b) noexcept { + return __atomic_fetch_xor(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_xor_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_xor(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_xor_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_xor(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_min_int(int *a, int b) noexcept { + return __atomic_fetch_min(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_min_uint(uint *a, uint b) noexcept { + return __atomic_fetch_min(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_min_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_min(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_min_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_min(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_atomic_fetch_min_float(float *a, float b) noexcept { + return __atomic_fetch_min(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int luisa_fallback_wrapper_atomic_fetch_max_int(int *a, int b) noexcept { + return __atomic_fetch_max(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint luisa_fallback_wrapper_atomic_fetch_max_uint(uint *a, uint b) noexcept { + return __atomic_fetch_max(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER int64_t luisa_fallback_wrapper_atomic_fetch_max_long(int64_t *a, int64_t b) noexcept { + return __atomic_fetch_max(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER uint64_t luisa_fallback_wrapper_atomic_fetch_max_ulong(uint64_t *a, uint64_t b) noexcept { + return __atomic_fetch_max(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +LUISA_FALLBACK_WRAPPER float luisa_fallback_wrapper_atomic_fetch_max_float(float *a, float b) noexcept { + return __atomic_fetch_max(a, b, LUISA_FALLBACK_ATOMIC_MEMORY_ORDER); +} + +} diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.darwin.arm64.inl b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.darwin.arm64.inl new file mode 100644 index 000000000..80927d2fe --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.darwin.arm64.inl @@ -0,0 +1,2232 @@ + +static const unsigned char luisa_fallback_backend_device_builtin_module[35664] = { + 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x30, 0x8b, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x62, 0x0c, 0x30, 0x24, 0x4a, 0x59, 0xbe, 0x66, 0xdd, 0xfb, 0xb5, 0x7f, 0x0b, 0x51, 0x80, 0x4c, + 0x01, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x4c, 0x17, 0x00, 0x00, 0x0b, 0x02, 0x21, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, + 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x1c, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xe4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, + 0x0a, 0x32, 0x72, 0x88, 0x48, 0x70, 0xc4, 0x21, 0x23, 0x44, 0x12, 0x87, 0x8c, 0x10, 0x41, 0x92, + 0x02, 0x64, 0xc8, 0x08, 0xb1, 0x14, 0x20, 0x43, 0x46, 0x88, 0x20, 0xc9, 0x01, 0x32, 0x72, 0x84, + 0x58, 0x0e, 0x90, 0x91, 0x23, 0x44, 0x90, 0xa1, 0x82, 0xa2, 0x02, 0x19, 0xc3, 0x07, 0xcb, 0x15, + 0x19, 0x72, 0x8c, 0x8c, 0x25, 0x10, 0x1d, 0x3a, 0x74, 0xc8, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x22, 0x66, 0x04, 0x10, 0xb2, 0x42, 0x82, 0xc9, 0x11, 0x52, 0x42, 0x82, + 0xc9, 0x91, 0x71, 0xc2, 0x50, 0x48, 0x0a, 0x09, 0x26, 0x47, 0xc6, 0x05, 0x42, 0x72, 0x26, 0x08, + 0x52, 0x81, 0x46, 0x00, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x73, 0x04, 0xa0, 0x50, 0x86, 0xc0, 0x00, + 0x50, 0x86, 0x00, 0x00, 0x30, 0x03, 0x50, 0x04, 0x03, 0x60, 0x8e, 0x00, 0x24, 0xe6, 0x08, 0xc0, + 0xa0, 0x14, 0x08, 0xc0, 0x20, 0x91, 0xb8, 0x46, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x62, 0x71, 0x80, + 0x09, 0x47, 0x84, 0xc1, 0x60, 0x30, 0x94, 0x62, 0x01, 0x18, 0x24, 0x12, 0x49, 0x60, 0x28, 0x46, + 0x00, 0x30, 0x48, 0x24, 0x1a, 0xc5, 0x08, 0x00, 0x06, 0x89, 0x04, 0xa2, 0x18, 0x08, 0xc0, 0x20, + 0x91, 0x48, 0x14, 0x63, 0x01, 0x18, 0x24, 0x12, 0x89, 0x72, 0x04, 0x00, 0x83, 0x44, 0x22, 0xd1, + 0x28, 0x47, 0x00, 0x30, 0x48, 0x24, 0x12, 0x88, 0x52, 0x04, 0x00, 0x09, 0x00, 0xa0, 0x14, 0x0b, + 0x40, 0xc2, 0x60, 0x28, 0x46, 0x00, 0x90, 0x00, 0x18, 0x00, 0xc5, 0x58, 0x00, 0x12, 0x06, 0x83, + 0xa1, 0x1c, 0x01, 0x40, 0x02, 0x00, 0x00, 0x00, 0x4a, 0xb2, 0x00, 0x24, 0x0c, 0x06, 0x83, 0xc1, + 0x60, 0x28, 0x48, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x40, 0x51, 0x16, 0x80, 0x84, 0xc1, 0x60, + 0x30, 0x18, 0x0c, 0x86, 0x72, 0x2c, 0x00, 0x09, 0x83, 0xc1, 0x60, 0x28, 0xcc, 0x02, 0x90, 0x30, + 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x94, 0x66, 0x01, 0x48, 0x18, 0x0c, 0x06, 0x83, 0xc1, + 0x60, 0x30, 0x18, 0x0c, 0x85, 0x58, 0x00, 0x12, 0x89, 0x52, 0x2c, 0x00, 0x89, 0x44, 0xa2, 0x18, + 0x01, 0x40, 0x02, 0x90, 0x00, 0x14, 0x63, 0x01, 0x48, 0x24, 0x12, 0x89, 0x52, 0x04, 0x00, 0x89, + 0x04, 0xa0, 0x10, 0x01, 0x40, 0x02, 0x50, 0x8c, 0x00, 0x00, 0x60, 0x48, 0x00, 0x4a, 0x11, 0x00, + 0x00, 0x12, 0x80, 0x42, 0x04, 0x00, 0x89, 0xc4, 0x1c, 0x41, 0x50, 0x88, 0x00, 0x20, 0x81, 0x2a, + 0x43, 0x02, 0x90, 0x28, 0xc3, 0x00, 0x30, 0x28, 0x83, 0x01, 0x60, 0x28, 0x44, 0x02, 0x90, 0x48, + 0x14, 0x62, 0x00, 0x18, 0x0c, 0x0a, 0x61, 0x00, 0x18, 0x0c, 0x65, 0x48, 0x24, 0x12, 0x73, 0x04, + 0x50, 0x19, 0x62, 0xb1, 0xd8, 0x30, 0x02, 0x61, 0x94, 0xc1, 0x60, 0x98, 0x0d, 0x23, 0x08, 0x49, + 0x19, 0x6a, 0xb5, 0xda, 0x30, 0x82, 0x10, 0x07, 0x65, 0xb8, 0xdd, 0x6e, 0x03, 0x01, 0xc3, 0x08, + 0x82, 0x31, 0x47, 0x80, 0x0c, 0x23, 0x10, 0xc9, 0x30, 0xc2, 0x60, 0x0c, 0x23, 0x0c, 0xc9, 0x4d, + 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0x6f, 0x48, 0x33, 0x2c, 0x84, 0x24, 0xb1, 0x8b, 0x33, 0x21, 0x02, + 0x30, 0x00, 0x00, 0x6e, 0x91, 0xa6, 0x88, 0x12, 0x26, 0x1f, 0x68, 0x9c, 0x06, 0x11, 0x86, 0x44, + 0x22, 0x71, 0x90, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x1e, 0x13, 0x44, 0x04, 0xb1, 0x02, 0x18, 0x1a, + 0x66, 0x33, 0x60, 0x06, 0x24, 0x0e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xdf, 0x63, 0x82, 0x88, 0x20, + 0x42, 0x64, 0x42, 0x88, 0xc1, 0x60, 0x30, 0x18, 0x12, 0x09, 0xe1, 0x4d, 0xd2, 0x14, 0x51, 0xc2, + 0xe4, 0x7b, 0x4c, 0x10, 0x11, 0xc4, 0x0a, 0x60, 0x21, 0x32, 0x21, 0x21, 0x38, 0x4c, 0x06, 0xc3, + 0x51, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0x6b, 0x82, 0x40, 0x2c, 0x62, 0x23, 0x4d, 0x40, 0x23, 0x10, + 0xc8, 0x28, 0xee, 0x76, 0xbb, 0x04, 0xc0, 0x08, 0x09, 0x94, 0x11, 0x06, 0x28, 0x00, 0x00, 0x00, + 0x51, 0x18, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x1b, 0x72, 0x27, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x10, 0x00, 0x53, 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, + 0x16, 0x06, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, + 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, + 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, + 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, + 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, + 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, + 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, + 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, + 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, + 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, + 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, + 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, + 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, + 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, + 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x70, 0x80, 0x07, 0x78, + 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x88, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, + 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, + 0x60, 0x0d, 0xc2, 0xa1, 0x1c, 0xe6, 0x81, 0x0d, 0xd6, 0x20, 0x1c, 0xd8, 0x81, 0x1e, 0xdc, 0x41, + 0x1f, 0xc6, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xc6, 0x61, 0x1c, 0xc8, 0x01, 0x1e, 0xd8, 0x60, 0x0d, + 0xc6, 0x61, 0x1c, 0xd2, 0x81, 0x1c, 0xf0, 0x81, 0x0d, 0xd6, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, + 0x81, 0x1d, 0xf0, 0xc1, 0x1d, 0xea, 0xa1, 0x1d, 0xd8, 0x60, 0x0d, 0xc6, 0x41, 0x1e, 0xc6, 0x81, + 0x0d, 0xd6, 0x80, 0x1c, 0xd2, 0x81, 0x1e, 0xd8, 0x60, 0x0d, 0xc8, 0xe1, 0x1d, 0xe8, 0x01, 0x1e, + 0xe4, 0xe1, 0x1d, 0xc8, 0x81, 0x0d, 0xd6, 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0xa1, 0x1d, 0xd8, + 0x60, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x20, 0x1c, 0xe4, 0xa1, 0x1d, 0xec, 0x01, 0x0f, 0xd8, 0x60, + 0x0d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0xcc, 0xa1, 0x1d, 0xd8, 0x81, 0x0d, 0xd6, 0xc0, 0x1c, + 0xe0, 0x81, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xd8, 0x60, 0x0d, 0xcc, 0xa1, 0x1e, 0xd8, + 0x81, 0x1d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0xd8, 0x60, 0x0d, 0xd4, 0x61, 0x1e, 0xc6, 0xe1, + 0x1d, 0xdc, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xd8, 0x61, 0x1e, 0xca, 0x81, 0x0d, 0xd6, 0xc0, 0x1d, + 0xca, 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0x00, 0x1e, 0xc2, 0xa1, 0x1e, 0xe8, 0x01, 0x1d, 0xd8, + 0x60, 0x0d, 0xe0, 0xa1, 0x1c, 0xe4, 0xc1, 0x1c, 0xda, 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0x00, + 0x1e, 0xe4, 0xa1, 0x1c, 0xc8, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0xd8, 0x60, 0x0d, 0xe4, 0x21, 0x1c, + 0xe6, 0x81, 0x0d, 0xd6, 0x40, 0x1e, 0xc6, 0x01, 0x1e, 0xc6, 0x81, 0x0d, 0xd6, 0x40, 0x1e, 0xc8, + 0xa1, 0x1d, 0xd8, 0x60, 0x0d, 0xe6, 0x41, 0x1c, 0xd8, 0x60, 0x0d, 0xe6, 0x01, 0x1d, 0xc2, 0x41, + 0x0e, 0xd8, 0x60, 0x0d, 0xe6, 0x01, 0x1d, 0xc2, 0x61, 0x0e, 0xd8, 0x60, 0x0d, 0xe6, 0x01, 0x1e, + 0xca, 0x61, 0x1c, 0xe4, 0xa1, 0x1c, 0xe6, 0x81, 0x1e, 0xe4, 0x21, 0x1d, 0xc6, 0x81, 0x1e, 0xd8, + 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xc4, 0x61, 0x1e, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xdc, 0x20, + 0x0e, 0xc2, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0xc0, 0x0d, 0xe4, 0x20, 0x1c, 0xd8, 0x60, 0x0d, + 0xec, 0x01, 0x0f, 0xdc, 0x60, 0x0e, 0xc2, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0xc0, 0x0d, 0xe8, + 0x20, 0x1c, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xc2, 0x81, 0x0d, 0xd6, 0x40, 0x1f, 0xc6, 0xa1, + 0x1d, 0xd8, 0x60, 0x0d, 0xf4, 0x61, 0x1c, 0xf4, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, + 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, + 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x03, 0x22, 0x04, 0xc0, 0x02, 0x90, 0x02, 0x50, 0x6d, + 0x40, 0x06, 0x01, 0x58, 0x00, 0x52, 0x00, 0xaa, 0x0d, 0x08, 0x31, 0x00, 0x0b, 0x40, 0x0a, 0x00, + 0x1d, 0x6c, 0x78, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x53, 0x00, 0xfc, 0x00, 0xf8, 0x03, + 0x40, 0x02, 0xfa, 0x20, 0xb0, 0x85, 0x61, 0x03, 0x61, 0x04, 0x00, 0x1f, 0x6c, 0x20, 0x0e, 0x01, + 0x58, 0x36, 0x20, 0x88, 0x00, 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0x21, 0x77, 0x92, 0xff, 0xff, + 0xff, 0xff, 0x1f, 0x00, 0x01, 0x30, 0x05, 0xc0, 0x0f, 0x00, 0x38, 0x00, 0xfe, 0x00, 0x90, 0x80, + 0x3e, 0x08, 0x6c, 0x21, 0x20, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, 0xc0, + 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, + 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, + 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, + 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, + 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, + 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, + 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, + 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, + 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, + 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, + 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, + 0x7a, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, + 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, 0x00, 0x82, 0x1e, + 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, 0xc6, 0x01, 0x1e, 0xea, 0x01, 0x08, 0x07, + 0x78, 0x80, 0x07, 0x76, 0x28, 0x87, 0x36, 0x68, 0x87, 0x38, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, + 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, + 0x87, 0x79, 0x00, 0xd6, 0x20, 0x1c, 0xca, 0x61, 0x1e, 0xd8, 0x60, 0x0d, 0xc2, 0x81, 0x1d, 0xe8, + 0xc1, 0x1d, 0xf4, 0x61, 0x1c, 0xec, 0x81, 0x0d, 0xd6, 0x60, 0x1c, 0xc6, 0x81, 0x1c, 0xe0, 0x81, + 0x0d, 0xd6, 0x60, 0x1c, 0xc6, 0x21, 0x1d, 0xc8, 0x01, 0x1f, 0xd8, 0x60, 0x0d, 0xc6, 0xe1, 0x1d, + 0xda, 0x01, 0x1e, 0xd8, 0x01, 0x1f, 0xdc, 0xa1, 0x1e, 0xda, 0x81, 0x0d, 0xd6, 0x60, 0x1c, 0xe4, + 0x61, 0x1c, 0xd8, 0x60, 0x0d, 0xc8, 0x21, 0x1d, 0xe8, 0x81, 0x0d, 0xd6, 0x80, 0x1c, 0xde, 0x81, + 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1c, 0xd8, 0x60, 0x0d, 0xcc, 0x81, 0x1d, 0xc2, 0xe1, 0x1c, + 0xda, 0x81, 0x0d, 0xd6, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xc2, 0x41, 0x1e, 0xda, 0xc1, 0x1e, 0xf0, + 0x80, 0x0d, 0xd6, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0xc0, 0x1c, 0xda, 0x81, 0x1d, 0xd8, 0x60, + 0x0d, 0xcc, 0x01, 0x1e, 0xe8, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0x81, 0x0d, 0xd6, 0xc0, 0x1c, + 0xea, 0x81, 0x1d, 0xd8, 0xc1, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x80, 0x0d, 0xd6, 0x40, 0x1d, 0xe6, + 0x61, 0x1c, 0xde, 0xc1, 0x1d, 0xec, 0x81, 0x0d, 0xd6, 0x80, 0x1d, 0xe6, 0xa1, 0x1c, 0xd8, 0x60, + 0x0d, 0xdc, 0xa1, 0x1c, 0xde, 0xc1, 0x1d, 0xd8, 0x60, 0x0d, 0xe0, 0x21, 0x1c, 0xea, 0x81, 0x1e, + 0xd0, 0x81, 0x0d, 0xd6, 0x00, 0x1e, 0xca, 0x41, 0x1e, 0xcc, 0xa1, 0x1d, 0xde, 0xc1, 0x1d, 0xd8, + 0x60, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x81, 0x1c, 0xe4, 0xa1, 0x1c, 0xe6, 0x81, 0x0d, 0xd6, 0x40, + 0x1e, 0xc2, 0x61, 0x1e, 0xd8, 0x60, 0x0d, 0xe4, 0x61, 0x1c, 0xe0, 0x61, 0x1c, 0xd8, 0x60, 0x0d, + 0xe4, 0x81, 0x1c, 0xda, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xc4, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xd0, + 0x21, 0x1c, 0xe4, 0x80, 0x0d, 0xd6, 0x60, 0x1e, 0xd0, 0x21, 0x1c, 0xe6, 0x80, 0x0d, 0xd6, 0x60, + 0x1e, 0xe0, 0xa1, 0x1c, 0xc6, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0xe8, 0x41, 0x1e, 0xd2, 0x61, 0x1c, + 0xe8, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0x41, 0x1c, 0xe6, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, + 0xc0, 0x0d, 0xe2, 0x20, 0x1c, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xdc, 0x40, 0x0e, 0xc2, 0x81, + 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0xc0, 0x0d, 0xe6, 0x20, 0x1c, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, + 0xdc, 0x80, 0x0e, 0xc2, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0x20, 0x1c, 0xd8, 0x60, 0x0d, 0xf4, + 0x61, 0x1c, 0xda, 0x81, 0x0d, 0xd6, 0x40, 0x1f, 0xc6, 0x41, 0x1f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, + 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, + 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x14, 0x0a, 0x10, 0xdc, 0xc2, 0x09, + 0x6d, 0x70, 0x9d, 0xe5, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, 0x90, 0x88, 0x70, + 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, + 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, + 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, 0x1e, 0xda, 0xc0, + 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, + 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, + 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, + 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, + 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, + 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, + 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, + 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, + 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, + 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, + 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, + 0x7a, 0x68, 0x83, 0x71, 0x80, 0x87, 0x7a, 0x00, 0xc2, 0x01, 0x1e, 0xe0, 0x81, 0x1d, 0xca, 0xa1, + 0x0d, 0xda, 0x21, 0x0e, 0x00, 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, + 0xcc, 0xa1, 0x1c, 0xc2, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0x80, 0x35, 0x08, 0x87, + 0x72, 0x98, 0x07, 0x36, 0x58, 0x83, 0x70, 0x60, 0x07, 0x7a, 0x70, 0x07, 0x7d, 0x18, 0x07, 0x7b, + 0x60, 0x83, 0x35, 0x18, 0x87, 0x71, 0x20, 0x07, 0x78, 0x60, 0x83, 0x35, 0x18, 0x87, 0x71, 0x48, + 0x07, 0x72, 0xc0, 0x07, 0x36, 0x58, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x07, 0x76, 0xc0, 0x07, + 0x77, 0xa8, 0x87, 0x76, 0x60, 0x83, 0x35, 0x18, 0x07, 0x79, 0x18, 0x07, 0x36, 0x58, 0x03, 0x72, + 0x48, 0x07, 0x7a, 0x60, 0x83, 0x35, 0x20, 0x87, 0x77, 0xa0, 0x07, 0x78, 0x90, 0x87, 0x77, 0x20, + 0x07, 0x36, 0x58, 0x03, 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x76, 0x60, 0x83, 0x35, 0x30, 0x07, + 0x78, 0x68, 0x83, 0x70, 0x90, 0x87, 0x76, 0xb0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x78, + 0x88, 0x03, 0x3b, 0x30, 0x87, 0x76, 0x60, 0x07, 0x36, 0x58, 0x03, 0x73, 0x80, 0x07, 0x7a, 0x78, + 0x87, 0x74, 0x70, 0x07, 0x7a, 0x60, 0x83, 0x35, 0x30, 0x87, 0x7a, 0x60, 0x07, 0x76, 0x30, 0x07, + 0x78, 0x88, 0x03, 0x3b, 0x60, 0x83, 0x35, 0x50, 0x87, 0x79, 0x18, 0x87, 0x77, 0x70, 0x07, 0x7b, + 0x60, 0x83, 0x35, 0x60, 0x87, 0x79, 0x28, 0x07, 0x36, 0x58, 0x03, 0x77, 0x28, 0x87, 0x77, 0x70, + 0x07, 0x36, 0x58, 0x03, 0x78, 0x08, 0x87, 0x7a, 0xa0, 0x07, 0x74, 0x60, 0x83, 0x35, 0x80, 0x87, + 0x72, 0x90, 0x07, 0x73, 0x68, 0x87, 0x77, 0x70, 0x07, 0x36, 0x58, 0x03, 0x78, 0x90, 0x87, 0x72, + 0x20, 0x07, 0x79, 0x28, 0x87, 0x79, 0x60, 0x83, 0x35, 0x90, 0x87, 0x70, 0x98, 0x07, 0x36, 0x58, + 0x03, 0x79, 0x18, 0x07, 0x78, 0x18, 0x07, 0x36, 0x58, 0x03, 0x79, 0x20, 0x87, 0x76, 0x60, 0x83, + 0x35, 0x98, 0x07, 0x71, 0x60, 0x83, 0x35, 0x98, 0x07, 0x74, 0x08, 0x07, 0x39, 0x60, 0x83, 0x35, + 0x98, 0x07, 0x74, 0x08, 0x87, 0x39, 0x60, 0x83, 0x35, 0x98, 0x07, 0x78, 0x28, 0x87, 0x71, 0x90, + 0x87, 0x72, 0x98, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x18, 0x07, 0x7a, 0x60, 0x83, 0x35, 0x98, 0x87, + 0x79, 0x10, 0x87, 0x79, 0x60, 0x83, 0x35, 0xb0, 0x07, 0x3c, 0x70, 0x83, 0x38, 0x08, 0x07, 0x36, + 0x58, 0x03, 0x7b, 0xc0, 0x03, 0x37, 0x90, 0x83, 0x70, 0x60, 0x83, 0x35, 0xb0, 0x07, 0x3c, 0x70, + 0x83, 0x39, 0x08, 0x07, 0x36, 0x58, 0x03, 0x7b, 0xc0, 0x03, 0x37, 0xa0, 0x83, 0x70, 0x60, 0x83, + 0x35, 0xb0, 0x07, 0x3c, 0x08, 0x07, 0x36, 0x58, 0x03, 0x7d, 0x18, 0x87, 0x76, 0x60, 0x83, 0x35, + 0xd0, 0x87, 0x71, 0xd0, 0x07, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, + 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, + 0xa1, 0x1c, 0x80, 0x0d, 0xaa, 0xc3, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x48, 0x44, 0x38, 0xc0, + 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, 0x43, 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, + 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, + 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, 0x0e, + 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, + 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, + 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, + 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, 0x06, 0xfa, + 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, + 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xd0, + 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, 0x84, 0x03, + 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, + 0x0e, 0xeb, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, + 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, 0x0f, 0xe9, + 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, + 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, 0xe1, 0x00, 0x0f, 0xf0, 0xc0, 0x0e, 0xe5, 0xd0, 0x06, + 0xed, 0x10, 0x07, 0x00, 0x41, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xd0, 0x06, 0xe6, + 0x50, 0x0e, 0xe1, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xc0, 0x1a, 0x84, 0x43, 0x39, + 0xcc, 0x03, 0x1b, 0xac, 0x41, 0x38, 0xb0, 0x03, 0x3d, 0xb8, 0x83, 0x3e, 0x8c, 0x83, 0x3d, 0xb0, + 0xc1, 0x1a, 0x8c, 0xc3, 0x38, 0x90, 0x03, 0x3c, 0xb0, 0xc1, 0x1a, 0x8c, 0xc3, 0x38, 0xa4, 0x03, + 0x39, 0xe0, 0x03, 0x1b, 0xac, 0xc1, 0x38, 0xbc, 0x43, 0x3b, 0xc0, 0x03, 0x3b, 0xe0, 0x83, 0x3b, + 0xd4, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, 0x8c, 0x83, 0x3c, 0x8c, 0x03, 0x1b, 0xac, 0x01, 0x39, 0xa4, + 0x03, 0x3d, 0xb0, 0xc1, 0x1a, 0x90, 0xc3, 0x3b, 0xd0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0x90, 0x03, + 0x1b, 0xac, 0x81, 0x39, 0xb0, 0x43, 0x38, 0x9c, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, 0x98, 0x03, 0x3c, + 0xb4, 0x41, 0x38, 0xc8, 0x43, 0x3b, 0xd8, 0x03, 0x1e, 0xb0, 0xc1, 0x1a, 0x98, 0x03, 0x3c, 0xc4, + 0x81, 0x1d, 0x98, 0x43, 0x3b, 0xb0, 0x03, 0x1b, 0xac, 0x81, 0x39, 0xc0, 0x03, 0x3d, 0xbc, 0x43, + 0x3a, 0xb8, 0x03, 0x3d, 0xb0, 0xc1, 0x1a, 0x98, 0x43, 0x3d, 0xb0, 0x03, 0x3b, 0x98, 0x03, 0x3c, + 0xc4, 0x81, 0x1d, 0xb0, 0xc1, 0x1a, 0xa8, 0xc3, 0x3c, 0x8c, 0xc3, 0x3b, 0xb8, 0x83, 0x3d, 0xb0, + 0xc1, 0x1a, 0xb0, 0xc3, 0x3c, 0x94, 0x03, 0x1b, 0xac, 0x81, 0x3b, 0x94, 0xc3, 0x3b, 0xb8, 0x03, + 0x1b, 0xac, 0x01, 0x3c, 0x84, 0x43, 0x3d, 0xd0, 0x03, 0x3a, 0xb0, 0xc1, 0x1a, 0xc0, 0x43, 0x39, + 0xc8, 0x83, 0x39, 0xb4, 0xc3, 0x3b, 0xb8, 0x03, 0x1b, 0xac, 0x01, 0x3c, 0xc8, 0x43, 0x39, 0x90, + 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0xb0, 0xc1, 0x1a, 0xc8, 0x43, 0x38, 0xcc, 0x03, 0x1b, 0xac, 0x81, + 0x3c, 0x8c, 0x03, 0x3c, 0x8c, 0x03, 0x1b, 0xac, 0x81, 0x3c, 0x90, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, + 0xcc, 0x83, 0x38, 0xb0, 0xc1, 0x1a, 0xcc, 0x03, 0x3a, 0x84, 0x83, 0x1c, 0xb0, 0xc1, 0x1a, 0xcc, + 0x03, 0x3a, 0x84, 0xc3, 0x1c, 0xb0, 0xc1, 0x1a, 0xcc, 0x03, 0x3c, 0x94, 0xc3, 0x38, 0xc8, 0x43, + 0x39, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3a, 0x8c, 0x03, 0x3d, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, + 0x88, 0xc3, 0x3c, 0xb0, 0xc1, 0x1a, 0xd8, 0x03, 0x1e, 0xb8, 0x41, 0x1c, 0x84, 0x03, 0x1b, 0xac, + 0x81, 0x3d, 0xe0, 0x81, 0x1b, 0xc8, 0x41, 0x38, 0xb0, 0xc1, 0x1a, 0xd8, 0x03, 0x1e, 0xb8, 0xc1, + 0x1c, 0x84, 0x03, 0x1b, 0xac, 0x81, 0x3d, 0xe0, 0x81, 0x1b, 0xd0, 0x41, 0x38, 0xb0, 0xc1, 0x1a, + 0xd8, 0x03, 0x1e, 0x84, 0x03, 0x1b, 0xac, 0x81, 0x3e, 0x8c, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, 0xe8, + 0xc3, 0x38, 0xe8, 0x03, 0x40, 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39, 0xb4, 0x81, + 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, + 0x0e, 0xc0, 0x06, 0xa2, 0x09, 0x00, 0x52, 0xd8, 0x40, 0x38, 0x02, 0x40, 0x0a, 0x1b, 0x88, 0x67, + 0x00, 0x48, 0x61, 0x03, 0x01, 0x11, 0x00, 0x29, 0x6c, 0x40, 0xa2, 0x01, 0x58, 0x00, 0x52, 0x00, + 0xaa, 0x0d, 0x84, 0x54, 0x00, 0xa4, 0xb0, 0x01, 0x99, 0x08, 0x60, 0x01, 0x48, 0x01, 0xa0, 0x83, + 0x0d, 0x07, 0x35, 0x00, 0xa4, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0x38, 0x2a, 0x02, 0x20, 0x85, 0xe0, + 0x16, 0x4e, 0x68, 0x03, 0x62, 0x15, 0xc0, 0x02, 0x90, 0x02, 0x40, 0x07, 0x1b, 0x8e, 0xab, 0x00, + 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x80, 0x60, 0x04, 0xb0, 0x00, 0xa4, 0x00, 0x54, 0x1b, 0x90, + 0xac, 0x00, 0x16, 0x80, 0x14, 0x80, 0x6a, 0x03, 0xa2, 0x19, 0xc0, 0x02, 0x90, 0x02, 0x40, 0x07, + 0x1b, 0x8e, 0xcd, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x70, 0x70, 0x07, 0x40, 0x0a, 0xc1, + 0x2d, 0x9c, 0xd0, 0x86, 0xa3, 0x43, 0x00, 0x52, 0x08, 0x6e, 0xe1, 0x84, 0x36, 0x20, 0xde, 0x01, + 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0xe1, 0xf8, 0x12, 0x80, 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, + 0x07, 0x18, 0x28, 0x00, 0x29, 0x04, 0xb7, 0x70, 0x42, 0x1b, 0x8e, 0x30, 0x58, 0x00, 0x52, 0x08, + 0x6e, 0xe1, 0x84, 0x36, 0x1c, 0x62, 0xc0, 0x00, 0xa4, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0xc8, 0x9d, + 0x31, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, + 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x26, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, + 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, + 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, + 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, + 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, + 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, + 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, + 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, + 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, + 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, + 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, + 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, + 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, + 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, + 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, + 0x1e, 0x80, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x88, 0x03, 0x80, 0xa0, + 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, + 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, 0x0d, 0xc2, 0xa1, 0x1c, 0xe6, 0x81, 0x0d, 0xd6, 0x20, + 0x1c, 0xd8, 0x81, 0x1e, 0xdc, 0x41, 0x1f, 0xc6, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xc6, 0x61, 0x1c, + 0xc8, 0x01, 0x1e, 0xd8, 0x60, 0x0d, 0xc6, 0x61, 0x1c, 0xd2, 0x81, 0x1c, 0xf0, 0x81, 0x0d, 0xd6, + 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x81, 0x1d, 0xf0, 0xc1, 0x1d, 0xea, 0xa1, 0x1d, 0xd8, 0x60, + 0x0d, 0xc6, 0x41, 0x1e, 0xc6, 0x81, 0x0d, 0xd6, 0x80, 0x1c, 0xd2, 0x81, 0x1e, 0xd8, 0x60, 0x0d, + 0xc8, 0xe1, 0x1d, 0xe8, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xc8, 0x81, 0x0d, 0xd6, 0xc0, 0x1c, 0xd8, + 0x21, 0x1c, 0xce, 0xa1, 0x1d, 0xd8, 0x60, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x20, 0x1c, 0xe4, 0xa1, + 0x1d, 0xec, 0x01, 0x0f, 0xd8, 0x60, 0x0d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0xcc, 0xa1, 0x1d, + 0xd8, 0x81, 0x0d, 0xd6, 0xc0, 0x1c, 0xe0, 0x81, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xd8, + 0x60, 0x0d, 0xcc, 0xa1, 0x1e, 0xd8, 0x81, 0x1d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0xd8, 0x60, + 0x0d, 0xd4, 0x61, 0x1e, 0xc6, 0xe1, 0x1d, 0xdc, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xd8, 0x61, 0x1e, + 0xca, 0x81, 0x0d, 0xd6, 0xc0, 0x1d, 0xca, 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0x00, 0x1e, 0xc2, + 0xa1, 0x1e, 0xe8, 0x01, 0x1d, 0xd8, 0x60, 0x0d, 0xe0, 0xa1, 0x1c, 0xe4, 0xc1, 0x1c, 0xda, 0xe1, + 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0x00, 0x1e, 0xe4, 0xa1, 0x1c, 0xc8, 0x41, 0x1e, 0xca, 0x61, 0x1e, + 0xd8, 0x60, 0x0d, 0xe4, 0x21, 0x1c, 0xe6, 0x81, 0x0d, 0xd6, 0x40, 0x1e, 0xc6, 0x01, 0x1e, 0xc6, + 0x81, 0x0d, 0xd6, 0x40, 0x1e, 0xc8, 0xa1, 0x1d, 0xd8, 0x60, 0x0d, 0xe6, 0x41, 0x1c, 0xd8, 0x60, + 0x0d, 0xe6, 0x01, 0x1d, 0xc2, 0x41, 0x0e, 0xd8, 0x60, 0x0d, 0xe6, 0x01, 0x1d, 0xc2, 0x61, 0x0e, + 0xd8, 0x60, 0x0d, 0xe6, 0x01, 0x1e, 0xca, 0x61, 0x1c, 0xe4, 0xa1, 0x1c, 0xe6, 0x81, 0x1e, 0xe4, + 0x21, 0x1d, 0xc6, 0x81, 0x1e, 0xd8, 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xc4, 0x61, 0x1e, 0xd8, 0x60, + 0x0d, 0xec, 0x01, 0x0f, 0xdc, 0x20, 0x0e, 0xc2, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0xc0, 0x0d, + 0xe4, 0x20, 0x1c, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xdc, 0x60, 0x0e, 0xc2, 0x81, 0x0d, 0xd6, + 0xc0, 0x1e, 0xf0, 0xc0, 0x0d, 0xe8, 0x20, 0x1c, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xc2, 0x81, + 0x0d, 0xd6, 0x40, 0x1f, 0xc6, 0xa1, 0x1d, 0xd8, 0x60, 0x0d, 0xf4, 0x61, 0x1c, 0xf4, 0x01, 0x20, + 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, + 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x43, 0xee, 0x90, + 0xc1, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x00, 0x98, 0x02, 0xe0, 0x07, 0x00, 0x1c, 0x00, 0x7f, + 0x00, 0x48, 0x40, 0x1f, 0x04, 0xb6, 0x30, 0x06, 0x44, 0x38, 0xc0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, + 0xe0, 0x43, 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, + 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, + 0xd0, 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, + 0x81, 0x3b, 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, + 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, + 0x0f, 0xe9, 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, + 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, + 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, + 0xc0, 0x43, 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, + 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, 0xeb, 0xd0, 0x06, 0xf0, + 0x20, 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, + 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, + 0x01, 0x40, 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, 0xb4, 0xc1, 0x38, 0xc0, 0x43, + 0x3d, 0x00, 0xe1, 0x00, 0x0f, 0xf0, 0xc0, 0x0e, 0xe5, 0xd0, 0x06, 0xed, 0x10, 0x07, 0x00, 0x41, + 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xd0, 0x06, 0xe6, 0x50, 0x0e, 0xe1, 0x40, 0x0f, + 0xf5, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xc0, 0x1a, 0x84, 0x43, 0x39, 0xcc, 0x03, 0x1b, 0xac, 0x41, + 0x38, 0xb0, 0x03, 0x3d, 0xb8, 0x83, 0x3e, 0x8c, 0x83, 0x3d, 0xb0, 0xc1, 0x1a, 0x8c, 0xc3, 0x38, + 0x90, 0x03, 0x3c, 0xb0, 0xc1, 0x1a, 0x8c, 0xc3, 0x38, 0xa4, 0x03, 0x39, 0xe0, 0x03, 0x1b, 0xac, + 0xc1, 0x38, 0xbc, 0x43, 0x3b, 0xc0, 0x03, 0x3b, 0xe0, 0x83, 0x3b, 0xd4, 0x43, 0x3b, 0xb0, 0xc1, + 0x1a, 0x8c, 0x83, 0x3c, 0x8c, 0x03, 0x1b, 0xac, 0x01, 0x39, 0xa4, 0x03, 0x3d, 0xb0, 0xc1, 0x1a, + 0x90, 0xc3, 0x3b, 0xd0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0x90, 0x03, 0x1b, 0xac, 0x81, 0x39, 0xb0, + 0x43, 0x38, 0x9c, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x38, 0xc8, 0x43, + 0x3b, 0xd8, 0x03, 0x1e, 0xb0, 0xc1, 0x1a, 0x98, 0x03, 0x3c, 0xc4, 0x81, 0x1d, 0x98, 0x43, 0x3b, + 0xb0, 0x03, 0x1b, 0xac, 0x81, 0x39, 0xc0, 0x03, 0x3d, 0xbc, 0x43, 0x3a, 0xb8, 0x03, 0x3d, 0xb0, + 0xc1, 0x1a, 0x98, 0x43, 0x3d, 0xb0, 0x03, 0x3b, 0x98, 0x03, 0x3c, 0xc4, 0x81, 0x1d, 0xb0, 0xc1, + 0x1a, 0xa8, 0xc3, 0x3c, 0x8c, 0xc3, 0x3b, 0xb8, 0x83, 0x3d, 0xb0, 0xc1, 0x1a, 0xb0, 0xc3, 0x3c, + 0x94, 0x03, 0x1b, 0xac, 0x81, 0x3b, 0x94, 0xc3, 0x3b, 0xb8, 0x03, 0x1b, 0xac, 0x01, 0x3c, 0x84, + 0x43, 0x3d, 0xd0, 0x03, 0x3a, 0xb0, 0xc1, 0x1a, 0xc0, 0x43, 0x39, 0xc8, 0x83, 0x39, 0xb4, 0xc3, + 0x3b, 0xb8, 0x03, 0x1b, 0xac, 0x01, 0x3c, 0xc8, 0x43, 0x39, 0x90, 0x83, 0x3c, 0x94, 0xc3, 0x3c, + 0xb0, 0xc1, 0x1a, 0xc8, 0x43, 0x38, 0xcc, 0x03, 0x1b, 0xac, 0x81, 0x3c, 0x8c, 0x03, 0x3c, 0x8c, + 0x03, 0x1b, 0xac, 0x81, 0x3c, 0x90, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, 0xcc, 0x83, 0x38, 0xb0, 0xc1, + 0x1a, 0xcc, 0x03, 0x3a, 0x84, 0x83, 0x1c, 0xb0, 0xc1, 0x1a, 0xcc, 0x03, 0x3a, 0x84, 0xc3, 0x1c, + 0xb0, 0xc1, 0x1a, 0xcc, 0x03, 0x3c, 0x94, 0xc3, 0x38, 0xc8, 0x43, 0x39, 0xcc, 0x03, 0x3d, 0xc8, + 0x43, 0x3a, 0x8c, 0x03, 0x3d, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, 0x88, 0xc3, 0x3c, 0xb0, 0xc1, + 0x1a, 0xd8, 0x03, 0x1e, 0xb8, 0x41, 0x1c, 0x84, 0x03, 0x1b, 0xac, 0x81, 0x3d, 0xe0, 0x81, 0x1b, + 0xc8, 0x41, 0x38, 0xb0, 0xc1, 0x1a, 0xd8, 0x03, 0x1e, 0xb8, 0xc1, 0x1c, 0x84, 0x03, 0x1b, 0xac, + 0x81, 0x3d, 0xe0, 0x81, 0x1b, 0xd0, 0x41, 0x38, 0xb0, 0xc1, 0x1a, 0xd8, 0x03, 0x1e, 0x84, 0x03, + 0x1b, 0xac, 0x81, 0x3e, 0x8c, 0x43, 0x3b, 0xb0, 0xc1, 0x1a, 0xe8, 0xc3, 0x38, 0xe8, 0x03, 0x40, + 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, + 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0x06, 0xa3, 0x0c, + 0x06, 0x80, 0x14, 0x00, 0x31, 0xd8, 0x70, 0x3b, 0x66, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, + 0x00, 0xa6, 0x00, 0xf8, 0x01, 0x00, 0x07, 0x80, 0x04, 0xf4, 0x41, 0x60, 0x0b, 0x03, 0x11, 0x0e, + 0xf0, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf8, 0xd0, 0x06, 0xe6, 0x50, 0x0f, 0xee, 0x30, 0x0e, 0x6d, + 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, + 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, 0x3a, 0xb8, 0x83, 0x39, 0xcc, 0x43, 0x1b, 0x98, + 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, + 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0xe0, 0x0e, 0xe1, 0xe0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, + 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, + 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xcc, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0x94, 0x03, 0x39, 0xb4, 0x81, + 0x3e, 0x94, 0x83, 0x3c, 0xbc, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, + 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, + 0xf4, 0x20, 0x0f, 0xe1, 0x00, 0x0f, 0xf0, 0x90, 0x0e, 0xee, 0x70, 0x0e, 0x6d, 0xd0, 0x0e, 0xe1, + 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0xc4, 0x3c, 0xd0, 0x43, 0x38, + 0x8c, 0xc3, 0x3a, 0xb4, 0x01, 0x3c, 0xc8, 0xc3, 0x3b, 0xd0, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, + 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xcc, 0x43, + 0x3a, 0xe8, 0x43, 0x39, 0x00, 0x78, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xe5, 0x40, + 0x0f, 0x6d, 0x30, 0x0e, 0xf0, 0x50, 0x0f, 0x40, 0x38, 0xc0, 0x03, 0x3c, 0xb0, 0x43, 0x39, 0xb4, + 0x41, 0x3b, 0xc4, 0x01, 0x40, 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, 0xb4, 0x81, + 0x39, 0x94, 0x43, 0x38, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xcc, 0x03, 0xb0, 0x06, 0xe1, 0x50, + 0x0e, 0xf3, 0xc0, 0x06, 0x6b, 0x10, 0x0e, 0xec, 0x40, 0x0f, 0xee, 0xa0, 0x0f, 0xe3, 0x60, 0x0f, + 0x6c, 0xb0, 0x06, 0xe3, 0x30, 0x0e, 0xe4, 0x00, 0x0f, 0x6c, 0xb0, 0x06, 0xe3, 0x30, 0x0e, 0xe9, + 0x40, 0x0e, 0xf8, 0xc0, 0x06, 0x6b, 0x30, 0x0e, 0xef, 0xd0, 0x0e, 0xf0, 0xc0, 0x0e, 0xf8, 0xe0, + 0x0e, 0xf5, 0xd0, 0x0e, 0x6c, 0xb0, 0x06, 0xe3, 0x20, 0x0f, 0xe3, 0xc0, 0x06, 0x6b, 0x40, 0x0e, + 0xe9, 0x40, 0x0f, 0x6c, 0xb0, 0x06, 0xe4, 0xf0, 0x0e, 0xf4, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xe4, + 0xc0, 0x06, 0x6b, 0x60, 0x0e, 0xec, 0x10, 0x0e, 0xe7, 0xd0, 0x0e, 0x6c, 0xb0, 0x06, 0xe6, 0x00, + 0x0f, 0x6d, 0x10, 0x0e, 0xf2, 0xd0, 0x0e, 0xf6, 0x80, 0x07, 0x6c, 0xb0, 0x06, 0xe6, 0x00, 0x0f, + 0x71, 0x60, 0x07, 0xe6, 0xd0, 0x0e, 0xec, 0xc0, 0x06, 0x6b, 0x60, 0x0e, 0xf0, 0x40, 0x0f, 0xef, + 0x90, 0x0e, 0xee, 0x40, 0x0f, 0x6c, 0xb0, 0x06, 0xe6, 0x50, 0x0f, 0xec, 0xc0, 0x0e, 0xe6, 0x00, + 0x0f, 0x71, 0x60, 0x07, 0x6c, 0xb0, 0x06, 0xea, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xee, 0x60, 0x0f, + 0x6c, 0xb0, 0x06, 0xec, 0x30, 0x0f, 0xe5, 0xc0, 0x06, 0x6b, 0xe0, 0x0e, 0xe5, 0xf0, 0x0e, 0xee, + 0xc0, 0x06, 0x6b, 0x00, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x6c, 0xb0, 0x06, 0xf0, 0x50, + 0x0e, 0xf2, 0x60, 0x0e, 0xed, 0xf0, 0x0e, 0xee, 0xc0, 0x06, 0x6b, 0x00, 0x0f, 0xf2, 0x50, 0x0e, + 0xe4, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0x6c, 0xb0, 0x06, 0xf2, 0x10, 0x0e, 0xf3, 0xc0, 0x06, 0x6b, + 0x20, 0x0f, 0xe3, 0x00, 0x0f, 0xe3, 0xc0, 0x06, 0x6b, 0x20, 0x0f, 0xe4, 0xd0, 0x0e, 0x6c, 0xb0, + 0x06, 0xf3, 0x20, 0x0e, 0x6c, 0xb0, 0x06, 0xf3, 0x80, 0x0e, 0xe1, 0x20, 0x07, 0x6c, 0xb0, 0x06, + 0xf3, 0x80, 0x0e, 0xe1, 0x30, 0x07, 0x6c, 0xb0, 0x06, 0xf3, 0x00, 0x0f, 0xe5, 0x30, 0x0e, 0xf2, + 0x50, 0x0e, 0xf3, 0x40, 0x0f, 0xf2, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0x6c, 0xb0, 0x06, 0xf3, 0x30, + 0x0f, 0xe2, 0x30, 0x0f, 0x6c, 0xb0, 0x06, 0xf6, 0x80, 0x07, 0x6e, 0x10, 0x07, 0xe1, 0xc0, 0x06, + 0x6b, 0x60, 0x0f, 0x78, 0xe0, 0x06, 0x72, 0x10, 0x0e, 0x6c, 0xb0, 0x06, 0xf6, 0x80, 0x07, 0x6e, + 0x30, 0x07, 0xe1, 0xc0, 0x06, 0x6b, 0x60, 0x0f, 0x78, 0xe0, 0x06, 0x74, 0x10, 0x0e, 0x6c, 0xb0, + 0x06, 0xf6, 0x80, 0x07, 0xe1, 0xc0, 0x06, 0x6b, 0xa0, 0x0f, 0xe3, 0xd0, 0x0e, 0x6c, 0xb0, 0x06, + 0xfa, 0x30, 0x0e, 0xfa, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, + 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, + 0x94, 0x03, 0xb0, 0xc1, 0x38, 0x83, 0x00, 0x58, 0x00, 0x52, 0xd8, 0x70, 0xa0, 0x81, 0x00, 0x90, + 0x42, 0x70, 0x0b, 0x27, 0xb4, 0x21, 0x4a, 0x83, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x53, 0x00, + 0xfc, 0x00, 0xf8, 0x03, 0x40, 0x02, 0xea, 0x00, 0xe8, 0x83, 0xc0, 0x16, 0x80, 0x0d, 0x84, 0x1a, + 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x48, 0x1b, 0x88, 0x35, 0x10, 0x80, 0x33, 0xd8, 0x60, 0xb0, + 0x81, 0x00, 0x90, 0x02, 0x70, 0x06, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, 0x1c, 0x13, 0x86, 0x40, 0x40, 0x26, 0x0c, 0x89, + 0x22, 0x4c, 0x20, 0x16, 0x61, 0x20, 0x26, 0x14, 0x4c, 0xe3, 0x3c, 0xd0, 0x04, 0x62, 0x11, 0x86, + 0x68, 0x82, 0xc1, 0x34, 0xce, 0x03, 0x49, 0x13, 0x8a, 0x45, 0x70, 0xa2, 0x69, 0x42, 0xc1, 0x34, + 0x0e, 0x55, 0x4d, 0x30, 0x16, 0xc1, 0x89, 0x2a, 0x6b, 0x82, 0xc1, 0x34, 0x0e, 0x55, 0x5d, 0x13, + 0x8e, 0x45, 0x70, 0x22, 0x2c, 0xd3, 0x26, 0x24, 0x4c, 0xe3, 0x50, 0xd5, 0xb5, 0x71, 0xdd, 0x04, + 0x64, 0x11, 0x9c, 0x08, 0xcb, 0x36, 0x6f, 0x82, 0xc2, 0x34, 0x0e, 0x55, 0x5d, 0x1b, 0xd7, 0x7d, + 0x13, 0x0e, 0xa6, 0x71, 0xa8, 0xea, 0xda, 0x26, 0x30, 0x4c, 0xe3, 0x50, 0xd5, 0xb5, 0x71, 0xdd, + 0x07, 0x06, 0x61, 0x30, 0xa1, 0x61, 0x1a, 0x87, 0xaa, 0xae, 0x8d, 0xeb, 0x3e, 0x30, 0x08, 0x03, + 0x31, 0x98, 0x40, 0x30, 0x8d, 0xf3, 0x4c, 0x30, 0x16, 0xc1, 0x89, 0x20, 0x6b, 0x42, 0x31, 0x06, + 0x82, 0xf3, 0x4c, 0x13, 0x88, 0x31, 0x10, 0x1c, 0x62, 0x82, 0xb1, 0x08, 0x03, 0x05, 0x59, 0x13, + 0x06, 0xa6, 0x71, 0x26, 0x14, 0x8b, 0x30, 0x3c, 0xd3, 0x04, 0x82, 0x0c, 0x04, 0x27, 0x9a, 0x40, + 0x90, 0x81, 0xe0, 0x3c, 0x13, 0x08, 0x32, 0x10, 0x9c, 0x32, 0x98, 0x30, 0x98, 0xc1, 0x19, 0x38, + 0x13, 0x08, 0x33, 0x50, 0xce, 0x00, 0x0d, 0x26, 0x10, 0x66, 0x70, 0x06, 0xce, 0x33, 0xa1, 0x30, + 0x03, 0xe5, 0x0c, 0xd0, 0x80, 0x9a, 0x10, 0xa4, 0xc1, 0x84, 0x42, 0x0d, 0x1a, 0xe7, 0x81, 0x26, + 0x18, 0x6a, 0xd0, 0x38, 0x0f, 0x24, 0x4d, 0x28, 0xd4, 0xa0, 0x71, 0xa8, 0x6a, 0x82, 0xa1, 0x06, + 0x8d, 0x43, 0x55, 0xd7, 0x84, 0x44, 0x0d, 0x1a, 0x87, 0xaa, 0xae, 0x8d, 0xeb, 0x26, 0x28, 0x6a, + 0xd0, 0x38, 0x54, 0x75, 0x6d, 0x5c, 0xf7, 0x4d, 0x38, 0xd4, 0xa0, 0x71, 0xa8, 0xea, 0xda, 0x26, + 0x30, 0x6a, 0xd0, 0x38, 0x54, 0x75, 0x6d, 0x5c, 0xf7, 0x81, 0x41, 0x18, 0x4c, 0x68, 0xd4, 0xa0, + 0x71, 0xa8, 0xea, 0xda, 0xb8, 0xee, 0x03, 0x83, 0x30, 0x10, 0x83, 0x09, 0x84, 0x1a, 0x34, 0xce, + 0x33, 0x41, 0x50, 0x83, 0x35, 0x98, 0x30, 0xa8, 0x41, 0xc3, 0x06, 0x00, 0x13, 0xb4, 0x70, 0x90, + 0x87, 0x76, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x7a, 0x70, 0x87, 0x75, 0x70, 0x87, 0x77, 0xb8, 0x07, + 0x77, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0xa8, 0x03, 0x37, + 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0x66, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0xf0, 0x0e, 0x6d, + 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x72, 0x80, + 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x60, 0x07, + 0x74, 0xd0, 0x06, 0xb3, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0a, 0xee, 0x30, 0x07, 0x72, + 0xa0, 0x11, 0xc2, 0xe4, 0x50, 0x1f, 0x5e, 0xd5, 0x79, 0x59, 0x3e, 0x7f, 0xb5, 0xd3, 0xeb, 0xf2, + 0x6b, 0xc8, 0x4e, 0xbf, 0xdd, 0x50, 0xf9, 0x5b, 0x5d, 0x1e, 0xd3, 0xe7, 0x2f, 0x66, 0x3d, 0x3d, + 0x0f, 0x0f, 0xdf, 0x6d, 0x78, 0x9d, 0x5e, 0x7e, 0xcd, 0xe5, 0xe3, 0x97, 0x38, 0x3c, 0x5e, 0x97, + 0xdd, 0xe4, 0xf9, 0xcb, 0x1c, 0x66, 0xb3, 0xc5, 0xe1, 0xf1, 0xfa, 0x65, 0x0e, 0xb3, 0xd9, 0xe2, + 0xf0, 0x78, 0xfd, 0x15, 0xd7, 0xd3, 0x6c, 0x7a, 0xda, 0xfd, 0x32, 0x87, 0xd9, 0x6c, 0x71, 0x78, + 0xbc, 0xfe, 0x92, 0xcb, 0xf6, 0xf4, 0xb8, 0xfc, 0x0d, 0xc3, 0xd3, 0xdf, 0xbb, 0x3c, 0x0c, 0x87, + 0x97, 0xe5, 0x73, 0x17, 0x39, 0x2c, 0xbf, 0xa7, 0xdd, 0xae, 0xb0, 0xbc, 0x6d, 0xa3, 0xb9, 0xd8, + 0xec, 0x21, 0x15, 0x90, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0xca, 0x2c, 0x02, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0x6f, 0x40, 0x11, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x1a, 0x85, 0x4c, 0x00, 0x80, 0x24, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x2f, 0x64, 0x02, 0x00, 0x24, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xea, 0x21, 0x13, + 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, + 0x12, 0x99, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, + 0x43, 0xaa, 0xb3, 0xc8, 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0x0c, 0x18, 0x52, 0x81, 0x06, 0x56, 0x00, 0x40, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x37, 0xb0, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xf0, 0x81, 0x15, 0x00, 0x90, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x42, 0x11, 0x4e, 0x00, 0x80, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x99, 0x70, + 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, + 0x40, 0x85, 0x13, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, + 0x60, 0x48, 0xc5, 0x2b, 0x9c, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0x2a, 0x7c, 0xe1, 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xd1, 0x0c, 0x27, 0x00, 0x40, 0x12, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x6e, 0xb4, 0x03, 0x00, 0x12, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xaa, 0xa3, 0x1d, 0x00, + 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x22, 0x1f, + 0xed, 0x00, 0x80, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, + 0x95, 0xff, 0x58, 0x05, 0x00, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x06, 0x0c, 0xa9, 0x68, 0xc8, 0x2a, 0x00, 0x20, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0xa5, 0x46, 0x56, 0x01, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x50, 0xc2, 0x04, 0x00, 0x48, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe1, 0x52, 0xa7, 0x00, 0x01, 0x60, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0xaa, 0x9e, 0x32, 0x01, + 0x00, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x2e, + 0xe5, 0x29, 0x40, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, + 0xa4, 0x62, 0x2b, 0x4d, 0x00, 0x80, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0x95, 0x69, 0x7d, 0x0c, 0x10, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0xca, 0x6b, 0x13, 0x00, 0x20, 0x39, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x05, 0x62, 0x60, 0xe0, 0x00, 0x01, 0x60, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xcc, 0x34, 0x01, 0x00, + 0x92, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x7a, 0xf6, + 0x3d, 0x40, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, + 0xca, 0xb5, 0x4c, 0x00, 0x80, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, + 0x80, 0x21, 0x95, 0xbc, 0x79, 0x0f, 0x10, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x06, 0x0c, 0xa9, 0x60, 0x0e, 0x13, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x85, 0x76, 0x1d, 0x04, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x43, 0xaa, 0xd2, 0xcb, 0x04, 0x00, 0x48, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf9, 0x9e, 0x07, 0x01, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0xff, + 0x34, 0x01, 0x00, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0x36, 0x18, 0x7c, 0x11, 0x10, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x06, 0x0c, 0xa9, 0xea, 0x30, 0xd8, 0x04, 0x00, 0x48, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc1, 0x62, 0x00, 0x06, 0x12, 0x10, 0x00, 0x08, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0xe0, 0x31, 0xd0, 0x04, 0x00, + 0x48, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xa9, 0x64, + 0xf0, 0x4d, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, + 0xa4, 0x4a, 0xcb, 0x20, 0x13, 0x00, 0x20, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0x25, 0x9a, 0x81, 0x37, 0x01, 0x01, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x3c, 0x03, 0xaa, 0x00, 0x80, 0x64, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x7d, 0x06, 0x54, 0x01, 0x00, + 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x14, 0x0d, + 0x3e, 0x0a, 0x00, 0x92, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0x67, 0x1a, 0x90, 0x41, 0x05, 0x04, 0x80, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x01, 0x43, 0xaa, 0x55, 0x0d, 0xca, 0xc0, 0x02, 0x80, 0x64, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xbc, 0x06, 0x6a, 0x70, 0x01, 0x01, 0xc0, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x4a, 0x67, 0x03, 0x32, + 0xc0, 0x00, 0x20, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0xe5, 0xb7, 0x41, 0x1a, 0x64, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x30, 0xa4, 0x3a, 0xdf, 0x40, 0x0d, 0x34, 0x00, 0x48, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc5, 0x70, 0xf0, 0x06, 0x1b, 0x10, 0x00, 0x10, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0x40, 0x39, 0xf8, 0x28, + 0x00, 0x48, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xfd, + 0x72, 0x40, 0x06, 0x17, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x06, 0x0c, 0xa9, 0x46, 0x3a, 0x28, 0x03, 0x0b, 0x00, 0x92, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x68, 0x1d, 0xa8, 0x01, 0x07, 0x04, 0x40, 0x04, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x43, 0x2a, 0xd9, 0x0e, 0xc8, 0x00, 0x03, + 0x80, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x7d, + 0x07, 0x69, 0xd0, 0x01, 0x01, 0x20, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, + 0xc0, 0x90, 0xea, 0xc7, 0x03, 0x35, 0xd0, 0x00, 0x20, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x95, 0xea, 0xc1, 0x1b, 0x78, 0x40, 0x00, 0x4c, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0xc2, 0xf7, 0xa0, 0xa3, 0x00, 0x20, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x55, 0xf3, 0x81, + 0x18, 0x7c, 0x40, 0x00, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, + 0xa4, 0xba, 0xfb, 0xa0, 0xa3, 0x00, 0x20, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0x45, 0xfb, 0x81, 0x18, 0x80, 0x01, 0x10, 0x00, 0x06, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0xec, 0x3f, 0x18, 0x83, 0x30, 0x00, 0x80, + 0xa4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x0e, 0x0a, + 0x68, 0x00, 0x06, 0x40, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x30, 0xa4, 0x0a, 0x45, 0x61, 0x0c, 0xc2, 0x00, 0x00, 0x92, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xe4, 0x28, 0xa0, 0x81, 0x18, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x25, 0x85, 0x31, 0x18, + 0x03, 0x00, 0x48, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0xbd, 0xa5, 0x30, 0x06, 0x63, 0x00, 0x00, 0x89, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0x2a, 0xd9, 0x14, 0x3a, 0x32, 0x00, 0x80, 0xe4, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0x7b, 0x0a, 0x1d, 0x19, 0x00, 0x40, 0x72, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x45, 0x05, 0x30, + 0x28, 0x03, 0x00, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, + 0x52, 0xb1, 0xa9, 0xe0, 0x15, 0x40, 0x00, 0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x30, 0xa4, 0x52, 0x55, 0x81, 0x2b, 0x03, 0x00, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x99, 0xab, 0xa0, 0x15, 0x40, 0x00, 0x64, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x02, 0x59, 0x21, 0x33, 0x03, + 0x00, 0x48, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe5, + 0xac, 0x50, 0x99, 0x01, 0x00, 0x24, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x06, 0x0c, 0xa9, 0xdc, 0x56, 0xf0, 0xc8, 0x00, 0x00, 0x92, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xac, 0x2b, 0x70, 0x64, 0x00, 0x00, 0xc9, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xf4, 0x15, 0xc8, 0x80, 0x0c, + 0x00, 0x20, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xc5, + 0xc2, 0x82, 0x18, 0x90, 0x01, 0x00, 0x24, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0xdc, 0x58, 0x40, 0x83, 0x33, 0x00, 0x80, 0x84, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x2d, 0x0b, 0x60, 0x70, 0x06, 0x00, 0x90, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xb2, 0x67, 0x01, + 0x0c, 0xd2, 0x00, 0x00, 0x92, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0x36, 0x2d, 0x64, 0x6a, 0x00, 0x00, 0x89, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xb7, 0x16, 0x34, 0x35, 0x00, 0x80, 0xc4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x6a, 0x0b, 0xda, 0x1a, 0x00, 0x40, + 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x6a, 0xbc, 0x85, + 0x6d, 0x0d, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0xe5, 0xdf, 0xc2, 0xc6, 0x06, 0x00, 0x90, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x19, 0x30, 0xa4, 0xca, 0x71, 0x21, 0x0c, 0xda, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x9e, 0x0b, 0x62, 0xd0, 0x06, + 0x00, 0x90, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, + 0x78, 0x5d, 0x10, 0x03, 0x37, 0x00, 0x80, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xef, 0xc2, 0x18, 0xb8, 0x01, 0x00, 0x24, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xb0, 0x17, 0xc6, 0xe0, 0x0d, + 0x00, 0x20, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0x91, 0xbe, 0xa0, 0xa9, 0x01, 0x00, 0x24, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0x7c, 0x5f, 0xd8, 0xd4, 0x00, 0x00, 0x12, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xf9, 0x2f, 0x6c, 0x6b, 0x00, 0x00, 0x89, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x1a, 0x1c, 0xb8, 0x35, + 0x00, 0x80, 0xc4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, + 0x1c, 0x0e, 0x1c, 0x1b, 0x00, 0x40, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x64, 0xc0, 0x90, 0x8a, 0x15, 0x07, 0x4d, 0x0d, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x65, 0x8e, 0xc3, 0xa6, 0x06, 0x00, 0x90, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x0a, 0xc9, 0x61, 0x5b, 0x03, + 0x00, 0x48, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf1, + 0xe4, 0xc0, 0xad, 0x01, 0x00, 0x24, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x06, 0x0c, 0xa9, 0xf0, 0x72, 0xe0, 0xd8, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xb4, 0x39, 0x68, 0x6a, 0x00, 0x00, 0x89, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xf7, 0x1c, 0x36, 0x35, 0x00, + 0x80, 0xc4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x8a, + 0x0e, 0xdb, 0x1a, 0x00, 0x40, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0x8a, 0x4c, 0x07, 0x6e, 0x0d, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x05, 0xaa, 0x43, 0xa6, 0x06, 0x00, 0x90, 0x78, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xca, 0xd5, 0x41, 0x53, 0x03, 0x00, + 0x48, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xcd, 0xeb, + 0xa0, 0xad, 0x01, 0x00, 0x24, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, + 0x0c, 0xa9, 0x5a, 0x76, 0xd8, 0xd6, 0x00, 0x00, 0x12, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x68, 0x3b, 0x68, 0x6a, 0x00, 0x00, 0x89, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xd1, 0x1d, 0x36, 0x35, 0x00, 0x80, + 0xc4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0xef, 0x0e, + 0xdb, 0x1a, 0x00, 0x40, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, + 0x90, 0x0a, 0x7f, 0x07, 0x6e, 0x0d, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0x45, 0xc3, 0x83, 0xa6, 0x06, 0x00, 0x90, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x72, 0xe3, 0x61, 0x53, 0x03, 0x00, 0x48, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xa5, 0xf2, 0xb0, + 0xad, 0x01, 0x00, 0x24, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, + 0xa9, 0xc8, 0x79, 0xe0, 0xd6, 0x00, 0x00, 0x12, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x20, 0x03, 0x86, 0x54, 0x20, 0x3d, 0x70, 0x6c, 0x00, 0x00, 0xc9, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x9e, 0x1e, 0x34, 0x35, 0x00, 0x80, 0xc4, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x5d, 0x0f, 0x9b, + 0x1a, 0x00, 0x40, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, + 0x2a, 0xb6, 0x87, 0x6d, 0x0d, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0xc5, 0xde, 0x03, 0xb7, 0x06, 0x00, 0x90, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x42, 0xf1, 0x81, 0x63, 0x03, 0x00, 0x48, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x91, 0xf9, 0xd0, 0xc0, + 0x01, 0x10, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x43, + 0xaa, 0x38, 0x1f, 0x1a, 0x39, 0x00, 0x02, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xe7, 0x43, 0x47, 0x07, 0x40, 0x00, 0x88, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0x76, 0x7d, 0x78, 0xec, 0x00, 0x08, + 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xba, + 0x0f, 0x0f, 0x1e, 0x00, 0x01, 0x20, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x20, 0xb1, 0x41, 0xa0, 0x68, 0xbd, 0x05, 0x00, 0x40, 0x16, 0x08, 0x0d, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x20, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x4a, + 0x94, 0x40, 0x21, 0x14, 0x44, 0x11, 0xd0, 0x60, 0x04, 0xa0, 0x10, 0x0a, 0xa2, 0x40, 0x0a, 0xa6, + 0x30, 0x0a, 0xa8, 0x50, 0x0a, 0xa7, 0xc0, 0x0a, 0x31, 0xa0, 0xc4, 0x8a, 0xac, 0xd0, 0x0a, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, + 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, + 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, + 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, + 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, + 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, + 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, + 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, + 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, + 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, + 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, + 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, + 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, + 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, + 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, + 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, + 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, + 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, + 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, + 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, + 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, + 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, + 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, + 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, + 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, + 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, + 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, + 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, + 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, + 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, + 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, + 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, + 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xcb, 0xe7, 0x0e, 0xef, 0x30, 0x0f, 0xe1, 0xe0, 0x0e, + 0xe9, 0x40, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x30, 0xc3, 0x01, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, + 0x87, 0x5f, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, 0xa0, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x98, 0x81, + 0x84, 0x41, 0x39, 0xe0, 0xc3, 0x38, 0xb0, 0x43, 0x3d, 0x90, 0x43, 0x39, 0xcc, 0x40, 0xc4, 0xa0, + 0x1d, 0xca, 0xa1, 0x1d, 0xe0, 0x41, 0x1e, 0xde, 0xc1, 0x1c, 0x66, 0x24, 0x63, 0x30, 0x0e, 0xe1, + 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0xe9, 0x40, 0x0f, 0xe5, 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x07, + 0x73, 0x48, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x98, 0xb1, 0x94, 0x01, 0x3c, 0x8c, + 0xc3, 0x3c, 0x94, 0xc3, 0x38, 0xd0, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0xcc, 0xc3, 0x8c, 0xc5, 0x0c, + 0x48, 0x21, 0x15, 0x42, 0x61, 0x1e, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0x52, 0x81, 0x14, 0x66, + 0x4c, 0x67, 0x30, 0x0e, 0xef, 0x20, 0x0f, 0xef, 0xe0, 0x06, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x0f, + 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0x30, 0xa3, 0x40, + 0x83, 0x76, 0x68, 0x07, 0x79, 0x08, 0x87, 0x19, 0x4e, 0x1a, 0xa0, 0x43, 0x39, 0x84, 0x03, 0x3c, + 0x84, 0x03, 0x3b, 0xb0, 0xc3, 0x3b, 0x8c, 0xc3, 0x3c, 0xa4, 0x03, 0x3d, 0x94, 0x03, 0x00, 0x00, + 0x79, 0x20, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x72, 0x1e, 0x48, 0x20, 0x43, 0x88, 0x0c, 0x19, + 0x09, 0x72, 0x32, 0x48, 0x20, 0x23, 0x81, 0x8c, 0x91, 0x91, 0xd1, 0x44, 0xa0, 0x10, 0x28, 0x64, + 0x3c, 0x31, 0x32, 0x42, 0x8e, 0x90, 0x21, 0xa3, 0x88, 0x51, 0xb3, 0x02, 0x4a, 0xd2, 0x3d, 0x4f, + 0xb1, 0x5c, 0x4b, 0xa2, 0x0c, 0xca, 0x25, 0x2d, 0x85, 0x23, 0x39, 0x93, 0x43, 0x4c, 0x00, 0x00, + 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x49, 0x43, 0x20, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x48, 0x6f, 0x6d, 0x65, 0x62, 0x72, 0x65, 0x77, 0x20, 0x63, 0x6c, 0x61, 0x6e, + 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, + 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x36, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x5f, 0x5a, + 0x54, 0x53, 0x31, 0x37, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x56, 0x69, 0x65, 0x77, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x5a, 0x54, 0x53, 0x35, 0x75, 0x69, + 0x6e, 0x74, 0x32, 0x69, 0x6e, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x35, 0x75, 0x69, 0x6e, 0x74, 0x33, + 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x42, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x72, + 0x72, 0x61, 0x79, 0x56, 0x69, 0x65, 0x77, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x32, 0x42, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x6f, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x36, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x32, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x41, 0x63, + 0x63, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x32, 0x45, 0x6d, 0x62, + 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x48, 0x69, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, + 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x5f, 0x5a, 0x54, 0x53, 0x4e, 0x39, 0x45, 0x6d, 0x62, + 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x55, 0x74, 0x5f, 0x45, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, + 0x6d, 0x62, 0x72, 0x65, 0x65, 0x48, 0x69, 0x74, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x5a, 0x54, 0x53, + 0x31, 0x33, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, + 0x86, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0x90, 0xa4, 0xc4, 0x08, 0x42, 0xa2, + 0x12, 0x23, 0x08, 0xc9, 0x4a, 0x8c, 0x20, 0x24, 0x2c, 0x31, 0x82, 0x30, 0xb4, 0xc4, 0x08, 0xc2, + 0xe0, 0x12, 0x23, 0x08, 0xc3, 0x4b, 0x8c, 0x20, 0x0c, 0x30, 0x31, 0x82, 0x30, 0xc4, 0xc4, 0x08, + 0xc2, 0x20, 0x13, 0x23, 0x08, 0xc3, 0x4c, 0x8c, 0x20, 0x0c, 0x34, 0x31, 0x82, 0x30, 0xd4, 0xc4, + 0x08, 0xc2, 0x60, 0x13, 0x23, 0x08, 0xc3, 0x4d, 0x8c, 0x20, 0x0c, 0x38, 0x31, 0x82, 0x30, 0xe4, + 0xc4, 0x08, 0xc2, 0xa0, 0x13, 0x23, 0x08, 0xc3, 0x4e, 0xcc, 0x30, 0x64, 0x81, 0x36, 0xc3, 0xb0, + 0x09, 0xdc, 0x0c, 0xc1, 0x30, 0x43, 0x50, 0xcc, 0x30, 0x10, 0x6f, 0xd0, 0xcd, 0x30, 0xc0, 0x01, + 0x1c, 0x74, 0x33, 0x0c, 0x06, 0x1c, 0x74, 0x33, 0x0c, 0x72, 0x20, 0x07, 0xdd, 0x0c, 0xc7, 0x21, + 0x07, 0x9d, 0x1c, 0x78, 0x72, 0xf0, 0xcd, 0x30, 0xd0, 0x81, 0x1c, 0x74, 0x33, 0x0c, 0x74, 0x20, + 0x07, 0xde, 0x0c, 0x03, 0x1d, 0xc8, 0xc1, 0x37, 0xc3, 0x90, 0xc0, 0x41, 0x37, 0xc3, 0xa0, 0xc0, + 0x41, 0x37, 0x43, 0x81, 0xe0, 0x41, 0x97, 0x07, 0xdf, 0x0c, 0x83, 0x1e, 0xe0, 0x41, 0x37, 0xc3, + 0xa0, 0x07, 0x79, 0xf0, 0xcd, 0x30, 0x30, 0x70, 0xd0, 0xcd, 0x50, 0x2c, 0x7d, 0xd0, 0xf5, 0x81, + 0x37, 0xc3, 0xe0, 0x07, 0x7d, 0xd0, 0xcd, 0x30, 0xf8, 0x41, 0x1f, 0x78, 0x33, 0x1c, 0x4d, 0x1f, + 0x74, 0x7d, 0xe0, 0xf5, 0xc1, 0x37, 0xc3, 0x10, 0x0a, 0x7d, 0xd0, 0xcd, 0x30, 0x84, 0x42, 0x1f, + 0x78, 0x33, 0x0c, 0xa1, 0xd0, 0x07, 0xdf, 0x0c, 0x43, 0x1f, 0xf4, 0x41, 0x37, 0x43, 0xe1, 0xe0, + 0x41, 0x97, 0x07, 0xdf, 0x0c, 0x83, 0x29, 0xe0, 0x41, 0x37, 0x43, 0xf2, 0xe0, 0x41, 0x97, 0x07, + 0x1f, 0x1e, 0x80, 0x01, 0x1e, 0x84, 0xc1, 0x0c, 0x03, 0x2a, 0xe0, 0x01, 0x18, 0xcc, 0x30, 0xa0, + 0x42, 0x1e, 0x7c, 0x33, 0x14, 0x90, 0x1c, 0x74, 0x72, 0xe0, 0xcd, 0x30, 0xac, 0x82, 0x1c, 0x74, + 0x33, 0x0c, 0xab, 0x20, 0x07, 0xde, 0x0c, 0x03, 0x2a, 0xe0, 0x41, 0x18, 0xcc, 0x30, 0x44, 0x70, + 0xd0, 0xcd, 0x30, 0xbc, 0xc2, 0x2b, 0x74, 0x33, 0x14, 0x12, 0x1e, 0x74, 0x78, 0xf0, 0xcd, 0x30, + 0xc4, 0x02, 0x1e, 0x74, 0x33, 0x24, 0x95, 0x1c, 0x74, 0x7d, 0xe0, 0xf5, 0xc1, 0xd7, 0x07, 0x62, + 0x30, 0xc3, 0x41, 0xc1, 0x41, 0x07, 0x07, 0x60, 0x30, 0x0b, 0x63, 0x30, 0x43, 0x64, 0xc9, 0x41, + 0x27, 0x07, 0x9e, 0x1c, 0x7c, 0x72, 0x20, 0x06, 0x72, 0x00, 0x06, 0x7d, 0x40, 0x06, 0x7d, 0x10, + 0x06, 0x70, 0x50, 0x06, 0x33, 0x14, 0x13, 0x2d, 0x74, 0xb5, 0x60, 0x06, 0x33, 0x0c, 0xb6, 0xd0, + 0x07, 0x67, 0x30, 0xc3, 0x60, 0x0b, 0x72, 0x30, 0x06, 0x33, 0x0c, 0xb4, 0x20, 0x07, 0x63, 0x30, + 0xc3, 0x70, 0xc1, 0x41, 0x37, 0xc3, 0xa0, 0x0b, 0xba, 0xd0, 0xcd, 0x30, 0xc4, 0x02, 0x1e, 0x7c, + 0x33, 0x34, 0x18, 0x1c, 0x74, 0x70, 0x60, 0x06, 0xba, 0x80, 0x06, 0xba, 0x90, 0x06, 0x7d, 0xa0, + 0x06, 0x78, 0xb0, 0x06, 0x33, 0x0c, 0xbd, 0xd0, 0x07, 0x6a, 0x30, 0xc3, 0xd0, 0x0b, 0x70, 0x60, + 0x06, 0x33, 0x0c, 0xbd, 0xa0, 0x0b, 0x69, 0x70, 0xa8, 0x00, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, + 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, + 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x65, 0xa1, 0x81, 0x1b, 0xa0, 0x81, + 0x1b, 0xb0, 0x82, 0x1b, 0xb8, 0x81, 0x1b, 0xa0, 0x01, 0x1a, 0xe8, 0x81, 0x1b, 0xb8, 0x01, 0x1a, + 0xe8, 0x81, 0x1b, 0xb8, 0x01, 0x2b, 0xb8, 0x81, 0x1b, 0xb8, 0x81, 0x1b, 0xe8, 0x81, 0x1b, 0xa8, + 0x03, 0x1d, 0xb8, 0x81, 0x1e, 0xb8, 0x81, 0x1b, 0xd0, 0x01, 0x1a, 0xb8, 0x81, 0x1e, 0xb8, 0x01, + 0x39, 0xe0, 0x02, 0x69, 0x80, 0x02, 0x1d, 0xd0, 0x01, 0x1d, 0xa0, 0x81, 0x1b, 0xb8, 0x01, 0x58, + 0xd0, 0x01, 0x1d, 0xc8, 0x48, 0x60, 0x82, 0x72, 0x62, 0x63, 0xb3, 0x6b, 0x73, 0x61, 0x4b, 0x73, + 0x5b, 0x2b, 0x93, 0x73, 0x79, 0x83, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x1b, 0x05, 0xc8, 0x88, 0x8d, + 0xcd, 0xae, 0xcd, 0xa5, 0xed, 0x8d, 0xac, 0x8e, 0xad, 0xcc, 0xc5, 0x8c, 0x2d, 0xec, 0x6c, 0x6e, + 0x14, 0x61, 0x0d, 0xd8, 0x20, 0x15, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32, 0x37, 0xba, + 0x51, 0x82, 0x36, 0x00, 0xa9, 0x18, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, + 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, 0x39, + 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, + 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, + 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, 0x07, + 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, + 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, + 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, 0xe8, + 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, + 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x0b, 0x88, 0x75, 0x18, + 0x07, 0x73, 0x48, 0x87, 0x05, 0xcf, 0x38, 0xbc, 0x83, 0x3b, 0xd8, 0x43, 0x39, 0xc8, 0xc3, 0x39, + 0x94, 0x83, 0x3b, 0x8c, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xc8, 0x03, 0x3b, 0x00, 0x00, 0x00, 0x00, + 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x03, + 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x1b, 0x0d, 0xa0, 0xda, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, + 0x64, 0xe8, 0x88, 0x6f, 0x27, 0x1c, 0x14, 0x05, 0x3a, 0x42, 0x88, 0x8e, 0x0c, 0x32, 0x04, 0x87, + 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0x80, + 0x83, 0x2d, 0xc3, 0x10, 0xc0, 0xc1, 0x96, 0x21, 0x09, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x1b, 0x0d, 0xa0, 0xda, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, + 0x64, 0xe8, 0x88, 0x6f, 0x27, 0x1c, 0x14, 0x05, 0x3a, 0x42, 0x88, 0x8e, 0x0c, 0x32, 0x04, 0x87, + 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x4d, 0x40, 0x00, 0xbe, 0x9d, 0xe0, 0x70, 0xbe, 0x9d, 0xe0, 0x74, 0x14, 0xe9, 0x08, + 0x2d, 0x3a, 0x42, 0x84, 0x8e, 0x0c, 0x32, 0x04, 0x11, 0x84, 0x01, 0x21, 0xfe, 0x83, 0x0c, 0xc3, + 0x14, 0x61, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x40, 0x00, 0x1b, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0x80, 0x83, 0x2d, 0xc3, 0x10, + 0xc0, 0xc1, 0x96, 0x21, 0x09, 0xe0, 0x60, 0xcb, 0xd0, 0x04, 0x70, 0xb0, 0x65, 0x70, 0x02, 0x38, + 0xd8, 0x32, 0x50, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x34, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0x02, 0x00, 0x00, 0x00, 0x74, 0xcc, 0x8a, 0x6f, 0x27, 0x20, 0x14, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0xca, 0x44, 0xc1, 0xac, 0xd0, 0x32, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, + 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, + 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x53, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0x80, 0x83, 0x2d, 0x83, 0x13, 0xc0, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xcc, 0x8a, 0x6f, + 0x27, 0x20, 0x14, 0x05, 0xb3, 0xe2, 0xdb, 0x09, 0xca, 0x44, 0xc1, 0xac, 0xd0, 0x32, 0x2b, 0x83, + 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, + 0x53, 0x50, 0x00, 0xbe, 0x9d, 0x40, 0x85, 0x81, 0x6f, 0x27, 0x50, 0x62, 0x40, 0xd7, 0xac, 0x10, + 0x34, 0x2b, 0xf4, 0xcc, 0x0a, 0x15, 0xb3, 0x32, 0xc8, 0x10, 0x60, 0x17, 0x06, 0x85, 0xf8, 0x0f, + 0x32, 0x0c, 0x1a, 0x86, 0x81, 0x21, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x60, 0x74, 0x1a, 0x06, + 0x88, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xd1, 0x04, 0x05, 0xe0, 0xdb, 0x09, 0x62, 0xc0, + 0x06, 0xbe, 0x9d, 0x20, 0x06, 0x6d, 0x40, 0x65, 0x30, 0x2b, 0xe4, 0xcd, 0x0a, 0x75, 0xb3, 0x42, + 0xc5, 0xac, 0x0c, 0x32, 0x04, 0x66, 0x50, 0x06, 0x18, 0x14, 0xe2, 0x3f, 0xc8, 0x30, 0xa0, 0x81, + 0x19, 0x60, 0x60, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x18, 0x6b, 0x80, 0x06, 0x18, 0x20, + 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x44, 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0x80, 0x83, 0x2d, 0x83, 0x13, 0xc0, 0xc1, 0x96, 0x61, + 0x0a, 0xe0, 0x60, 0xcb, 0xd0, 0x05, 0x70, 0xb0, 0x65, 0x10, 0x83, 0x00, 0x0e, 0xb6, 0x0c, 0x6c, + 0x10, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x84, 0xcc, 0x8a, 0x6f, 0x27, 0x24, 0x15, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0x0b, 0x45, 0xc1, 0xac, 0xf8, 0x76, 0x42, 0x33, 0x51, 0x30, 0x2b, 0xe4, 0xcc, 0xca, 0x20, 0x43, + 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, + 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, + 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x59, 0x50, 0x00, 0x1b, 0x10, 0x03, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0x80, 0x83, 0x2d, 0xc3, 0x11, 0xc0, 0xc1, 0x96, 0x61, + 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x84, 0xcc, 0x8a, 0x6f, 0x27, 0x24, 0x15, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0x0b, 0x45, 0xc1, 0xac, 0xf8, 0x76, 0x42, 0x33, 0x51, 0x30, 0x2b, 0xe4, 0xcc, 0xca, 0x20, 0x43, + 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, + 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, + 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x59, 0x50, 0x00, 0xbe, 0x9d, 0xa0, + 0x9d, 0x81, 0x6f, 0x27, 0x68, 0x68, 0x40, 0xdd, 0xac, 0x50, 0x35, 0x2b, 0x44, 0xcd, 0x0a, 0x4d, + 0xb3, 0x42, 0xc6, 0xac, 0x0c, 0x32, 0x04, 0x9f, 0x87, 0x81, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x18, + 0x7c, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x06, 0x19, 0x84, 0x01, 0x06, 0x89, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x72, 0x06, 0x63, 0x80, 0xc1, 0x22, 0xfe, 0x38, 0x04, + 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, 0x76, 0x02, 0x1b, 0xd8, 0x81, 0x6f, 0x27, 0xb0, + 0xc1, 0x1d, 0xd0, 0x1b, 0xcc, 0x0a, 0x9d, 0xc1, 0xac, 0x90, 0x19, 0xcc, 0x0a, 0x95, 0xc1, 0xac, + 0x90, 0x31, 0x2b, 0x83, 0x0c, 0x41, 0x1c, 0xc0, 0x01, 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, 0x73, + 0x10, 0x07, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x86, 0x1d, 0xcc, 0x01, 0x06, + 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x92, 0x07, 0x75, 0x80, 0xc1, 0x22, 0xfe, 0x38, + 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, 0x76, 0x82, 0x1f, 0x94, 0x82, 0x6f, 0x27, + 0xf8, 0x81, 0x29, 0x50, 0x28, 0xcc, 0x0a, 0xe5, 0xc1, 0xac, 0x10, 0x1e, 0xcc, 0x0a, 0xdd, 0xc1, + 0xac, 0x90, 0x31, 0x2b, 0x83, 0x0c, 0xc1, 0x28, 0x88, 0x02, 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, + 0xa5, 0x30, 0x0a, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x06, 0x2a, 0x94, 0x02, + 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0xb2, 0x0a, 0xa7, 0x80, 0xc1, 0x22, 0xfe, + 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0x6c, 0x40, 0x0c, 0x11, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x23, 0x80, 0x83, 0x2d, 0xc3, 0x11, 0xc0, 0xc1, 0x96, 0x61, 0x0a, 0xe0, 0x60, 0xcb, + 0x90, 0x05, 0x70, 0xb0, 0x65, 0xd0, 0x02, 0x38, 0xd8, 0x32, 0x98, 0x41, 0x00, 0x07, 0x5b, 0x06, + 0x36, 0x08, 0xe0, 0x60, 0xcb, 0xd0, 0x06, 0x01, 0x1c, 0x6c, 0x19, 0xf2, 0x20, 0x80, 0x83, 0x2d, + 0xc3, 0x1f, 0x04, 0x70, 0xb0, 0x65, 0x00, 0x85, 0x00, 0x0e, 0xb6, 0x0c, 0xac, 0x10, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x4b, 0x00, + 0x84, 0xb1, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x44, 0xe8, 0x88, 0x6f, 0x27, 0x14, 0x12, 0x05, + 0x3a, 0x32, 0xc8, 0x30, 0x04, 0xc5, 0xb0, 0x01, 0x71, 0x04, 0x04, 0x30, 0xc8, 0x40, 0x08, 0x85, + 0x6f, 0x27, 0x20, 0xd6, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0x80, 0x83, 0x2d, 0x03, 0x11, 0xc0, 0xc1, 0x96, 0xe1, 0x08, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x28, 0x83, 0xd1, 0x00, 0xf2, + 0xcd, 0x31, 0xf8, 0xc4, 0x4f, 0x80, 0xc5, 0x58, 0x03, 0x10, 0x0c, 0xd4, 0x1b, 0x0d, 0x20, 0xde, + 0x1c, 0x84, 0x4f, 0xa4, 0x04, 0x4b, 0x80, 0x05, 0xf9, 0xe6, 0x18, 0x52, 0x42, 0x25, 0xc0, 0x62, + 0xac, 0x01, 0x08, 0x08, 0x4a, 0x94, 0x02, 0xf9, 0xe6, 0x18, 0x58, 0xe2, 0x2c, 0xc0, 0x62, 0xac, + 0x01, 0x08, 0x0a, 0x00, 0xe4, 0xf4, 0x8a, 0x6f, 0x27, 0x3c, 0x1b, 0x05, 0xbd, 0xe2, 0xdb, 0x09, + 0x91, 0x46, 0x41, 0xaf, 0x0c, 0x32, 0x14, 0x83, 0x33, 0xc8, 0x10, 0x08, 0xce, 0x20, 0x43, 0xe0, + 0x34, 0xc3, 0x06, 0x44, 0x15, 0x14, 0xc0, 0x20, 0x03, 0x62, 0x34, 0x83, 0x0c, 0x41, 0xd1, 0xf8, + 0x76, 0xc2, 0x45, 0x06, 0x83, 0x0c, 0x82, 0x14, 0x0d, 0x1b, 0x10, 0x42, 0x50, 0x00, 0x83, 0x0c, + 0x8c, 0xe2, 0x0c, 0x32, 0x04, 0x89, 0xe3, 0xdb, 0x09, 0x5b, 0x19, 0x0c, 0x32, 0x08, 0x56, 0x35, + 0x6c, 0x40, 0x08, 0x41, 0x01, 0x6c, 0x40, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0x80, + 0x83, 0x2d, 0x43, 0x13, 0xc0, 0xc1, 0x96, 0x41, 0x0a, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, 0x0d, 0x20, 0xde, 0x1c, 0x84, 0x4f, 0xa8, 0xc4, + 0x4f, 0xfc, 0xc4, 0x1c, 0x84, 0x4f, 0xa4, 0x84, 0x4a, 0xfc, 0xc4, 0x58, 0x04, 0x10, 0x08, 0x04, + 0x25, 0x4a, 0x81, 0x78, 0x73, 0x10, 0x29, 0x31, 0x16, 0x3f, 0xf1, 0x13, 0x73, 0x10, 0x3e, 0x91, + 0x12, 0x63, 0xf1, 0x13, 0x63, 0x11, 0x40, 0x20, 0x14, 0x94, 0x28, 0x06, 0xe2, 0xcd, 0x41, 0xb0, + 0xc4, 0x59, 0xfc, 0xc4, 0x4f, 0xcc, 0x41, 0xf8, 0x44, 0x4a, 0x9c, 0xc5, 0x4f, 0x8c, 0x45, 0x00, + 0x81, 0x60, 0x50, 0xa2, 0x0c, 0xca, 0x81, 0x78, 0x73, 0x10, 0x6b, 0xc1, 0x16, 0x3f, 0xf1, 0x13, + 0x73, 0x10, 0x3e, 0x91, 0x12, 0x6c, 0xf1, 0x13, 0x63, 0x11, 0x40, 0x20, 0x1c, 0x00, 0x00, 0x00, + 0x44, 0xcd, 0x8a, 0x6f, 0x27, 0x54, 0x61, 0x40, 0xc1, 0xac, 0xf8, 0x76, 0xc2, 0x05, 0x06, 0x14, + 0xcc, 0x8a, 0x6f, 0x27, 0x64, 0x1f, 0x05, 0xb3, 0x32, 0xc8, 0x70, 0x14, 0xd7, 0x20, 0x43, 0x40, + 0x5c, 0x83, 0x0c, 0xc1, 0x70, 0x0d, 0x1b, 0x10, 0x5d, 0x50, 0x00, 0x83, 0x0c, 0x0a, 0x62, 0x0d, + 0x32, 0x04, 0x87, 0x35, 0xc8, 0x10, 0x18, 0x96, 0x6f, 0x27, 0x80, 0x41, 0x1b, 0x0c, 0x1b, 0x10, + 0x81, 0x50, 0x00, 0x83, 0x0c, 0x0e, 0x63, 0x0d, 0x32, 0x04, 0x8b, 0x35, 0xc8, 0x10, 0x28, 0x96, + 0x6f, 0x27, 0x90, 0x81, 0x1b, 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, 0x12, 0x54, 0x0d, + 0x32, 0x04, 0x4f, 0x35, 0xc8, 0x10, 0x38, 0x95, 0x6f, 0x27, 0xa0, 0xc1, 0x1b, 0x0c, 0x1b, 0x10, + 0x81, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0x80, + 0x83, 0x2d, 0x83, 0x12, 0xc0, 0xc1, 0x96, 0xe1, 0x09, 0xe0, 0x60, 0xcb, 0x40, 0x05, 0x70, 0xb0, + 0x65, 0xc8, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x1b, 0x0d, 0xa0, 0xda, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x64, 0xe8, 0x08, 0x19, + 0x3a, 0x32, 0xc8, 0x10, 0x14, 0x04, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x83, + 0x0c, 0xc3, 0x51, 0x60, 0x50, 0x88, 0xbf, 0x6f, 0x27, 0x28, 0xd9, 0xb0, 0x01, 0x11, 0x08, 0x04, + 0xb0, 0x01, 0x31, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x80, 0x83, 0x2d, 0x43, 0x10, + 0xc0, 0xc1, 0x96, 0x81, 0x08, 0xe0, 0x60, 0xcb, 0x80, 0x04, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xcc, 0x0a, 0x1d, 0xb3, 0x32, 0xc8, 0x10, + 0x18, 0x05, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x50, 0x00, 0xbe, 0x9d, 0x90, 0x5c, 0x83, + 0x0c, 0x44, 0x72, 0x60, 0x60, 0x88, 0xff, 0xb0, 0x01, 0x31, 0x04, 0x05, 0xe0, 0xdb, 0x09, 0xcc, + 0x35, 0xc8, 0x70, 0x30, 0x09, 0x06, 0x89, 0xf8, 0x0f, 0x1b, 0x10, 0x43, 0x50, 0x00, 0x1b, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0x80, 0x83, 0x2d, 0x03, 0x12, + 0xc0, 0xc1, 0x96, 0x81, 0x09, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xcc, 0x0a, 0x21, 0xb3, 0x32, 0xc8, 0x10, + 0x1c, 0x06, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x4a, 0x50, 0x00, 0x83, 0x0c, 0x43, 0x72, 0x60, + 0x50, 0x88, 0xbf, 0x6f, 0x27, 0x30, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x60, 0x30, + 0x09, 0x06, 0x88, 0xf8, 0xfb, 0x76, 0xc2, 0xa3, 0x0d, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, + 0xc9, 0xb3, 0x60, 0xb0, 0x88, 0xbf, 0x6f, 0x27, 0x48, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, + 0x01, 0x31, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x80, 0x83, 0x2d, 0x43, 0x10, + 0xc0, 0xc1, 0x96, 0x81, 0x08, 0xe0, 0x60, 0xcb, 0x80, 0x04, 0x70, 0xb0, 0x65, 0x60, 0x02, 0x38, + 0xd8, 0x32, 0x40, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x1b, 0x0d, 0xa0, 0xda, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x54, 0xe8, 0x88, 0x6f, + 0x27, 0x18, 0x14, 0x05, 0x3a, 0x42, 0x89, 0x8e, 0xf8, 0x76, 0x82, 0x72, 0x51, 0xa0, 0x23, 0x83, + 0x0c, 0x46, 0x82, 0x20, 0x11, 0x88, 0xff, 0x20, 0x83, 0xb1, 0x28, 0x48, 0x04, 0xe2, 0x8f, 0xc1, + 0x00, 0xfe, 0xc3, 0x06, 0xc4, 0x13, 0x10, 0x80, 0x6f, 0x27, 0x3c, 0x1e, 0x49, 0x3a, 0x42, 0x89, + 0x8e, 0x0c, 0x32, 0x38, 0xd1, 0x83, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0xce, 0x14, 0x21, 0x11, 0x88, + 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0x80, 0x83, 0x2d, 0x43, 0x11, 0xc0, 0xc1, 0x96, 0x61, + 0x09, 0xe0, 0x60, 0xcb, 0xe0, 0x04, 0x70, 0xb0, 0x65, 0xa0, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xd4, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x64, 0xf4, 0x8a, 0x6f, + 0x27, 0x1c, 0x14, 0x05, 0xbd, 0xe2, 0xdb, 0x09, 0xc9, 0x44, 0x41, 0xaf, 0x10, 0x33, 0x2b, 0xbe, + 0x9d, 0xd0, 0x64, 0x14, 0xcc, 0x8a, 0x6f, 0x27, 0x3c, 0x18, 0x05, 0xb3, 0x32, 0xc8, 0x80, 0x38, + 0x0d, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x30, 0xd0, 0x83, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, + 0xc8, 0xb0, 0x4c, 0x12, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x71, 0x05, 0x05, + 0xe0, 0xdb, 0x09, 0x57, 0x19, 0x90, 0x36, 0x2b, 0xe4, 0xcc, 0x0a, 0x35, 0xb3, 0x32, 0xc8, 0x40, + 0x69, 0x18, 0x0e, 0x81, 0xf8, 0x0f, 0x32, 0x60, 0x9c, 0x86, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, + 0x3f, 0xc8, 0x70, 0x7d, 0x1d, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xc1, 0x04, + 0x05, 0xe0, 0xdb, 0x09, 0x63, 0xe0, 0x06, 0x64, 0x06, 0xb3, 0x42, 0xda, 0xac, 0x50, 0x36, 0x2b, + 0x83, 0x0c, 0x60, 0x60, 0x06, 0x63, 0x80, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0x64, 0x80, 0x06, 0x65, + 0x80, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x30, 0x06, 0x6b, 0x80, 0x06, 0x78, 0x04, + 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0x80, 0x83, 0x2d, 0x83, 0x14, 0xc0, 0xc1, 0x96, 0xc1, + 0x0a, 0xe0, 0x60, 0xcb, 0xf0, 0x05, 0x70, 0xb0, 0x65, 0x18, 0x83, 0x00, 0x0e, 0xb6, 0x0c, 0x6c, + 0x10, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x74, 0xcc, 0x8a, 0x6f, 0x27, 0x20, 0x15, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0x0a, 0x45, 0xc1, 0xac, 0xf8, 0x76, 0x02, 0x33, 0x51, 0x30, 0x2b, 0xf4, 0xcc, 0x8a, 0x6f, 0x27, + 0x40, 0x1c, 0x05, 0xb3, 0xe2, 0xdb, 0x09, 0xd2, 0x46, 0xc1, 0xac, 0xf8, 0x76, 0x02, 0xa5, 0x51, + 0x30, 0x2b, 0x83, 0x0c, 0xce, 0x24, 0x21, 0x12, 0x88, 0xff, 0x20, 0x83, 0x53, 0x51, 0x88, 0x04, + 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0x83, 0x0c, 0x0f, 0x76, 0x61, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0x40, 0x9b, 0x86, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x7c, 0x41, + 0x01, 0xf8, 0x76, 0xc2, 0xd7, 0x06, 0x24, 0x06, 0xb3, 0x42, 0xd3, 0xac, 0x90, 0x34, 0x2b, 0x14, + 0xcd, 0xca, 0x20, 0x83, 0x37, 0x06, 0x61, 0x80, 0x45, 0x20, 0xfe, 0x83, 0x0c, 0x5e, 0x19, 0x8c, + 0x01, 0x1a, 0x81, 0xf8, 0x63, 0x30, 0x80, 0xff, 0x20, 0xc3, 0x87, 0x06, 0x66, 0x80, 0x48, 0x20, + 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x00, 0x06, 0x6b, 0x90, 0x06, 0xa8, 0x04, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x14, 0x14, 0x80, 0x6f, 0x27, 0xbc, 0x81, 0x1e, 0x90, 0x1c, 0xcc, + 0x0a, 0x8d, 0xc1, 0xac, 0x90, 0x18, 0xcc, 0x0a, 0x85, 0xc1, 0xac, 0x0c, 0x32, 0xb8, 0xc1, 0x1c, + 0xc0, 0x01, 0x16, 0x81, 0xf8, 0x0f, 0x32, 0xb8, 0x41, 0x1d, 0xc8, 0x01, 0x1a, 0x81, 0xf8, 0x63, + 0x30, 0x80, 0xff, 0x20, 0xc3, 0x1b, 0xe0, 0x41, 0x1d, 0x20, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0xc0, 0xc1, 0x1e, 0xe0, 0x01, 0x2a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, + 0x01, 0x05, 0x05, 0xe0, 0xdb, 0x09, 0x7f, 0x70, 0x0a, 0x24, 0x0a, 0xb3, 0x42, 0x73, 0x30, 0x2b, + 0x24, 0x07, 0xb3, 0x42, 0x71, 0x30, 0x2b, 0x83, 0x0c, 0x7e, 0x30, 0x0a, 0x7f, 0x80, 0x45, 0x20, + 0xfe, 0x83, 0x0c, 0x7e, 0x50, 0x0a, 0xa1, 0x80, 0x46, 0x20, 0xfe, 0x18, 0x0c, 0xe0, 0x3f, 0xc8, + 0xf0, 0x07, 0xa8, 0x40, 0x0a, 0x88, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xa0, 0xb0, + 0x0a, 0xa7, 0x80, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x40, 0x41, 0x01, 0x6c, + 0x40, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0x80, 0x83, 0x2d, 0x43, 0x13, + 0xc0, 0xc1, 0x96, 0x21, 0x0b, 0xe0, 0x60, 0xcb, 0xe0, 0x05, 0x70, 0xb0, 0x65, 0x50, 0x83, 0x00, + 0x0e, 0xb6, 0x0c, 0x6f, 0x10, 0xc0, 0xc1, 0x96, 0x61, 0x0f, 0x02, 0x38, 0xd8, 0x32, 0x80, 0x42, + 0x00, 0x07, 0x5b, 0x06, 0x56, 0x08, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xa4, 0x1b, 0x0d, 0xa0, 0xda, 0x58, 0x42, 0x00, 0x50, 0x62, 0x34, 0x80, 0x6a, 0x73, 0x08, 0x29, + 0xf1, 0x13, 0x00, 0x00, 0x54, 0xe8, 0x88, 0x6f, 0x27, 0x18, 0x13, 0x05, 0x3a, 0x32, 0xc8, 0x10, + 0x1c, 0x06, 0x06, 0x84, 0xf8, 0x0f, 0x32, 0x04, 0x89, 0x81, 0x42, 0x10, 0xfe, 0x63, 0x08, 0xc1, + 0xc6, 0x41, 0x40, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0x80, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x81, 0x22, 0x00, 0x00, 0x00, 0x00, + 0x34, 0xf4, 0x8a, 0x6f, 0x27, 0x10, 0x10, 0x05, 0xbd, 0xe2, 0xdb, 0x09, 0xc6, 0x43, 0x41, 0xaf, + 0x8c, 0x21, 0x14, 0xd7, 0x18, 0x02, 0x81, 0x8c, 0x21, 0x0c, 0x08, 0x06, 0x82, 0xf8, 0x8f, 0x21, + 0x14, 0xcb, 0x18, 0x02, 0xb2, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0x63, 0x80, 0x88, 0xff, + 0x18, 0x02, 0x03, 0x06, 0x63, 0x08, 0x4f, 0x84, 0x49, 0x20, 0xfe, 0x63, 0x08, 0x91, 0x84, 0x49, + 0x20, 0xfe, 0x18, 0x0c, 0xe1, 0x8f, 0x81, 0x21, 0xfe, 0x63, 0x08, 0xd1, 0x19, 0x20, 0x73, 0x88, + 0x3f, 0x46, 0x86, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x06, 0x84, 0xf8, 0x63, 0x13, 0x80, 0x3f, 0x06, + 0x07, 0xf8, 0x73, 0x00, 0x61, 0x20, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x34, 0x28, 0xa8, 0xc2, 0xa2, 0xd9, 0x68, 0x00, + 0x25, 0xca, 0x60, 0x34, 0x80, 0x6a, 0x73, 0x08, 0x60, 0x11, 0x16, 0x34, 0x28, 0x01, 0xd2, 0x8d, + 0x06, 0x10, 0x6f, 0x2c, 0x02, 0x00, 0x80, 0x80, 0x6a, 0x73, 0x08, 0x61, 0xc1, 0x12, 0xc4, 0x1b, + 0x8b, 0x00, 0x02, 0x20, 0xa0, 0xda, 0x1c, 0x02, 0x4b, 0x84, 0xc5, 0x1c, 0x42, 0x58, 0x80, 0x05, + 0x0d, 0x0a, 0x89, 0x6a, 0x73, 0x08, 0x61, 0x91, 0x12, 0x73, 0x08, 0x29, 0x11, 0x16, 0xc4, 0x1b, + 0x8b, 0x00, 0x84, 0x60, 0x18, 0x8b, 0x08, 0x8a, 0xa2, 0x18, 0x8b, 0x10, 0x0c, 0xc3, 0x18, 0x8b, + 0x18, 0x8e, 0xe3, 0xa0, 0xd9, 0x58, 0x04, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, 0xe2, 0xbf, + 0x00, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x90, 0x61, 0x8c, 0x00, 0x04, 0x41, + 0x10, 0x04, 0x05, 0x00, 0x74, 0xcd, 0x8a, 0x6f, 0x27, 0x60, 0x64, 0x40, 0xc1, 0xac, 0xf8, 0x76, + 0x82, 0x06, 0x06, 0x14, 0xcc, 0x8a, 0x6f, 0x27, 0x70, 0x1b, 0x05, 0x06, 0xe2, 0xdb, 0x09, 0x1e, + 0x47, 0x81, 0x61, 0x0c, 0x32, 0x14, 0x9d, 0x36, 0xc7, 0x10, 0x08, 0xda, 0x20, 0x43, 0xa0, 0x65, + 0x83, 0x0c, 0x0a, 0x18, 0x64, 0x73, 0x0c, 0xc1, 0x31, 0x07, 0x83, 0x0c, 0x41, 0xa7, 0x21, 0x11, + 0x88, 0xff, 0x20, 0x03, 0x43, 0x06, 0xdb, 0x1c, 0x43, 0xb0, 0x84, 0xc1, 0x20, 0x43, 0x10, 0x06, + 0x60, 0x30, 0xc8, 0x10, 0x9d, 0x41, 0x37, 0xc7, 0x10, 0x30, 0x7a, 0x30, 0xc8, 0x10, 0x90, 0x41, + 0x18, 0x20, 0x11, 0x88, 0x3f, 0x22, 0x41, 0xf8, 0xfb, 0x76, 0xc2, 0x1b, 0x84, 0x01, 0x05, 0x86, + 0x31, 0xc8, 0x80, 0xb9, 0x81, 0x18, 0xcc, 0x31, 0x04, 0x42, 0x28, 0x0c, 0x32, 0x04, 0x6b, 0x80, + 0x06, 0x28, 0x05, 0xe2, 0x3f, 0xc8, 0xa0, 0xc9, 0x41, 0x19, 0xcc, 0x31, 0x04, 0xc6, 0x1b, 0x0c, + 0x32, 0x04, 0x6f, 0xe0, 0x06, 0x18, 0x30, 0xe2, 0x8f, 0x45, 0x10, 0xfe, 0x18, 0x1d, 0xe2, 0x8f, + 0x84, 0x25, 0xfe, 0x28, 0x04, 0xe1, 0x3f, 0xc8, 0xf0, 0xe8, 0x01, 0x1b, 0x0c, 0x32, 0x14, 0x7b, + 0xd0, 0x06, 0x83, 0x0c, 0x03, 0x1f, 0xb8, 0xc1, 0x20, 0xc3, 0x19, 0xa4, 0x81, 0x1b, 0x0c, 0x32, + 0xa0, 0x81, 0x1a, 0xb8, 0xc1, 0x20, 0x43, 0x1a, 0xac, 0x81, 0x1b, 0xa0, 0x31, 0x88, 0x3f, 0x16, + 0x82, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x16, 0x88, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0xc6, 0xc1, 0x1c, + 0x88, 0x3f, 0x06, 0x82, 0xf8, 0x8f, 0x18, 0x1c, 0x40, 0x08, 0x82, 0x85, 0x7f, 0xd0, 0x01, 0x38, + 0xd0, 0x41, 0xc0, 0x41, 0x40, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0x80, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xa4, 0x1b, 0x0d, 0xa0, + 0xc4, 0x68, 0x00, 0xd5, 0xe6, 0x10, 0x52, 0xe2, 0x27, 0x68, 0x50, 0x02, 0x64, 0x18, 0x23, 0x00, + 0x41, 0x10, 0xc4, 0x3f, 0x9a, 0x8d, 0x06, 0x10, 0x6f, 0x04, 0x60, 0x0e, 0x22, 0x25, 0x7e, 0xe2, + 0x27, 0x58, 0x82, 0x06, 0x45, 0x00, 0x00, 0x00, 0xb4, 0xe8, 0x88, 0x6f, 0x27, 0x30, 0x19, 0x05, + 0x3a, 0x32, 0xc8, 0x10, 0x30, 0x0a, 0x06, 0x84, 0xf8, 0x8f, 0x21, 0x04, 0xdf, 0x18, 0x02, 0x01, + 0x06, 0x63, 0x08, 0x47, 0x83, 0x42, 0x20, 0xfe, 0x48, 0x04, 0xe1, 0x8f, 0x4f, 0x40, 0xfe, 0x46, + 0x80, 0xbf, 0x19, 0xe0, 0x3f, 0xc7, 0x10, 0x0d, 0x67, 0x30, 0xc8, 0x10, 0x48, 0xd1, 0x20, 0x43, + 0xf3, 0x44, 0x73, 0x0c, 0x41, 0x61, 0xcd, 0x31, 0x04, 0x85, 0x84, 0x44, 0x20, 0xfe, 0xc3, 0x06, + 0x44, 0x17, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0x80, + 0x83, 0x2d, 0xc3, 0x14, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x81, 0x22, 0x20, 0xc3, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xd1, 0xa0, 0x90, 0x0a, + 0x0a, 0x00, 0x00, 0x00, 0x74, 0xf4, 0x8a, 0x6f, 0x27, 0x20, 0x14, 0x05, 0xbd, 0xe2, 0xdb, 0x09, + 0xca, 0x44, 0x41, 0xaf, 0x8c, 0x21, 0x14, 0xdb, 0x18, 0x02, 0xb1, 0x8c, 0x21, 0x0c, 0x0b, 0x06, + 0x82, 0xf8, 0x8f, 0x21, 0x14, 0xce, 0x18, 0x02, 0xe2, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, + 0x63, 0x80, 0x88, 0xff, 0x18, 0x02, 0x43, 0x06, 0x63, 0x08, 0x0f, 0x85, 0x49, 0x20, 0xfe, 0x63, + 0x08, 0x51, 0x85, 0x49, 0x20, 0xfe, 0x18, 0x0c, 0xe1, 0x8f, 0x81, 0x21, 0xfe, 0x63, 0x08, 0xd1, + 0x1a, 0x20, 0x73, 0x88, 0x3f, 0x46, 0x86, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x06, 0x84, 0xf8, 0x63, + 0x13, 0x80, 0x3f, 0x06, 0x07, 0xf8, 0xe3, 0x17, 0x90, 0x3f, 0x06, 0x91, 0xf8, 0x0f, 0x1b, 0x10, + 0x64, 0x10, 0x14, 0x00, 0x0a, 0x8b, 0xf8, 0xfb, 0x76, 0x42, 0x19, 0xd0, 0xc1, 0xb0, 0x01, 0x11, + 0x08, 0x03, 0x80, 0x04, 0x22, 0xfe, 0xbe, 0x9d, 0x70, 0x06, 0x75, 0x30, 0x6c, 0x40, 0x04, 0x02, + 0x01, 0x60, 0x83, 0x89, 0x3f, 0x72, 0x95, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x26, 0x81, 0xf8, 0xfb, + 0x76, 0x02, 0x1b, 0xe4, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x80, 0x60, 0x20, 0x06, 0xe2, 0x8f, + 0xd3, 0x25, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x4e, 0x20, 0xfe, 0xbe, 0x9d, 0x10, 0x07, 0x7a, 0x30, + 0x6c, 0x40, 0x04, 0xc2, 0x00, 0xa0, 0xb7, 0x89, 0x3f, 0x8e, 0x01, 0x1a, 0x88, 0x3f, 0x0a, 0x41, + 0xf8, 0xe3, 0x14, 0x88, 0xbf, 0x6f, 0x27, 0xd8, 0x81, 0x28, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, + 0x88, 0x06, 0x63, 0x20, 0xfe, 0xd8, 0xb1, 0x81, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x62, 0x81, 0xf8, + 0xfb, 0x76, 0xc2, 0x1e, 0x94, 0xc2, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x80, 0x61, 0x70, 0x06, 0xe2, + 0x8f, 0x6e, 0x20, 0x07, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0xd8, 0x05, 0xe2, 0xef, 0xdb, 0x09, 0xa0, + 0xc0, 0x07, 0xc3, 0x06, 0x44, 0x20, 0x0c, 0x00, 0xd6, 0x81, 0x1d, 0x88, 0x3f, 0xba, 0x41, 0x1b, + 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0xa3, 0x18, 0x04, 0xe2, 0xef, 0xdb, 0x09, 0xa5, 0x00, 0x0a, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x2f, 0xa0, + 0x83, 0x2d, 0x43, 0x18, 0x04, 0x75, 0xb0, 0x65, 0x20, 0x83, 0xc0, 0x0e, 0xb6, 0x0c, 0x6a, 0x10, + 0xd0, 0xc1, 0x96, 0x01, 0x0e, 0x82, 0x3a, 0xd8, 0x32, 0xd8, 0x41, 0x60, 0x07, 0x5b, 0x06, 0x3e, + 0x08, 0xe8, 0x60, 0xcb, 0x20, 0x0a, 0x41, 0x1d, 0x6c, 0x19, 0x50, 0x21, 0xb0, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xc4, 0x1b, 0x8b, 0x18, 0x86, 0xe1, 0x18, 0x8b, + 0x10, 0x0c, 0xc1, 0x18, 0x8b, 0x10, 0x04, 0xc1, 0x18, 0x8b, 0x18, 0x8e, 0xe1, 0x18, 0x8b, 0x08, + 0x8a, 0xa0, 0x18, 0x8b, 0x08, 0x82, 0xa0, 0x18, 0x8b, 0x00, 0x08, 0x80, 0x18, 0x8b, 0x00, 0x00, + 0x80, 0xa0, 0xd9, 0x68, 0x00, 0xf1, 0xc6, 0x22, 0x00, 0x21, 0x18, 0xc6, 0x22, 0x00, 0x82, 0x20, + 0xc6, 0x22, 0x82, 0xa2, 0x28, 0xc6, 0x22, 0x04, 0xc3, 0x30, 0xc6, 0x22, 0x86, 0xe3, 0x38, 0x68, + 0x36, 0x16, 0x01, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, 0xe2, + 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x63, 0x11, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, + 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x20, 0x08, 0x82, 0xf8, 0x47, 0x89, 0x11, 0x80, 0xd1, + 0x00, 0xe2, 0xcd, 0x41, 0xb8, 0x85, 0x4a, 0xbc, 0xc5, 0x5b, 0xcc, 0x41, 0xb8, 0x45, 0x4a, 0xa8, + 0xc4, 0x5b, 0x8c, 0x45, 0x00, 0x81, 0x40, 0x90, 0x61, 0x8c, 0x00, 0x04, 0x41, 0x10, 0x04, 0x85, + 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0x23, 0xde, 0x08, 0x00, 0x00, 0x00, 0xa4, 0xcd, 0x8a, 0x6f, + 0x27, 0x6c, 0x67, 0x40, 0xc1, 0xac, 0xf8, 0x76, 0x42, 0x67, 0x06, 0x14, 0xcc, 0x8a, 0x6f, 0x27, + 0x7c, 0x65, 0x40, 0xc1, 0xac, 0x0c, 0x32, 0x04, 0xc3, 0x37, 0xc8, 0x40, 0x18, 0x1f, 0x0a, 0x81, + 0xf8, 0x0f, 0x32, 0x10, 0x06, 0x18, 0x0c, 0x32, 0x1c, 0x09, 0x18, 0xa0, 0x10, 0x88, 0x3f, 0x12, + 0x41, 0xf8, 0x0f, 0x32, 0x28, 0x8c, 0x18, 0x20, 0x12, 0x88, 0xff, 0x20, 0x83, 0xc2, 0x8c, 0x01, + 0x06, 0x86, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x26, 0x85, 0xf8, 0x23, 0xc1, 0x88, 0x3f, 0x0a, 0x41, + 0xf8, 0x0f, 0x32, 0x48, 0x14, 0x1a, 0x20, 0x14, 0x88, 0xff, 0x20, 0x83, 0x44, 0xa5, 0x01, 0x06, + 0x8e, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x46, 0x85, 0xf8, 0x23, 0x41, 0x89, 0x3f, 0x0a, 0x41, 0xf8, + 0xa3, 0x83, 0x88, 0x3f, 0x1e, 0x91, 0xf8, 0xa3, 0x10, 0x84, 0xff, 0x20, 0x03, 0x15, 0x07, 0x70, + 0x30, 0xc8, 0x00, 0xc9, 0x41, 0x1c, 0x0c, 0x32, 0x38, 0x73, 0x20, 0x07, 0x83, 0x0c, 0x0a, 0x1d, + 0xcc, 0xc1, 0x20, 0x03, 0x52, 0x07, 0x74, 0x30, 0xc8, 0x60, 0xd8, 0x41, 0x1d, 0x0c, 0x32, 0x94, + 0xc1, 0x19, 0xd4, 0xc1, 0x20, 0x83, 0x19, 0xa0, 0x41, 0x1d, 0x0c, 0x32, 0x9c, 0x41, 0x1a, 0xd4, + 0xc1, 0x20, 0x03, 0x1a, 0xa8, 0x41, 0x1d, 0xa0, 0x32, 0x88, 0x3f, 0x26, 0x82, 0xf8, 0x63, 0x20, + 0x80, 0x3f, 0x16, 0x8c, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x3e, 0x89, 0xf8, 0x23, 0x73, 0x88, 0x3f, + 0x06, 0x02, 0xf8, 0xa3, 0xf2, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0xe3, 0xe4, 0x88, 0x3f, 0x42, 0x8c, + 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x42, 0x94, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x5e, 0x93, 0xf8, 0x63, + 0x25, 0x89, 0x3f, 0x06, 0x02, 0xf8, 0x63, 0x85, 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0x23, 0x94, 0x0a, + 0xe2, 0x8f, 0x4c, 0x2a, 0x88, 0x3f, 0x22, 0xab, 0x20, 0xfe, 0x48, 0xac, 0x82, 0xf8, 0x0f, 0x32, + 0x10, 0x43, 0x2a, 0x0c, 0x32, 0x04, 0x43, 0x2a, 0x0c, 0x32, 0x04, 0x43, 0x2a, 0x60, 0x60, 0x0a, + 0xe2, 0x3f, 0x62, 0x70, 0x00, 0x21, 0x08, 0x16, 0xfe, 0x41, 0x07, 0xf7, 0xa0, 0x0a, 0x01, 0xaa, + 0x42, 0x40, 0xfe, 0x73, 0x0c, 0xb9, 0x10, 0xc8, 0xc3, 0x20, 0x43, 0xa0, 0x0b, 0xab, 0x80, 0x01, + 0x23, 0xfe, 0xc3, 0x06, 0x44, 0x39, 0x04, 0x05, 0x80, 0x02, 0x23, 0xfe, 0xbe, 0x9d, 0x60, 0x0e, + 0xf3, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x20, 0xd1, 0x88, 0xbf, 0x6f, 0x27, 0xa0, 0x83, 0x3c, + 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x68, 0x38, 0xe2, 0xef, 0xdb, 0x09, 0xea, 0x10, 0x0f, 0xc3, + 0x06, 0x44, 0x20, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0x80, + 0x83, 0x2d, 0x03, 0x2b, 0x04, 0x70, 0xb0, 0x65, 0x78, 0x85, 0x00, 0x0e, 0xb6, 0x0c, 0xb2, 0x10, + 0xc0, 0xc1, 0x96, 0xa1, 0x16, 0x02, 0x38, 0x00, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x30, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, 0x44, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0xc6, 0x88, 0x01, 0x32, 0x06, 0x21, 0x08, + 0x06, 0x4a, 0x4b, 0x18, 0xc4, 0x10, 0x0c, 0x1b, 0x10, 0x48, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, + 0x08, 0xfc, 0x60, 0xcb, 0x50, 0x04, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, 0x44, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0xc6, 0x88, 0x01, 0x32, 0x06, 0x21, 0x08, + 0x06, 0xca, 0x4a, 0x18, 0xc4, 0x10, 0x0c, 0x1b, 0x10, 0x48, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, + 0x08, 0xfc, 0x60, 0xcb, 0x50, 0x04, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, 0x44, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0xc6, 0x88, 0x01, 0x32, 0x06, 0x21, 0x08, + 0x06, 0x4c, 0x4a, 0x18, 0xc4, 0x10, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, + 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x0c, 0x51, 0x00, 0xbe, 0x9d, 0xc0, 0x70, 0xc3, 0x06, + 0x44, 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x34, 0xdc, 0xb0, 0x01, 0x11, 0x10, 0x04, 0xe0, 0xdb, 0x09, + 0x8e, 0x36, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0xfc, 0x60, 0xcb, + 0x50, 0x04, 0x7f, 0xb0, 0x65, 0x58, 0x02, 0x39, 0xd8, 0x32, 0x34, 0x81, 0x1c, 0x6c, 0x19, 0x9e, + 0x40, 0x0e, 0xb6, 0x0c, 0x51, 0x20, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xd4, 0x18, 0x0d, 0x00, 0x44, 0x00, 0x8a, 0x6f, 0x27, 0x14, 0x12, 0x05, 0x03, 0x42, 0x46, 0x82, + 0xf8, 0x76, 0xc2, 0x61, 0x51, 0x90, 0x18, 0x84, 0x18, 0x8a, 0x6f, 0x27, 0x24, 0x19, 0x05, 0x86, + 0xe1, 0xdb, 0x09, 0x8b, 0x46, 0x81, 0x81, 0xf8, 0x76, 0x42, 0x93, 0x51, 0x60, 0x18, 0xb3, 0x0d, + 0xce, 0x01, 0xcc, 0x36, 0x04, 0x46, 0x30, 0xdb, 0x10, 0x14, 0xc2, 0x6c, 0x43, 0x40, 0x0c, 0x23, + 0x06, 0xc9, 0x18, 0x84, 0x20, 0x18, 0x38, 0x33, 0x11, 0x3d, 0x0e, 0x13, 0x6c, 0x40, 0x0c, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, + 0x08, 0xfc, 0x60, 0xcb, 0x50, 0x04, 0x7f, 0xb0, 0x65, 0x30, 0x02, 0x39, 0xd8, 0x32, 0x20, 0x81, + 0x1c, 0x6c, 0x19, 0x94, 0x40, 0x0e, 0xb6, 0x0c, 0x4c, 0x20, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, + 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0x06, 0x1d, 0x88, + 0x32, 0x62, 0x90, 0x8c, 0x41, 0x08, 0x82, 0xc1, 0x63, 0x12, 0x47, 0x41, 0x08, 0xc1, 0x06, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, + 0xec, 0xc1, 0x96, 0x61, 0x08, 0xfc, 0x60, 0xcb, 0x50, 0x04, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, + 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0x06, 0x1d, 0x88, + 0x32, 0x62, 0x90, 0x8c, 0x41, 0x08, 0x82, 0xc1, 0x43, 0x12, 0x47, 0x41, 0x08, 0xc1, 0x06, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, + 0xec, 0xc1, 0x96, 0x61, 0x08, 0xfc, 0x60, 0xcb, 0x50, 0x04, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, + 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0x86, 0x6f, 0x27, + 0x20, 0x16, 0x05, 0x09, 0x32, 0x62, 0x90, 0x90, 0x41, 0x08, 0x82, 0x01, 0x34, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0xb0, 0x01, 0xa1, 0x04, 0x05, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0x42, 0x61, 0xcb, + 0x50, 0x04, 0xa2, 0xb0, 0x65, 0x38, 0x82, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, + 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0x86, 0x6f, 0x27, + 0x20, 0x16, 0x05, 0x09, 0x32, 0x62, 0x90, 0x90, 0x41, 0x08, 0x82, 0x01, 0x14, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0xb0, 0x01, 0xa1, 0x04, 0x05, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0x42, 0x61, 0xcb, + 0x50, 0x04, 0xa2, 0xb0, 0x65, 0x38, 0x82, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, + 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0x86, 0x6f, 0x27, + 0x20, 0x16, 0x05, 0x09, 0x32, 0x62, 0x90, 0x90, 0x41, 0x08, 0x82, 0x41, 0xf4, 0x0f, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, + 0xb0, 0x01, 0xe1, 0x10, 0x05, 0xe0, 0xdb, 0x09, 0x8e, 0x37, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, + 0x76, 0xc2, 0xe3, 0x0d, 0x1b, 0x10, 0x01, 0x41, 0x00, 0xbe, 0x9d, 0x00, 0x71, 0xc3, 0x06, 0x44, + 0x40, 0x0c, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, + 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0x42, 0x61, 0xcb, 0x50, 0x04, 0xa2, 0xb0, + 0x65, 0x38, 0x82, 0x51, 0xd8, 0x32, 0x34, 0x81, 0x1c, 0x6c, 0x19, 0x9e, 0x40, 0x0e, 0xb6, 0x0c, + 0x51, 0x20, 0x07, 0x5b, 0x86, 0x29, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xd4, 0x18, 0x0d, 0x00, 0x44, 0x00, 0x8a, 0x6f, 0x27, 0x14, 0x12, 0x05, + 0x03, 0x42, 0x46, 0xa2, 0xf8, 0x76, 0xc2, 0x61, 0x51, 0x90, 0x18, 0xbe, 0x9d, 0x90, 0x5c, 0x14, + 0x24, 0x08, 0x29, 0x86, 0xe2, 0xdb, 0x09, 0xcb, 0x46, 0x81, 0x61, 0xf8, 0x76, 0x42, 0xc3, 0x51, + 0x60, 0x20, 0xbe, 0x9d, 0xf0, 0x6c, 0x14, 0x18, 0xc6, 0x6c, 0x03, 0x74, 0x00, 0xb3, 0x0d, 0x81, + 0x11, 0xcc, 0x36, 0x04, 0x85, 0x30, 0xdb, 0x10, 0x10, 0xc3, 0x88, 0x81, 0x42, 0x06, 0x21, 0x08, + 0x06, 0x52, 0x4a, 0x4c, 0x11, 0xe4, 0x30, 0xc1, 0x06, 0xc4, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0x42, 0x61, 0xcb, + 0x50, 0x04, 0xa2, 0xb0, 0x65, 0x38, 0x82, 0x51, 0xd8, 0x32, 0x20, 0x81, 0x1c, 0x6c, 0x19, 0x94, + 0x40, 0x0e, 0xb6, 0x0c, 0x4c, 0x20, 0x07, 0x5b, 0x06, 0x27, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xdb, 0x09, 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0xbe, 0x9d, 0x60, 0x54, 0x14, + 0x24, 0x86, 0x6f, 0x27, 0x20, 0x16, 0x05, 0x09, 0x42, 0x09, 0xa2, 0x8c, 0x18, 0x28, 0x64, 0x10, + 0x82, 0x60, 0x30, 0xf1, 0x43, 0x72, 0x18, 0x84, 0x10, 0x6c, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xd0, 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0x42, 0x61, 0xcb, + 0x50, 0x04, 0xa2, 0xb0, 0x65, 0x38, 0x82, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xdb, 0x09, + 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0xbe, 0x9d, 0x60, 0x54, 0x14, 0x24, 0x86, 0x6f, 0x27, + 0x20, 0x16, 0x05, 0x09, 0x42, 0x09, 0xa2, 0x8c, 0x18, 0x28, 0x64, 0x10, 0x82, 0x60, 0x30, 0xe9, + 0x43, 0x72, 0x18, 0x84, 0x10, 0x6c, 0x40, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xd0, + 0x83, 0x2d, 0x83, 0x10, 0xec, 0xc1, 0x96, 0x61, 0x08, 0x42, 0x61, 0xcb, 0x50, 0x04, 0xa2, 0xb0, + 0x65, 0x38, 0x82, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, 0xbe, 0x9d, 0x40, 0x44, 0x14, 0x0c, 0x48, 0x06, + 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x1c, 0x36, 0x20, 0x10, 0x81, 0x00, 0x7c, 0x3b, 0x01, 0xb9, + 0x86, 0x0d, 0x88, 0x40, 0x18, 0x80, 0x0d, 0x88, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x22, 0x20, 0x85, 0x2d, 0xc3, 0x11, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, 0xbe, 0x9d, 0x40, 0x44, + 0x14, 0x0c, 0x48, 0x06, 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x3c, 0x42, 0x42, 0x0d, 0x12, 0x10, + 0x70, 0x41, 0xa2, 0xc3, 0x06, 0xc4, 0x52, 0x14, 0x80, 0x6f, 0x27, 0x2c, 0xda, 0xb0, 0x01, 0x11, + 0x14, 0x03, 0xe0, 0xdb, 0x09, 0x8c, 0x36, 0x6c, 0x40, 0x04, 0x03, 0x01, 0x6c, 0x40, 0x0c, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0x20, 0x85, 0x2d, 0x83, 0x12, 0x90, 0xc2, 0x96, 0x81, + 0x09, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x80, 0xa2, 0x00, 0x50, + 0x7c, 0x3b, 0x61, 0xb8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0xc1, 0x87, 0x17, 0x28, 0x4a, 0x8d, + 0x81, 0xf8, 0x76, 0x82, 0xe3, 0x51, 0x60, 0x18, 0x23, 0x06, 0x48, 0x19, 0x84, 0x20, 0x18, 0x54, + 0xfc, 0x90, 0x10, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, + 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x50, 0x44, 0x01, 0xf8, 0x76, 0x02, 0x55, 0x06, 0xc3, 0x06, 0x44, + 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x54, 0x65, 0x30, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x76, 0x82, + 0x35, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, 0xa0, 0xc2, 0x96, 0xc1, 0x08, 0x52, 0x61, 0xcb, + 0xa0, 0x04, 0xab, 0xb0, 0x65, 0x60, 0x02, 0x56, 0xd8, 0x32, 0x48, 0x81, 0x1c, 0x6c, 0x19, 0xa8, + 0x40, 0x0e, 0xb6, 0x0c, 0x56, 0x20, 0x07, 0x5b, 0x06, 0x2c, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x64, 0x00, 0x4a, 0x1a, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0xa0, 0xa2, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0xc0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x01, 0x18, 0xe0, 0x05, 0x8a, 0x92, 0x63, 0x20, 0xbe, 0x9d, + 0xf0, 0x7c, 0x14, 0x18, 0xc6, 0x88, 0x41, 0x62, 0x06, 0x21, 0x08, 0x06, 0xd7, 0x3e, 0x24, 0xc4, + 0x10, 0x40, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, + 0xc3, 0x06, 0x04, 0x45, 0x14, 0x80, 0x6f, 0x27, 0x50, 0x66, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, + 0xf8, 0x76, 0x42, 0x65, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x10, 0x80, 0x6f, 0x27, 0x58, 0x64, 0x30, + 0x6c, 0x40, 0x04, 0xc4, 0x00, 0x6c, 0x40, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, + 0x85, 0x2d, 0x03, 0x11, 0xa0, 0xc2, 0x96, 0xc1, 0x08, 0x52, 0x61, 0xcb, 0xa0, 0x04, 0xab, 0xb0, + 0x65, 0x60, 0x02, 0x56, 0xd8, 0x32, 0x48, 0x81, 0x1c, 0x6c, 0x19, 0xa8, 0x40, 0x0e, 0xb6, 0x0c, + 0x56, 0x20, 0x07, 0x5b, 0x06, 0x2c, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0xfd, 0x04, + 0x21, 0xf0, 0xed, 0x84, 0xc0, 0xa2, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0xc8, 0x28, 0x18, 0x90, 0x0c, + 0x12, 0x70, 0x41, 0x18, 0xe0, 0x05, 0x8a, 0xd2, 0x63, 0x20, 0xbe, 0x9d, 0x00, 0x81, 0x01, 0x05, + 0x86, 0x41, 0x91, 0x81, 0xf8, 0x76, 0x82, 0x34, 0x06, 0x14, 0x18, 0x06, 0x4d, 0x06, 0xe2, 0xdb, + 0x09, 0x94, 0x19, 0x50, 0x60, 0x18, 0x23, 0x06, 0xcc, 0x19, 0x84, 0x20, 0x18, 0x64, 0x20, 0xf1, + 0x28, 0xc9, 0x61, 0x10, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, + 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x68, 0x44, 0x01, 0xf8, 0x76, 0x82, 0xd6, 0x06, 0xc3, 0x06, + 0x44, 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x6c, 0x6d, 0x30, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x76, + 0x02, 0xb7, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x06, 0xc4, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, 0xa0, 0xc2, 0x96, 0xc1, 0x08, 0x52, 0x61, 0xcb, + 0xa0, 0x04, 0xab, 0xb0, 0x65, 0x60, 0x02, 0x56, 0xd8, 0x32, 0x34, 0xc1, 0x2a, 0x6c, 0x19, 0x9e, + 0x80, 0x15, 0xb6, 0x0c, 0x50, 0xb0, 0x0a, 0x5b, 0x06, 0x29, 0x60, 0x85, 0x2d, 0x03, 0x16, 0xc8, + 0xc1, 0x96, 0x41, 0x0b, 0xe4, 0x60, 0xcb, 0xc0, 0x05, 0x72, 0xb0, 0x65, 0xf0, 0x02, 0x39, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0xe0, 0xa2, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0xd0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x81, 0x18, 0xe0, 0x05, 0x8a, 0x12, 0x64, 0x20, 0xbe, 0x9d, + 0x10, 0x85, 0x01, 0x05, 0x86, 0x41, 0x92, 0x81, 0xf8, 0x76, 0xc2, 0x44, 0x06, 0x14, 0x18, 0x06, + 0x51, 0x06, 0xe2, 0xdb, 0x09, 0xd5, 0x19, 0x50, 0x60, 0x18, 0x23, 0x06, 0x0d, 0x1a, 0x84, 0x20, + 0x18, 0x6c, 0xff, 0xf0, 0x28, 0xc9, 0x61, 0x10, 0x43, 0x60, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, + 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x1a, 0x51, 0x00, 0xbe, 0x9d, + 0xa0, 0xb9, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xe0, 0xdb, 0x09, 0x9b, 0x1b, 0x0c, 0x1b, 0x10, + 0x01, 0x41, 0x00, 0xbe, 0x9d, 0xc0, 0xb1, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xb0, 0x01, 0x31, + 0x10, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, 0xa0, 0xc2, 0x96, 0xc1, + 0x08, 0x52, 0x61, 0xcb, 0xa0, 0x04, 0xab, 0xb0, 0x65, 0x60, 0x02, 0x56, 0xd8, 0x32, 0x34, 0xc1, + 0x2a, 0x6c, 0x19, 0x9e, 0x80, 0x15, 0xb6, 0x0c, 0x50, 0xb0, 0x0a, 0x5b, 0x06, 0x29, 0x60, 0x85, + 0x2d, 0x03, 0x16, 0xc8, 0xc1, 0x96, 0x41, 0x0b, 0xe4, 0x60, 0xcb, 0xc0, 0x05, 0x72, 0xb0, 0x65, + 0xf0, 0x02, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x60, 0xa2, 0x00, 0x40, + 0x7c, 0x3b, 0x61, 0xb8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xc4, 0x18, 0x8a, 0x6f, + 0x27, 0x34, 0x1d, 0x05, 0x86, 0xe1, 0xdb, 0x09, 0x8f, 0x47, 0x81, 0x81, 0x8c, 0x18, 0x24, 0x66, + 0x10, 0x82, 0x60, 0x70, 0xd5, 0x83, 0x62, 0x14, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, + 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x54, 0x44, 0x01, 0xf8, 0x76, 0x42, + 0x65, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x58, 0x66, 0x30, 0x6c, 0x40, 0x04, + 0x04, 0x01, 0xf8, 0x76, 0xc2, 0x45, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x06, 0xc4, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, 0xb4, 0xc2, 0x96, 0xc1, + 0x08, 0x52, 0x61, 0xcb, 0x90, 0x04, 0x74, 0xb0, 0x65, 0x58, 0x82, 0x3a, 0xd8, 0x32, 0x34, 0x81, + 0x1d, 0x6c, 0x19, 0xa6, 0x40, 0x0e, 0xb6, 0x0c, 0x55, 0x20, 0x07, 0x5b, 0x86, 0x2b, 0x90, 0x83, + 0x2d, 0x43, 0x16, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, + 0x80, 0xa2, 0x00, 0x40, 0x7c, 0x3b, 0x61, 0xc0, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, + 0xd4, 0x18, 0x8a, 0x6f, 0x27, 0x38, 0x1e, 0x05, 0x86, 0xe1, 0xdb, 0x09, 0xd0, 0x47, 0x81, 0x81, + 0x8c, 0x18, 0x28, 0x69, 0x10, 0x82, 0x60, 0xc0, 0xd1, 0x83, 0x62, 0x14, 0x43, 0x10, 0x8d, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x15, + 0x51, 0x00, 0xbe, 0x9d, 0x50, 0x9d, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xe0, 0xdb, 0x09, 0xd6, + 0x19, 0x0c, 0x1b, 0x10, 0x01, 0x41, 0x00, 0xbe, 0x9d, 0x70, 0x95, 0xc1, 0xb0, 0x01, 0x11, 0x10, + 0x03, 0xb0, 0x01, 0x31, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, + 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x52, 0x61, 0xcb, 0x90, 0x04, 0x74, 0xb0, 0x65, 0x58, 0x82, 0x3a, + 0xd8, 0x32, 0x34, 0x81, 0x1d, 0x6c, 0x19, 0xa6, 0x40, 0x0e, 0xb6, 0x0c, 0x55, 0x20, 0x07, 0x5b, + 0x86, 0x2b, 0x90, 0x83, 0x2d, 0x43, 0x16, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0xfd, 0x04, + 0x21, 0xf0, 0xed, 0x84, 0xa0, 0xa2, 0x00, 0x40, 0x7c, 0x3b, 0x61, 0xc8, 0x28, 0x18, 0x90, 0x0c, + 0x12, 0x70, 0x41, 0xa2, 0xe4, 0x18, 0x8a, 0x6f, 0x27, 0x3c, 0x1f, 0x05, 0x86, 0xe1, 0xdb, 0x09, + 0x11, 0x18, 0x50, 0x60, 0x20, 0x24, 0x19, 0x8a, 0x6f, 0x27, 0x4c, 0x64, 0x40, 0x81, 0x61, 0xf8, + 0x76, 0x42, 0x55, 0x06, 0x14, 0x18, 0x08, 0x59, 0x86, 0xe2, 0xdb, 0x09, 0x57, 0x1a, 0x50, 0x60, + 0x18, 0xbe, 0x9d, 0x90, 0xa9, 0x01, 0x05, 0x06, 0x32, 0x62, 0xf0, 0xa8, 0x41, 0x08, 0x82, 0x41, + 0xd7, 0x0f, 0x14, 0xf4, 0x34, 0x8b, 0x82, 0x18, 0xc5, 0x10, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, + 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x1f, 0x51, 0x00, 0xbe, 0x9d, + 0xf0, 0xc9, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xe0, 0xdb, 0x09, 0x60, 0x20, 0x07, 0xc3, 0x06, + 0x44, 0x40, 0x10, 0x80, 0x6f, 0x27, 0x84, 0x01, 0x1c, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x1b, + 0x10, 0x03, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, + 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x52, 0x61, 0xcb, 0x90, 0x04, 0x74, 0xb0, 0x65, 0x58, 0x82, 0x3a, + 0xd8, 0x32, 0x34, 0x81, 0x1d, 0x6c, 0x19, 0x9c, 0x80, 0x0e, 0xb6, 0x0c, 0x50, 0x50, 0x07, 0x5b, + 0x06, 0x29, 0xb0, 0x83, 0x2d, 0xc3, 0x14, 0xd0, 0xc1, 0x96, 0xa1, 0x0a, 0xea, 0x60, 0xcb, 0x70, + 0x05, 0x76, 0xb0, 0x65, 0xe8, 0x02, 0x39, 0xd8, 0x32, 0x7c, 0x81, 0x1c, 0x6c, 0x19, 0xc2, 0x20, + 0x90, 0x83, 0x2d, 0xc3, 0x18, 0x04, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, + 0xc0, 0xa2, 0x00, 0x40, 0x7c, 0x3b, 0x61, 0xd0, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, + 0xf4, 0x18, 0x8a, 0x6f, 0x27, 0x40, 0x60, 0x40, 0x81, 0x61, 0xf8, 0x76, 0x82, 0x14, 0x06, 0x14, + 0x18, 0x08, 0x4d, 0x86, 0xe2, 0xdb, 0x09, 0x54, 0x19, 0x50, 0x60, 0x18, 0xbe, 0x9d, 0x60, 0x99, + 0x01, 0x05, 0x06, 0x42, 0x97, 0xa1, 0xf8, 0x76, 0x02, 0xa6, 0x06, 0x14, 0x18, 0x86, 0x6f, 0x27, + 0x68, 0x6b, 0x40, 0x81, 0x81, 0x8c, 0x18, 0x40, 0x6b, 0x10, 0x82, 0x60, 0xe0, 0xf1, 0x03, 0x05, + 0x3d, 0xcd, 0xa2, 0x20, 0x46, 0x31, 0x04, 0xdb, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, + 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0xb0, 0x01, 0xf1, 0x11, 0x05, 0xe0, 0xdb, 0x09, 0xdf, 0x1c, + 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, 0x00, 0x06, 0x73, 0x30, 0x6c, 0x40, 0x04, 0x04, + 0x01, 0xf8, 0x76, 0x42, 0x18, 0xc4, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xb0, 0x01, 0x31, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0x03, 0x11, 0xb4, 0xc2, 0x96, 0xc1, + 0x08, 0x52, 0x61, 0xcb, 0x90, 0x04, 0x74, 0xb0, 0x65, 0x58, 0x82, 0x3a, 0xd8, 0x32, 0x34, 0x81, + 0x1d, 0x6c, 0x19, 0x9c, 0x80, 0x0e, 0xb6, 0x0c, 0x50, 0x50, 0x07, 0x5b, 0x06, 0x29, 0xb0, 0x83, + 0x2d, 0xc3, 0x14, 0xd0, 0xc1, 0x96, 0xa1, 0x0a, 0xea, 0x60, 0xcb, 0x70, 0x05, 0x76, 0xb0, 0x65, + 0xe8, 0x02, 0x39, 0xd8, 0x32, 0x7c, 0x81, 0x1c, 0x6c, 0x19, 0xc2, 0x20, 0x90, 0x83, 0x2d, 0xc3, + 0x18, 0x04, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x11, 0x80, 0x92, 0xc4, 0x20, 0x7c, 0xbf, 0x41, 0x08, 0x2c, 0x0a, 0x00, 0x85, + 0x8c, 0x04, 0xf1, 0xed, 0x84, 0xe3, 0xa2, 0x20, 0x31, 0x46, 0x0c, 0x0e, 0x36, 0x08, 0x41, 0x30, + 0xf8, 0xca, 0x81, 0x18, 0x82, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, 0x84, 0x41, 0x18, + 0x4d, 0x20, 0x86, 0x61, 0x03, 0xa2, 0x21, 0x0a, 0xc0, 0xb7, 0x13, 0x1a, 0x6f, 0xd8, 0x80, 0x08, + 0x88, 0x01, 0xf0, 0xed, 0x04, 0xc7, 0x1b, 0x36, 0x20, 0x02, 0x82, 0x00, 0x7c, 0x3b, 0xe1, 0xe1, + 0x86, 0x0d, 0x88, 0x80, 0x18, 0x80, 0x0d, 0x88, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, 0xa0, 0xc2, 0x96, 0x81, 0x08, 0xfc, 0x60, 0xcb, + 0x60, 0x04, 0x7f, 0xb0, 0x65, 0x60, 0x02, 0x39, 0xd8, 0x32, 0x38, 0x81, 0x1c, 0x6c, 0x19, 0xa0, + 0x40, 0x0e, 0xb6, 0x0c, 0x52, 0x20, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x03, 0x00, 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x18, 0x28, 0x00, + 0x10, 0x3a, 0x12, 0xc5, 0xb7, 0x13, 0x10, 0x8c, 0x82, 0xc4, 0xf0, 0xed, 0x04, 0x25, 0xa3, 0x20, + 0x41, 0x46, 0x0c, 0x90, 0x31, 0x08, 0x41, 0x30, 0x00, 0x03, 0x73, 0x30, 0x8a, 0x21, 0x18, 0x4d, + 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0xd1, 0x04, 0x62, 0x18, 0x36, 0x20, 0x20, + 0xa2, 0x00, 0x7c, 0x3b, 0x01, 0x0a, 0x83, 0x61, 0x03, 0x22, 0x20, 0x06, 0xc0, 0xb7, 0x13, 0xa2, + 0x30, 0x18, 0x36, 0x20, 0x02, 0x82, 0x00, 0x7c, 0x3b, 0x41, 0xfa, 0x86, 0x0d, 0x88, 0x80, 0x18, + 0x80, 0x0d, 0x88, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, + 0xb4, 0xc2, 0x96, 0x81, 0x08, 0x42, 0x61, 0xcb, 0x60, 0x04, 0xa2, 0xb0, 0x65, 0x40, 0x82, 0x51, + 0xd8, 0x32, 0x38, 0x81, 0x1c, 0x6c, 0x19, 0xa0, 0x40, 0x0e, 0xb6, 0x0c, 0x52, 0x20, 0x07, 0x5b, + 0x06, 0x2a, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x15, 0x80, 0x92, 0xc5, 0x20, 0x7c, 0xbf, 0x41, 0x08, + 0x2e, 0x0a, 0x00, 0x85, 0x8e, 0x04, 0xf1, 0xed, 0x04, 0x04, 0xa3, 0x20, 0x31, 0x46, 0x0c, 0x90, + 0x31, 0x08, 0x41, 0x30, 0x00, 0x03, 0x71, 0x20, 0x86, 0x20, 0x19, 0x4d, 0x08, 0x80, 0xd1, 0x04, + 0x21, 0x18, 0x4d, 0x18, 0x84, 0xd1, 0x04, 0x62, 0x18, 0x36, 0x20, 0x1a, 0xa2, 0x00, 0x7c, 0x3b, + 0xa1, 0xf9, 0x86, 0x0d, 0x88, 0x80, 0x18, 0x00, 0xdf, 0x4e, 0x70, 0xbe, 0x61, 0x03, 0x22, 0x20, + 0x08, 0xc0, 0xb7, 0x13, 0x9e, 0x6e, 0xd8, 0x80, 0x08, 0x88, 0x01, 0xd8, 0x80, 0x18, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, 0xa0, 0xc2, 0x96, 0x81, + 0x08, 0xfc, 0x60, 0xcb, 0x60, 0x04, 0x7f, 0xb0, 0x65, 0x60, 0x02, 0x39, 0xd8, 0x32, 0x38, 0x81, + 0x1c, 0x6c, 0x19, 0xa0, 0x40, 0x0e, 0xb6, 0x0c, 0x52, 0x20, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x18, 0x28, 0x00, 0x10, 0x42, 0x12, 0xc5, 0xb7, 0x13, 0x92, 0x8c, 0x82, 0xc4, 0xf0, 0xed, + 0x84, 0x45, 0xa3, 0x20, 0x41, 0x46, 0x0c, 0x12, 0x32, 0x08, 0x41, 0x30, 0x10, 0x83, 0x71, 0x30, + 0x8a, 0x21, 0x60, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x13, 0x06, 0x61, 0x34, 0x81, + 0x18, 0x86, 0x0d, 0x08, 0x88, 0x28, 0x00, 0xdf, 0x4e, 0x80, 0xc4, 0x60, 0xd8, 0x80, 0x08, 0x88, + 0x01, 0xf0, 0xed, 0x84, 0x48, 0x0c, 0x86, 0x0d, 0x88, 0x80, 0x20, 0x00, 0xdf, 0x4e, 0x90, 0xc0, + 0x60, 0xd8, 0x80, 0x08, 0x88, 0x01, 0xd8, 0x80, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, 0xb4, 0xc2, 0x96, 0x81, 0x08, 0x42, 0x61, 0xcb, + 0x60, 0x04, 0xa2, 0xb0, 0x65, 0x40, 0x82, 0x51, 0xd8, 0x32, 0x38, 0x81, 0x1c, 0x6c, 0x19, 0xa0, + 0x40, 0x0e, 0xb6, 0x0c, 0x52, 0x20, 0x07, 0x5b, 0x06, 0x2a, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x18, 0x01, 0x18, 0x4b, 0x08, + 0x02, 0x00, 0x00, 0x00, 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0xc8, 0x28, 0x00, + 0x14, 0xdf, 0x4e, 0x08, 0x30, 0x0a, 0x6e, 0x24, 0x83, 0x5a, 0xcc, 0x31, 0x28, 0x4c, 0x37, 0xc8, + 0x10, 0x2c, 0xca, 0x0d, 0x01, 0x8e, 0x18, 0x18, 0x40, 0x08, 0x82, 0x81, 0x1d, 0x98, 0x41, 0xb0, + 0x0c, 0x1b, 0x10, 0x4f, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, 0xa0, 0xc2, 0x96, 0xa1, 0x08, 0x5e, 0x61, 0xcb, + 0xb0, 0x04, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0xaa, + 0x8d, 0x06, 0x8c, 0x00, 0x8c, 0x25, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x4a, 0x22, + 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x30, 0x28, 0x00, 0x10, 0xdf, 0x4e, 0x08, 0x32, 0xdf, 0x4e, 0x10, + 0x2e, 0x0a, 0x62, 0x23, 0x83, 0x44, 0x5c, 0xe0, 0xe0, 0x88, 0x81, 0x01, 0x84, 0x20, 0x18, 0xc0, + 0x41, 0x1a, 0x04, 0x64, 0x40, 0xc6, 0x8d, 0x64, 0x50, 0x8b, 0x39, 0x86, 0x47, 0x1a, 0x83, 0x41, + 0x86, 0x00, 0x7a, 0x6e, 0x08, 0x70, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xec, 0x80, 0x0d, 0x02, + 0x68, 0xd8, 0x80, 0xa8, 0x82, 0x02, 0xf0, 0xed, 0x84, 0xaa, 0x0c, 0x86, 0x0d, 0x88, 0x00, 0x21, + 0x80, 0x0d, 0x88, 0x01, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, + 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x5e, 0x61, 0xcb, 0xa0, 0x04, 0xaf, 0xb0, 0x65, 0x80, 0x02, 0x52, + 0xd8, 0x32, 0x48, 0x01, 0x29, 0x00, 0x00, 0x00, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x74, 0x1b, 0x4b, 0x08, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x4a, 0x12, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0xb0, 0x28, 0x00, 0x14, 0xdf, 0x4e, 0x08, 0x2a, 0x0a, 0x6e, 0x64, 0xc4, 0xc0, 0x00, 0x42, + 0x10, 0x0c, 0xf0, 0xc0, 0x0b, 0x8e, 0x0c, 0x6a, 0x31, 0x6c, 0x40, 0x28, 0x01, 0x01, 0x6c, 0x40, + 0x0c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, 0x85, 0x2d, 0xc3, 0x10, + 0xa0, 0xc2, 0x96, 0xa1, 0x08, 0x5e, 0x61, 0xcb, 0x80, 0x04, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x8a, 0x95, 0x00, 0xdd, 0xc6, 0x12, 0x82, 0x00, 0x00, + 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x28, 0x28, 0x00, 0x10, 0xdf, 0x4e, 0x08, + 0x2e, 0xdf, 0x4e, 0x10, 0x2a, 0x0a, 0x62, 0x63, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe4, 0x80, + 0x0c, 0x82, 0x24, 0x83, 0x44, 0x50, 0x71, 0x23, 0x23, 0x06, 0x06, 0x10, 0x82, 0x60, 0x80, 0x07, + 0x64, 0x10, 0x2c, 0x19, 0xd4, 0x62, 0xd8, 0x80, 0x80, 0x82, 0x02, 0xf0, 0xed, 0x04, 0xe8, 0x1b, + 0x36, 0x20, 0x82, 0x82, 0x00, 0x36, 0x20, 0x06, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x30, + 0x85, 0x2d, 0xc3, 0x10, 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x5e, 0x61, 0xcb, 0x90, 0x04, 0xaf, 0xb0, + 0x65, 0x60, 0x02, 0x52, 0xd8, 0x32, 0x38, 0x01, 0x29, 0x00, 0x00, 0x00, 0x21, 0x31, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x80, 0x32, 0x28, 0xa4, 0x82, 0xa2, 0xda, 0x08, 0xc0, + 0x58, 0xc2, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xd0, 0xa0, 0x30, 0x03, + 0x28, 0x51, 0x03, 0x34, 0x28, 0x3c, 0x00, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa4, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x6d, 0x00, 0x82, 0x60, 0x40, 0xa8, 0x85, 0x12, 0xf8, 0x76, 0x82, 0xb3, 0xd1, 0x33, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb3, 0x32, 0xc7, 0x10, 0x40, 0x8c, 0x6f, 0x27, + 0x14, 0xdf, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x38, 0xbe, 0x9d, 0x70, 0x78, 0xc3, + 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, 0x20, 0xcf, 0xb0, 0x01, 0x11, 0x50, 0x03, 0xe0, 0xdb, + 0x09, 0xc9, 0x33, 0x6c, 0x40, 0x04, 0x0f, 0x01, 0xf8, 0x76, 0x82, 0xd2, 0x0d, 0x1b, 0x10, 0xc1, + 0x33, 0x00, 0xbe, 0x9d, 0xb0, 0x38, 0xc3, 0x06, 0x44, 0xe0, 0x0c, 0x00, 0x69, 0x80, 0x32, 0x62, + 0x60, 0xb8, 0x01, 0x08, 0x82, 0x41, 0x91, 0x0e, 0x41, 0x43, 0x42, 0x62, 0x10, 0x91, 0x18, 0xbe, + 0x9d, 0xf0, 0x40, 0x94, 0x18, 0xca, 0xb0, 0x01, 0xb1, 0x11, 0x04, 0xe0, 0xdb, 0x09, 0x5b, 0x1b, + 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, 0xc0, 0xb5, 0x01, 0x11, 0xba, 0x31, 0x6c, 0x40, + 0x08, 0x01, 0x01, 0xf8, 0x76, 0x82, 0xe7, 0x06, 0xc3, 0x06, 0x44, 0x50, 0x10, 0xc0, 0x88, 0x81, + 0xd1, 0x06, 0x20, 0x08, 0x06, 0x44, 0x5f, 0x78, 0xd5, 0x06, 0xc4, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x21, 0x80, 0x83, 0x2d, 0x03, 0x11, 0xc0, 0xc1, 0x96, 0x01, 0x09, 0xe0, 0x60, 0xcb, + 0xb0, 0x04, 0x72, 0xb0, 0x65, 0x68, 0x02, 0x52, 0xd8, 0x32, 0x3c, 0x01, 0x29, 0x6c, 0x19, 0xa2, + 0x80, 0x14, 0xb6, 0x0c, 0x53, 0x40, 0x0a, 0x5b, 0x06, 0x2a, 0x88, 0x85, 0x2d, 0x83, 0x15, 0x90, + 0xc2, 0x96, 0xe1, 0x0a, 0x6c, 0x61, 0xcb, 0x90, 0x05, 0xb7, 0xb0, 0x65, 0xd0, 0x02, 0x52, 0xd8, + 0x32, 0x70, 0x01, 0x29, 0x6c, 0x19, 0xbc, 0x40, 0x0e, 0xb6, 0x0c, 0x5f, 0x20, 0x07, 0x5b, 0x86, + 0x30, 0x08, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x83, 0x42, + 0x2a, 0x28, 0xaa, 0x8d, 0x00, 0x90, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa1, 0x90, + 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6d, 0x00, 0x82, 0x60, 0x40, 0x98, 0x45, 0x14, 0xf8, 0x76, + 0x82, 0x72, 0xd1, 0x32, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb3, 0x32, 0xc7, 0x10, + 0x30, 0x89, 0x6f, 0x27, 0x14, 0xdb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x2c, 0xbe, + 0x9d, 0x70, 0x68, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, 0x20, 0xcc, 0xb0, 0x01, 0x11, + 0x40, 0x03, 0xe0, 0xdb, 0x09, 0x09, 0x33, 0x6c, 0x40, 0x04, 0x0c, 0x01, 0x10, 0x05, 0x28, 0x23, + 0x06, 0x86, 0x1b, 0x80, 0x20, 0x18, 0x14, 0xe1, 0x10, 0x2c, 0x44, 0x18, 0xca, 0x70, 0x44, 0xd0, + 0x10, 0xfe, 0x91, 0xc1, 0x2e, 0x86, 0x0d, 0x08, 0x2a, 0x08, 0x80, 0x11, 0x03, 0xa3, 0x0d, 0x40, + 0x10, 0x0c, 0x08, 0xb9, 0xf0, 0x9c, 0x0d, 0x88, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x21, 0x80, 0x83, 0x2d, 0x03, 0x11, 0xc0, 0xc1, 0x96, 0x01, 0x09, 0xe0, 0x60, 0xcb, + 0xb0, 0x04, 0x72, 0xb0, 0x65, 0x68, 0x02, 0x52, 0xd8, 0x32, 0x3c, 0x01, 0x29, 0x6c, 0x19, 0xa0, + 0x20, 0x16, 0xb6, 0x0c, 0x52, 0x80, 0x0b, 0x5b, 0x86, 0x2a, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x00, 0x32, 0x8c, 0x00, 0xd0, + 0xa0, 0x0c, 0x0a, 0xa9, 0xa0, 0xa8, 0x36, 0x02, 0x30, 0x96, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xc3, + 0xff, 0xff, 0xff, 0xff, 0x0f, 0x34, 0x28, 0xcc, 0x00, 0x4a, 0xd4, 0x00, 0x0d, 0x0a, 0x0f, 0x00, + 0x33, 0x11, 0xa4, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6d, 0x00, 0x82, 0x60, 0x40, 0xa8, + 0xc5, 0x12, 0xf8, 0x76, 0x82, 0xb3, 0xd1, 0x33, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb3, 0x32, 0xc7, 0x10, 0x34, 0x8c, 0x6f, 0x27, 0x14, 0xdf, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x38, 0xbe, 0x9d, 0x70, 0x78, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, 0x20, + 0xcf, 0xb0, 0x01, 0x11, 0x54, 0x03, 0xe0, 0xdb, 0x09, 0xc9, 0x33, 0x6c, 0x40, 0x04, 0x0f, 0x01, + 0xf8, 0x76, 0x82, 0xd2, 0x0d, 0x1b, 0x10, 0xc1, 0x33, 0x00, 0xbe, 0x9d, 0xb0, 0x38, 0xc3, 0x06, + 0x44, 0xe0, 0x0c, 0x00, 0x69, 0x80, 0x32, 0x62, 0x60, 0xb8, 0x01, 0x08, 0x82, 0x41, 0x91, 0x0e, + 0x41, 0x43, 0x42, 0x62, 0x10, 0x91, 0x18, 0xbe, 0x9d, 0xf0, 0x40, 0x94, 0x18, 0xca, 0xb0, 0x01, + 0xc1, 0x11, 0x04, 0xe0, 0xdb, 0x09, 0x5c, 0x1b, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, + 0xd0, 0xb5, 0x01, 0x11, 0xba, 0x31, 0x6c, 0x40, 0x08, 0x01, 0x01, 0xf8, 0x76, 0xc2, 0xe7, 0x06, + 0xc3, 0x06, 0x44, 0x50, 0x10, 0xc0, 0x88, 0x81, 0xd1, 0x06, 0x20, 0x08, 0x06, 0x44, 0x5f, 0x7c, + 0xd5, 0x06, 0xc4, 0x00, 0x15, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0x80, 0x83, 0x2d, 0x03, 0x11, + 0xc0, 0xc1, 0x96, 0x01, 0x09, 0xe0, 0x60, 0xcb, 0xb0, 0x04, 0x72, 0xb0, 0x65, 0x68, 0x02, 0x52, + 0xd8, 0x32, 0x3c, 0x01, 0x29, 0x6c, 0x19, 0xa2, 0x80, 0x14, 0xb6, 0x0c, 0x53, 0x40, 0x0a, 0x5b, + 0x06, 0x2a, 0x88, 0x85, 0x2d, 0x83, 0x15, 0x90, 0xc2, 0x96, 0xe1, 0x0a, 0x6c, 0x61, 0xcb, 0x90, + 0x05, 0xb7, 0xb0, 0x65, 0xd0, 0x02, 0x52, 0xd8, 0x32, 0x70, 0x01, 0x29, 0x6c, 0x19, 0xbc, 0x40, + 0x0e, 0xb6, 0x0c, 0x5f, 0x20, 0x07, 0x5b, 0x86, 0x30, 0x08, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x14, 0x52, 0x41, 0x51, 0x6d, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa1, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6d, 0x00, + 0x82, 0x60, 0x40, 0x94, 0x05, 0x14, 0xf8, 0x76, 0x42, 0x62, 0x91, 0x32, 0x2b, 0xc3, 0x06, 0xc4, + 0x10, 0x14, 0x00, 0x09, 0xb3, 0x32, 0xc7, 0x10, 0x24, 0x88, 0x6f, 0x27, 0x14, 0xda, 0xb0, 0x01, + 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x28, 0xbe, 0x9d, 0x70, 0x64, 0xc3, 0x06, 0x44, 0x20, 0x14, + 0x80, 0x6f, 0x27, 0x20, 0xcb, 0xb0, 0x01, 0x11, 0x40, 0x03, 0xe0, 0xdb, 0x09, 0xc9, 0x32, 0x6c, + 0x40, 0x04, 0x0b, 0x01, 0xd0, 0x04, 0x28, 0x23, 0x06, 0x86, 0x1b, 0x80, 0x20, 0x18, 0x14, 0xe0, + 0x10, 0x2c, 0x44, 0x18, 0xca, 0x70, 0x44, 0x10, 0x11, 0xfe, 0x91, 0xc1, 0x2e, 0x86, 0x0d, 0x08, + 0x2a, 0x08, 0x80, 0x11, 0x03, 0xa3, 0x0d, 0x40, 0x10, 0x0c, 0x88, 0xb8, 0xe8, 0x9c, 0x0d, 0x88, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0x80, 0x83, 0x2d, 0x03, 0x11, + 0xc0, 0xc1, 0x96, 0x01, 0x09, 0xe0, 0x60, 0xcb, 0xb0, 0x04, 0x72, 0xb0, 0x65, 0x68, 0x02, 0x52, + 0xd8, 0x32, 0x3c, 0x01, 0x29, 0x6c, 0x19, 0xa0, 0x20, 0x16, 0xb6, 0x0c, 0x52, 0x80, 0x0b, 0x5b, + 0x86, 0x2a, 0xd0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x50, 0x62, 0x04, 0x60, 0x34, 0xa0, 0x0c, 0x88, 0x37, 0x07, + 0x11, 0x16, 0x2a, 0x21, 0x16, 0x63, 0x31, 0x16, 0x01, 0x04, 0xc4, 0x40, 0x86, 0xd1, 0x00, 0x9a, + 0xcd, 0x41, 0x98, 0x85, 0x59, 0x98, 0xc5, 0x4f, 0x50, 0xa2, 0x14, 0x88, 0x37, 0x07, 0x81, 0x16, + 0x62, 0x21, 0x16, 0x63, 0x31, 0x07, 0x11, 0x16, 0x68, 0x21, 0x16, 0x63, 0x31, 0x16, 0x01, 0x04, + 0xc5, 0x40, 0x89, 0x62, 0x20, 0xde, 0x1c, 0x04, 0x5b, 0x88, 0x85, 0x58, 0x8c, 0xc5, 0x1c, 0x44, + 0x58, 0xb0, 0x85, 0x58, 0x8c, 0xc5, 0x58, 0x04, 0x10, 0x18, 0x03, 0x19, 0xc6, 0x08, 0x40, 0x10, + 0x04, 0xf1, 0x8f, 0x66, 0x73, 0x10, 0x66, 0x61, 0x16, 0x66, 0x01, 0x17, 0x94, 0x28, 0x07, 0xe2, + 0xcd, 0x41, 0xc8, 0x85, 0x58, 0x88, 0xc5, 0x58, 0xcc, 0x41, 0x84, 0x85, 0x5c, 0x88, 0xc5, 0x58, + 0x8c, 0x45, 0x00, 0xc1, 0x31, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0xa0, 0x9d, 0x01, 0x05, 0x00, 0x92, + 0xdb, 0x20, 0x7c, 0x46, 0x41, 0x08, 0x28, 0x98, 0x15, 0xdf, 0x4e, 0x10, 0xd6, 0x80, 0x82, 0x59, + 0xf1, 0xed, 0x04, 0x42, 0x0d, 0x28, 0x98, 0x95, 0x39, 0x86, 0x02, 0x0c, 0xbe, 0x41, 0x86, 0x80, + 0xe0, 0x06, 0x19, 0x82, 0x81, 0x1b, 0x36, 0x20, 0xc8, 0x20, 0x28, 0x80, 0x41, 0x86, 0x0d, 0xc9, + 0x06, 0x19, 0x82, 0x23, 0x1b, 0x64, 0x08, 0x8c, 0xcc, 0xb7, 0x13, 0xce, 0xa0, 0x0e, 0x86, 0x0d, + 0x88, 0x40, 0x28, 0x80, 0x41, 0x86, 0x8f, 0xc9, 0x06, 0x19, 0x82, 0x25, 0x1b, 0x64, 0x08, 0x94, + 0xcc, 0xb7, 0x13, 0xd6, 0xc0, 0x0e, 0x86, 0x0d, 0x88, 0x40, 0x28, 0x80, 0x41, 0x86, 0x0c, 0xba, + 0x06, 0x19, 0x82, 0xe7, 0x1a, 0x64, 0x08, 0x9c, 0xcb, 0xb7, 0x13, 0xde, 0xe0, 0x0e, 0x86, 0x0d, + 0x88, 0x40, 0x28, 0x80, 0x0d, 0x88, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xd8, + 0x85, 0x2d, 0x03, 0x11, 0xc0, 0xc1, 0x96, 0xc1, 0x08, 0xe0, 0x60, 0xcb, 0x80, 0x04, 0x70, 0xb0, + 0x65, 0x60, 0x02, 0x38, 0xd8, 0x32, 0x44, 0x01, 0x1c, 0x6c, 0x19, 0xac, 0x00, 0x0e, 0xb6, 0x0c, + 0x5b, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x81, 0x6f, 0x27, 0x0c, 0x10, 0x05, 0x00, 0x92, 0xc4, 0x20, 0x7c, 0xc6, 0x41, 0x08, + 0x30, 0x0a, 0x12, 0x63, 0xd8, 0x80, 0x30, 0x82, 0x01, 0xd8, 0x80, 0x18, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x20, 0xd8, 0x85, 0x2d, 0x03, 0x11, 0xf4, 0xc2, 0x96, 0xa1, 0x08, 0x48, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x81, 0x6f, + 0x27, 0x0c, 0x10, 0x05, 0x00, 0x92, 0xc4, 0x20, 0x7c, 0xc6, 0x41, 0x08, 0x32, 0x0a, 0x76, 0x25, + 0x83, 0x44, 0x0c, 0x1b, 0x10, 0x47, 0x30, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x20, 0xd8, 0x85, 0x2d, 0x03, 0x11, 0xf8, 0xc2, 0x96, 0xc1, 0x08, 0x48, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, 0x0d, 0x20, 0xde, 0x1c, + 0xc4, 0x4f, 0xa8, 0x04, 0x58, 0x80, 0xc5, 0x1c, 0xc4, 0x4f, 0xa4, 0x84, 0x4a, 0x80, 0xc5, 0x58, + 0x04, 0x10, 0x08, 0x04, 0x25, 0x4a, 0x81, 0x78, 0x73, 0x10, 0x29, 0x41, 0x16, 0x60, 0x01, 0x16, + 0x73, 0x10, 0x3f, 0x91, 0x12, 0x64, 0x01, 0x16, 0x63, 0x11, 0x40, 0x20, 0x14, 0x94, 0x28, 0x06, + 0xe2, 0xcd, 0x41, 0xb0, 0x04, 0x5a, 0x80, 0x05, 0x58, 0xcc, 0x41, 0xfc, 0x44, 0x4a, 0xa0, 0x05, + 0x58, 0x8c, 0x45, 0x00, 0x81, 0x60, 0xd0, 0xae, 0x04, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x10, 0x79, + 0x14, 0x00, 0x48, 0x4a, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xa0, 0x69, 0x56, 0x7c, 0x3b, 0x81, 0x12, + 0x03, 0x0a, 0x66, 0xc5, 0xb7, 0x13, 0xac, 0x30, 0xa0, 0x60, 0x56, 0x7c, 0x3b, 0x01, 0x03, 0x03, + 0x0a, 0x66, 0x65, 0x90, 0xe1, 0x28, 0xae, 0x41, 0x86, 0x80, 0xb8, 0x06, 0x19, 0x82, 0xe1, 0x1a, + 0x36, 0x20, 0x96, 0xa0, 0x00, 0x06, 0x19, 0x14, 0xc4, 0x1a, 0x64, 0x08, 0x0e, 0x6b, 0x90, 0x21, + 0x30, 0x2c, 0xdf, 0x4e, 0x70, 0xdc, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x02, 0x18, 0x64, 0x70, 0x18, + 0x6b, 0x90, 0x21, 0x58, 0xac, 0x41, 0x86, 0x40, 0xb1, 0x7c, 0x3b, 0x41, 0x7a, 0x83, 0x61, 0x03, + 0x22, 0x10, 0x0a, 0xc0, 0xb7, 0x13, 0x26, 0x35, 0x18, 0x36, 0x20, 0x02, 0x4c, 0x00, 0x36, 0x20, + 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xd8, 0x85, 0x2d, 0x83, 0x12, + 0xc0, 0xc1, 0x96, 0xc1, 0x09, 0xe0, 0x60, 0xcb, 0x30, 0x05, 0x70, 0xb0, 0x65, 0xc0, 0x02, 0x38, + 0xd8, 0x32, 0x68, 0xc1, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xb4, 0x2b, 0x01, 0x00, 0xbe, 0x9d, 0x40, 0x44, 0x14, 0x00, 0x48, 0x16, 0x83, 0xf0, 0x19, 0x05, + 0x21, 0x48, 0x63, 0x07, 0xbe, 0x9d, 0x20, 0x3c, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, + 0x0c, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x20, 0xd8, 0x85, 0x2d, 0x83, 0x11, 0xf8, 0xc2, 0x96, 0x01, 0x09, 0x7e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb4, 0x2b, 0x01, 0x00, 0xbe, 0x9d, 0x40, 0x44, + 0x14, 0x00, 0x48, 0x16, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xf0, 0xed, 0x84, 0x40, 0x19, 0x36, 0x20, + 0x82, 0x63, 0x00, 0x7c, 0x3b, 0x41, 0x60, 0x86, 0x0d, 0x88, 0xe0, 0x10, 0x80, 0x0d, 0x88, 0x01, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xd8, 0x85, 0x2d, 0x43, 0x11, 0xf4, 0xc2, 0x96, 0xe1, + 0x08, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb4, 0x2b, 0x01, 0x00, + 0xf1, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1b, 0x86, 0x5e, 0xd0, 0x05, 0x34, 0x00, 0x00, + 0x29, 0xec, 0xc2, 0xb7, 0x13, 0x0a, 0x89, 0x02, 0x00, 0x49, 0x63, 0x10, 0x3e, 0xa3, 0x20, 0x04, + 0xbe, 0x9d, 0x10, 0x34, 0xc3, 0x06, 0x44, 0x60, 0x04, 0x80, 0x6f, 0x27, 0x08, 0xcd, 0xb0, 0x01, + 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xd8, + 0x85, 0x2d, 0x83, 0x11, 0x80, 0xc3, 0x96, 0x01, 0x09, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0x9d, 0x3d, 0x38, + 0x86, 0x00, 0x00, 0x84, 0x60, 0xc8, 0xc0, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, + 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, 0x8c, 0x26, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, + 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, + 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0xcd, 0x21, 0xb1, 0xe3, 0x06, 0x49, 0x11, + 0x08, 0x80, 0x10, 0x08, 0xc1, 0x30, 0x9a, 0x10, 0x04, 0xa3, 0x09, 0x02, 0x90, 0x81, 0x61, 0xa7, + 0x23, 0x90, 0x60, 0x40, 0x38, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0b, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0c, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0a, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0a, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0e, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x07, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x07, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0d, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xd7, 0x15, 0x38, 0xf0, 0x5e, 0x81, 0x04, 0x96, 0x16, 0x58, + 0x40, 0x6b, 0x81, 0x06, 0xf5, 0x16, 0x78, 0x90, 0x79, 0x81, 0x08, 0x85, 0x18, 0x98, 0xc0, 0x89, + 0x81, 0x0a, 0xcb, 0x18, 0xb8, 0x20, 0x99, 0x81, 0x0c, 0xab, 0x19, 0xd8, 0xa0, 0x9c, 0x81, 0x0e, + 0xf2, 0x19, 0xf8, 0x80, 0xa9, 0x81, 0x10, 0xd9, 0x1a, 0x18, 0x21, 0xbc, 0x81, 0x12, 0xd8, 0x1b, + 0x38, 0x81, 0xbf, 0x81, 0x14, 0xdd, 0x1c, 0x58, 0x61, 0xd8, 0x81, 0x16, 0xec, 0x1d, 0x78, 0x61, + 0xf8, 0x81, 0x19, 0x9a, 0x1f, 0xb8, 0xe1, 0xfa, 0x81, 0x1d, 0xd2, 0x1f, 0xf8, 0x71, 0xff, 0x81, + 0x21, 0x8b, 0x20, 0x38, 0xf2, 0x09, 0x82, 0x25, 0xb7, 0x20, 0x78, 0xf2, 0x0c, 0x82, 0x29, 0xf7, + 0x20, 0xb8, 0x02, 0x1a, 0x82, 0x2d, 0xb7, 0x21, 0xf8, 0xe2, 0x1c, 0x82, 0x30, 0xe3, 0x21, 0x18, + 0xd3, 0x1f, 0x82, 0x33, 0xac, 0x22, 0x58, 0xb3, 0x2d, 0x82, 0x37, 0x94, 0x23, 0x98, 0xd3, 0x3c, + 0x82, 0x3b, 0xfe, 0x23, 0xd8, 0xf3, 0x4a, 0x82, 0x3f, 0xf2, 0x24, 0x18, 0x54, 0x5b, 0x82, 0x43, + 0xda, 0x25, 0x58, 0x64, 0x68, 0x82, 0x47, 0xab, 0x26, 0x98, 0x84, 0x6d, 0x82, 0x4a, 0xf5, 0x26, + 0xb8, 0x24, 0x7a, 0x82, 0x4c, 0xbb, 0x27, 0xd8, 0x34, 0x7e, 0x82, 0x4f, 0xb5, 0x28, 0x18, 0xc5, + 0x8e, 0x82, 0x52, 0xbf, 0x29, 0x38, 0x65, 0x9f, 0x82, 0x54, 0xc9, 0x2a, 0x58, 0x85, 0xad, 0x82, + 0x56, 0xe8, 0x2a, 0x78, 0xa5, 0xba, 0x82, 0x58, 0xc0, 0x2b, 0x98, 0x55, 0xbd, 0x82, 0x5a, 0xef, + 0x2b, 0xb8, 0x55, 0xbf, 0x82, 0x5c, 0xfb, 0x2b, 0xd8, 0x15, 0xc8, 0x82, 0x5e, 0x87, 0x2c, 0xf8, + 0xe5, 0xc8, 0x82, 0x60, 0x95, 0x2c, 0x18, 0xc6, 0xc9, 0x82, 0x62, 0xa3, 0x2c, 0x38, 0xa6, 0xca, + 0x82, 0x64, 0xb5, 0x2c, 0x58, 0xb6, 0xcb, 0x82, 0x66, 0xc1, 0x2c, 0x78, 0x76, 0xcc, 0x82, 0x68, + 0xcd, 0x2c, 0x98, 0x36, 0xcd, 0x82, 0x6a, 0xd9, 0x2c, 0xb8, 0xf6, 0xcd, 0x82, 0x6c, 0xe5, 0x2c, + 0xd8, 0xb6, 0xce, 0x82, 0x6e, 0xf1, 0x2c, 0xf8, 0x76, 0xcf, 0x82, 0x70, 0xfd, 0x2c, 0x18, 0x37, + 0xd8, 0x82, 0x72, 0x89, 0x2d, 0x38, 0xf7, 0xd8, 0x82, 0x74, 0x95, 0x2d, 0x58, 0xb7, 0xd9, 0x82, + 0x76, 0xa1, 0x2d, 0x78, 0x77, 0xda, 0x82, 0x78, 0xad, 0x2d, 0x98, 0x37, 0xdb, 0x82, 0x7a, 0xb9, + 0x2d, 0xb8, 0xf7, 0xdb, 0x82, 0x7c, 0xc5, 0x2d, 0xd8, 0xb7, 0xdc, 0x82, 0x7e, 0xd1, 0x2d, 0xf8, + 0x77, 0xdd, 0x82, 0x80, 0x01, 0xdd, 0x2d, 0x18, 0x18, 0x30, 0xde, 0x82, 0x82, 0x01, 0xe9, 0x2d, + 0x38, 0x18, 0xf0, 0xde, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, + 0x4f, 0x03, 0x00, 0x00, 0x12, 0x03, 0x94, 0x70, 0x3a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x79, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x0f, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x99, 0x0f, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2e, 0x10, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x2c, 0x00, 0x00, 0x45, 0x10, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x5a, 0x10, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x75, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x90, 0x10, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xab, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc6, 0x10, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xe1, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xfb, 0x10, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x15, 0x11, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2f, 0x11, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x4d, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6b, 0x11, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x89, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa7, 0x11, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc5, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe3, 0x11, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xff, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xca, 0x01, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1b, 0x12, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x37, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x4f, 0x12, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x67, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x7f, 0x12, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x99, 0x12, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xb7, 0x12, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xd2, 0x12, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xf1, 0x12, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x0d, 0x13, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xc6, 0x02, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x2d, 0x13, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x4a, 0x13, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x6b, 0x13, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x87, 0x13, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3a, 0x03, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xa7, 0x13, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc2, 0x13, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x72, 0x03, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xe1, 0x13, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xfb, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x19, 0x14, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x34, 0x14, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x53, 0x14, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x6f, 0x14, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x8f, 0x14, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xac, 0x14, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xcd, 0x14, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xe9, 0x14, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x8a, 0x04, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x09, 0x15, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xa9, 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x24, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xc2, 0x04, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x43, 0x15, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x59, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xf4, 0x04, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6f, 0x15, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x90, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x27, 0x05, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xb5, 0x15, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xdc, 0x15, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x07, 0x16, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x9a, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x2d, 0x16, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbe, 0x05, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x57, 0x16, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0xe7, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x83, 0x16, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x11, 0x06, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xb3, 0x16, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xd4, 0x16, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x5f, 0x06, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xf9, 0x16, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x20, 0x17, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x4b, 0x17, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xd2, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x71, 0x17, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xf6, 0x06, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x9b, 0x17, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc7, 0x17, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xf7, 0x17, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x16, 0x18, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x95, 0x07, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x39, 0x18, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x58, 0x18, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xd4, 0x07, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x7b, 0x18, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0xf6, 0x07, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa0, 0x18, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x19, 0x08, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xc9, 0x18, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xee, 0x18, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x64, 0x08, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x17, 0x19, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x8c, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x3c, 0x19, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xaf, 0x08, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x61, 0x19, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xd2, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x80, 0x19, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xef, 0x08, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9f, 0x19, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc1, 0x19, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xe0, 0x19, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x4a, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xfe, 0x19, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x19, 0x1a, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x34, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x99, 0x09, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x4b, 0x1a, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xae, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x6b, 0x1a, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xcc, 0x09, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x89, 0x1a, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xe8, 0x09, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xaf, 0x1a, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd3, 0x1a, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x2e, 0x0a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xfd, 0x1a, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x56, 0x0a, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1f, 0x1b, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x41, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x96, 0x0a, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5c, 0x1b, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x78, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc9, 0x0a, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x94, 0x1b, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xe3, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xb1, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfe, 0x0a, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xce, 0x1b, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x19, 0x0b, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xf1, 0x1b, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3a, 0x0b, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x15, 0x1c, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x39, 0x1c, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7e, 0x0b, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5e, 0x1c, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x83, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc4, 0x0b, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9f, 0x1c, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xde, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xbc, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf9, 0x0b, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd9, 0x1c, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x14, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xf7, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x15, 0x1d, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x31, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x66, 0x0c, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x4e, 0x1d, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x81, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x6b, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x9c, 0x0c, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x89, 0x1d, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa7, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xd4, 0x0c, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc3, 0x1d, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xee, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xe0, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x09, 0x0d, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xfd, 0x1d, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x24, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x1b, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x36, 0x1e, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x59, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x52, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x73, 0x0d, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6e, 0x1e, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x8b, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xa8, 0x0d, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa7, 0x1e, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xc2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc4, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdd, 0x0d, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe1, 0x1e, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x14, 0x0e, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1b, 0x1f, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x38, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x49, 0x0e, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x55, 0x1f, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x64, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x73, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x91, 0x1f, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x9c, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xad, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb6, 0x0e, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xca, 0x1f, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xe7, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xec, 0x0e, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x23, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x24, 0x0f, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x31, 0x20, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x2c, 0x00, 0x00, 0x3f, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x5d, 0x20, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x2c, 0x00, 0x00, 0x6d, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x0c, 0x00, 0x00, 0x23, 0x08, 0x00, 0x00, 0x12, 0x03, 0x94, 0xfd, 0x88, 0x00, 0x00, 0x00, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, + 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, + 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2e, 0x70, 0x30, 0x6c, + 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, + 0x2e, 0x70, 0x30, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, + 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, + 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, + 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, + 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, + 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, + 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x6c, 0x6c, + 0x76, 0x6d, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, + 0x2e, 0x66, 0x61, 0x64, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, + 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, + 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x61, + 0x72, 0x6d, 0x36, 0x34, 0x2d, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x6d, 0x61, 0x63, + 0x6f, 0x73, 0x78, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x2f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2f, + 0x6d, 0x69, 0x6b, 0x65, 0x2f, 0x43, 0x6c, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x4c, 0x75, 0x69, 0x73, 0x61, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x2f, + 0x73, 0x72, 0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x2f, 0x66, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x73, 0x2e, 0x64, 0x61, 0x72, 0x77, 0x69, 0x6e, 0x2e, 0x61, 0x72, 0x6d, 0x36, 0x34, + 0x2e, 0x6c, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6c, + 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x2e, 0x70, 0x30, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x30, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, + 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, + 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x70, 0x6f, 0x73, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, + 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, + 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, + 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x73, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, + 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, + 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, + 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x78, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, + 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, + 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, + 0x32, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x5f, + 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, + 0x63, 0x65, 0x2e, 0x66, 0x61, 0x64, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x5f, 0x6c, 0x6c, + 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x33, 0x32, 0x5f, 0x6c, 0x6c, + 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.darwin.x86_64.inl b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.darwin.x86_64.inl new file mode 100644 index 000000000..cf284582e --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.darwin.x86_64.inl @@ -0,0 +1,2153 @@ + +static const unsigned char luisa_fallback_backend_device_builtin_module[34400] = { + 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x4c, 0x86, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x01, 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x62, 0x0c, 0x30, 0x24, 0x4a, 0x59, 0xbe, 0x66, 0xdd, 0xfb, 0xb5, 0x7f, 0x0b, 0x51, 0x80, 0x4c, + 0x01, 0x00, 0x00, 0x00, 0x21, 0x0c, 0x00, 0x00, 0x21, 0x16, 0x00, 0x00, 0x0b, 0x02, 0x21, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, + 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x1c, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xe4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, + 0x0a, 0x32, 0x72, 0x88, 0x48, 0x70, 0xc4, 0x21, 0x23, 0x44, 0x12, 0x87, 0x8c, 0x10, 0x41, 0x92, + 0x02, 0x64, 0xc8, 0x08, 0xb1, 0x14, 0x20, 0x43, 0x46, 0x88, 0x20, 0xc9, 0x01, 0x32, 0x72, 0x84, + 0x58, 0x0e, 0x90, 0x91, 0x23, 0x44, 0x90, 0xa1, 0x82, 0xa2, 0x02, 0x19, 0xc3, 0x07, 0xcb, 0x15, + 0x19, 0x72, 0x8c, 0x8c, 0x25, 0x10, 0x1d, 0x3a, 0x74, 0xc8, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x22, 0x66, 0x04, 0x10, 0xb2, 0x42, 0x82, 0xc9, 0x11, 0x52, 0x42, 0x82, + 0xc9, 0x91, 0x71, 0xc2, 0x50, 0x48, 0x0a, 0x09, 0x26, 0x47, 0xc6, 0x05, 0x42, 0x72, 0x26, 0x08, + 0x52, 0x81, 0x46, 0x00, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x73, 0x04, 0xa0, 0x50, 0x86, 0xc0, 0x00, + 0x50, 0x86, 0x00, 0x00, 0x30, 0x03, 0x50, 0x04, 0x03, 0xc0, 0x08, 0x83, 0xc1, 0x1c, 0x01, 0x18, + 0x94, 0x02, 0x01, 0x18, 0x24, 0x12, 0xc3, 0x08, 0x82, 0x61, 0x84, 0xc5, 0xa2, 0x14, 0x0c, 0xc0, + 0x20, 0x91, 0x28, 0x47, 0x00, 0x30, 0x48, 0x24, 0x16, 0x8b, 0x72, 0x04, 0x00, 0x83, 0x44, 0x62, + 0x30, 0x28, 0x06, 0x02, 0x30, 0x48, 0x24, 0x12, 0xc5, 0x60, 0x00, 0x06, 0x89, 0x44, 0xa2, 0x20, + 0x01, 0xc0, 0x20, 0x91, 0x48, 0x2c, 0x16, 0xe5, 0x08, 0x00, 0x06, 0x89, 0x44, 0x02, 0x70, 0x8c, + 0x34, 0x45, 0x94, 0x30, 0xf9, 0x14, 0xd2, 0x4c, 0x38, 0x22, 0x12, 0x89, 0x44, 0xe2, 0x16, 0x69, + 0x8a, 0x28, 0x61, 0xf2, 0x91, 0x66, 0xc2, 0x11, 0x91, 0x48, 0x24, 0x12, 0xa5, 0x08, 0x00, 0x12, + 0x00, 0x40, 0x29, 0x18, 0x80, 0x84, 0xc1, 0x50, 0x8c, 0x00, 0x20, 0x01, 0x30, 0x00, 0x8a, 0xc1, + 0x00, 0x24, 0x0c, 0x06, 0x43, 0x39, 0x02, 0x80, 0x04, 0x00, 0x00, 0x00, 0x94, 0x84, 0x01, 0x48, + 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x50, 0x90, 0x00, 0x20, 0x01, 0x00, 0x00, 0x0c, 0x80, 0xa2, 0x30, + 0x00, 0x09, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0xe5, 0x60, 0x00, 0x12, 0x06, 0x83, 0xc1, 0x50, + 0x18, 0x06, 0x20, 0x61, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x28, 0x0d, 0x03, 0x90, 0x30, + 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0a, 0xc1, 0x00, 0x24, 0x12, 0xa5, 0x60, 0x00, + 0x12, 0x89, 0x44, 0x31, 0x02, 0x80, 0x04, 0x20, 0x01, 0x28, 0x06, 0x03, 0x90, 0x48, 0x24, 0x12, + 0xa5, 0x08, 0x00, 0x12, 0x09, 0x40, 0x21, 0x02, 0x80, 0x04, 0xa0, 0x18, 0x01, 0x00, 0xc0, 0x90, + 0x00, 0x94, 0x22, 0x00, 0x00, 0x24, 0x00, 0x85, 0x08, 0x00, 0x12, 0x89, 0x39, 0x82, 0xa0, 0x10, + 0x01, 0x40, 0x42, 0x55, 0x86, 0x04, 0x20, 0x51, 0x86, 0x01, 0x60, 0x50, 0x06, 0x03, 0xc0, 0x50, + 0x88, 0x04, 0x20, 0x91, 0x28, 0xc4, 0x00, 0x30, 0x18, 0x14, 0xc2, 0x00, 0x30, 0x18, 0xca, 0x90, + 0x48, 0x24, 0xe6, 0x08, 0xa0, 0x32, 0xcc, 0x66, 0xb3, 0x61, 0x04, 0xc2, 0x28, 0x83, 0xc1, 0x50, + 0x1b, 0x46, 0x10, 0xe6, 0xa0, 0x0c, 0xb7, 0xdb, 0x6d, 0x20, 0x60, 0x8e, 0x00, 0x19, 0x46, 0x10, + 0x92, 0x61, 0x04, 0x22, 0x19, 0x46, 0x18, 0x8c, 0x61, 0x84, 0x21, 0xb9, 0x49, 0x9a, 0x22, 0x4a, + 0x98, 0xfc, 0x0d, 0x69, 0x86, 0x85, 0x90, 0x24, 0x76, 0x71, 0x26, 0x44, 0x00, 0x06, 0x00, 0xc0, + 0x2d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0x03, 0x8d, 0xd3, 0x20, 0xc2, 0x90, 0x48, 0x24, 0x0e, 0x92, + 0xa6, 0x88, 0x12, 0x26, 0xdf, 0x63, 0x82, 0x88, 0x20, 0x56, 0x00, 0x43, 0x43, 0xad, 0x06, 0xcc, + 0x80, 0xc4, 0x41, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0x7b, 0x4c, 0x10, 0x11, 0x44, 0x88, 0x4c, 0x08, + 0x31, 0x18, 0x0c, 0x06, 0x43, 0x22, 0x21, 0xbc, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x8f, 0x09, + 0x22, 0x82, 0x58, 0x01, 0x2c, 0x44, 0x26, 0x24, 0x04, 0x87, 0xc9, 0x60, 0x38, 0x4a, 0x9a, 0x22, + 0x4a, 0x98, 0x7c, 0x4d, 0x10, 0x88, 0x45, 0x6c, 0xa4, 0x09, 0x68, 0x04, 0x02, 0x19, 0x45, 0x9d, + 0x4e, 0x97, 0x00, 0x18, 0x21, 0xa1, 0x32, 0xc2, 0x40, 0x05, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, + 0x28, 0x04, 0x00, 0x00, 0x1b, 0x78, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, + 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x86, 0x20, 0x0c, + 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, + 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, + 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x38, + 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, + 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, 0xe0, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, + 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, + 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, + 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, + 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, + 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, + 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, + 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, + 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, + 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, + 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, + 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0x00, + 0x1e, 0xca, 0xc1, 0x1d, 0xe4, 0x21, 0x1f, 0xdc, 0x01, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, + 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, + 0x01, 0x58, 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x87, 0x38, + 0xb0, 0x03, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x7c, 0x98, + 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, 0xc0, 0x07, 0x36, 0x58, 0x83, 0x79, 0x08, 0x07, + 0x74, 0x30, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, + 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x87, 0x39, 0x60, 0x83, 0x35, 0x98, + 0x87, 0x79, 0x28, 0x07, 0x3a, 0x70, 0x83, 0x38, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x98, 0x87, + 0x72, 0x98, 0x03, 0x36, 0x58, 0x03, 0x7c, 0xc0, 0x83, 0x3b, 0x00, 0x08, 0x7a, 0xa8, 0x07, 0x77, + 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, + 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x36, 0x20, 0x42, 0x00, 0x2c, 0x00, 0x29, 0x00, 0xd5, 0x06, 0x64, 0x10, 0x80, 0x05, 0x20, + 0x05, 0xa0, 0xda, 0x80, 0x10, 0x03, 0xb0, 0x00, 0xa4, 0x00, 0xd0, 0xc1, 0x86, 0xa7, 0xf8, 0xff, + 0xff, 0xff, 0xff, 0x01, 0x38, 0x05, 0xc0, 0x0f, 0x80, 0x3f, 0x00, 0x24, 0xa0, 0x0f, 0x02, 0x5b, + 0x18, 0x36, 0x10, 0x46, 0x00, 0xf0, 0xc1, 0x06, 0xe2, 0x10, 0x80, 0x65, 0x03, 0x82, 0x08, 0xc0, + 0x02, 0x90, 0x02, 0x40, 0x07, 0x1b, 0x78, 0x25, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, + 0x53, 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x82, 0x20, + 0x0c, 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, + 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, + 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, + 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, + 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, 0xe0, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, + 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, + 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, + 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, + 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, + 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, + 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, + 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, + 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, + 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, + 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, + 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, + 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, + 0x00, 0x1e, 0xca, 0xc1, 0x1d, 0xe4, 0x21, 0x1f, 0xdc, 0x01, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, + 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, + 0xe6, 0x01, 0x58, 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x87, + 0x38, 0xb0, 0x03, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x7c, + 0x98, 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, 0xc0, 0x07, 0x36, 0x58, 0x83, 0x79, 0x08, + 0x07, 0x74, 0x30, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, + 0x79, 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x87, 0x39, 0x60, 0x83, 0x35, + 0x98, 0x87, 0x79, 0x28, 0x07, 0x3a, 0x70, 0x83, 0x38, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x98, + 0x87, 0x72, 0x98, 0x03, 0x36, 0x58, 0x03, 0x7c, 0xc0, 0x83, 0x3b, 0x00, 0x08, 0x7a, 0xa8, 0x07, + 0x77, 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, + 0x1e, 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, + 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, + 0x72, 0x00, 0x36, 0x14, 0x0a, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0x88, 0x95, 0xe5, 0xff, 0xff, 0xff, + 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, 0x90, 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, + 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, + 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, + 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, + 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, + 0x01, 0x80, 0x03, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, + 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, + 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, + 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, + 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, + 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, + 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, + 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, + 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, + 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, + 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x00, 0x78, 0x28, 0x07, 0x77, 0x90, 0x87, 0x7c, + 0x70, 0x07, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, + 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, 0x0d, 0xc6, 0xa1, 0x1d, 0xde, + 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xc6, 0x01, 0x1f, 0xe2, 0xc0, 0x0e, 0xd8, 0x60, 0x0d, 0xc6, 0x01, + 0x1f, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1c, 0xf0, 0x61, 0x1e, 0xe4, 0x81, 0x0d, 0xd6, 0xa0, 0x1d, + 0xda, 0x01, 0x1f, 0xd8, 0x60, 0x0d, 0xe6, 0x21, 0x1c, 0xd0, 0xc1, 0x1c, 0xd8, 0x60, 0x0d, 0xe6, + 0x61, 0x1e, 0xca, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xe4, 0x80, 0x0d, 0xd6, 0x60, + 0x1e, 0xe6, 0xa1, 0x1c, 0xe6, 0x80, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xe8, 0xc0, 0x0d, + 0xe2, 0x80, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0x61, 0x1e, 0xca, 0x61, 0x0e, 0xd8, 0x60, 0x0d, 0xf0, + 0x01, 0x0f, 0xee, 0x00, 0x20, 0xe8, 0xa1, 0x1e, 0xdc, 0xa1, 0x1c, 0xda, 0x60, 0x1c, 0xe0, 0xa1, + 0x1e, 0x80, 0x73, 0x28, 0x07, 0x77, 0x28, 0x07, 0x79, 0x48, 0x87, 0x71, 0x00, 0x88, 0x7a, 0x70, + 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, + 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0x00, 0x27, 0xcc, 0xff, 0xff, + 0xff, 0xff, 0x0f, 0x80, 0x44, 0x84, 0x03, 0x3c, 0xc0, 0x83, 0x3c, 0xbc, 0x03, 0x3e, 0xb4, 0x81, + 0x39, 0xd4, 0x83, 0x3b, 0x8c, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, + 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, + 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, + 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, + 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, + 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, + 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, + 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, + 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, 0x43, 0x38, 0xc0, 0x03, 0x3c, 0xa4, 0x83, + 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, + 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, + 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, + 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04, 0x3d, + 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x8c, 0x03, 0x3c, 0xd4, 0x03, 0x00, 0x0f, + 0xe5, 0xe0, 0x0e, 0xf2, 0x90, 0x0f, 0xee, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xe5, + 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xe5, 0x10, 0x0e, 0xf4, 0x50, 0x0f, 0xf2, 0x50, 0x0e, 0xf3, 0x00, + 0xac, 0xc1, 0x38, 0xb4, 0xc3, 0x3b, 0xd8, 0x03, 0x1b, 0xac, 0xc1, 0x38, 0xe0, 0x43, 0x1c, 0xd8, + 0x01, 0x1b, 0xac, 0xc1, 0x38, 0xe0, 0x03, 0x1e, 0xb0, 0xc1, 0x1a, 0x98, 0x03, 0x3e, 0xcc, 0x83, + 0x3c, 0xb0, 0xc1, 0x1a, 0xb4, 0x43, 0x3b, 0xe0, 0x03, 0x1b, 0xac, 0xc1, 0x3c, 0x84, 0x03, 0x3a, + 0x98, 0x03, 0x1b, 0xac, 0xc1, 0x3c, 0xcc, 0x43, 0x39, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, 0x94, + 0x83, 0x1c, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, 0x94, 0xc3, 0x1c, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, + 0x3c, 0x94, 0x03, 0x1d, 0xb8, 0x41, 0x1c, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, 0xcc, 0x43, 0x39, + 0xcc, 0x01, 0x1b, 0xac, 0x01, 0x3e, 0xe0, 0xc1, 0x1d, 0x00, 0x04, 0x3d, 0xd4, 0x83, 0x3b, 0x94, + 0x43, 0x1b, 0x8c, 0x03, 0x3c, 0xd4, 0x03, 0x70, 0x0e, 0xe5, 0xe0, 0x0e, 0xe5, 0x20, 0x0f, 0xe9, + 0x30, 0x0e, 0x00, 0x51, 0x0f, 0xee, 0x30, 0x0f, 0xe1, 0x60, 0x0e, 0xe5, 0xd0, 0x06, 0xe6, 0x00, + 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, + 0x1b, 0x88, 0x26, 0x00, 0x48, 0x61, 0x03, 0xe1, 0x08, 0x00, 0x29, 0x6c, 0x20, 0x9e, 0x01, 0x20, + 0x85, 0x0d, 0x04, 0x44, 0x00, 0xa4, 0xb0, 0x41, 0x56, 0xa2, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, + 0x01, 0x30, 0x05, 0x40, 0x0a, 0xc2, 0x40, 0x20, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, + 0x1f, 0xda, 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, + 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x76, 0x48, 0x07, + 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x73, 0x08, 0x07, 0x76, 0x68, 0x03, 0x7b, 0x28, 0x87, 0x71, + 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x0e, + 0xe8, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, + 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, + 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, + 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, + 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, + 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, + 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, + 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, + 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, + 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, + 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0x00, 0x1e, 0xca, 0xc1, 0x1d, 0xe4, 0x21, 0x1f, 0xdc, + 0x01, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, + 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, + 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x87, 0x38, 0xb0, 0x03, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, + 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x7c, 0x98, 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, + 0xc0, 0x07, 0x36, 0x58, 0x83, 0x79, 0x08, 0x07, 0x74, 0x30, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, + 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, 0x98, 0x87, + 0x79, 0x28, 0x87, 0x39, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x07, 0x3a, 0x70, 0x83, 0x38, + 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x98, 0x87, 0x72, 0x98, 0x03, 0x36, 0x58, 0x03, 0x7c, 0xc0, + 0x83, 0x3b, 0x00, 0x08, 0x7a, 0xa8, 0x07, 0x77, 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, + 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, 0xdc, 0x61, + 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, + 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x20, 0xd2, 0x00, 0x2c, 0x00, 0x29, + 0x00, 0xd5, 0x06, 0x62, 0x2a, 0x00, 0x52, 0xd8, 0xa0, 0x50, 0x06, 0x40, 0x0a, 0xc6, 0x40, 0x05, + 0x01, 0xb4, 0x41, 0xa9, 0x0c, 0x80, 0x14, 0x8c, 0xa1, 0x0a, 0x02, 0x68, 0x03, 0x62, 0x11, 0xc0, + 0x02, 0x90, 0x02, 0x40, 0x07, 0x1b, 0x8e, 0x6b, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x70, + 0x60, 0x04, 0x40, 0x0a, 0xc1, 0x2d, 0x9c, 0xd0, 0x06, 0x24, 0x2b, 0x80, 0x05, 0x20, 0x05, 0x80, + 0x0e, 0x36, 0x1c, 0x5a, 0x01, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0x01, 0xd9, 0x08, 0x60, 0x01, + 0x48, 0x01, 0xa8, 0x36, 0x20, 0x5c, 0x01, 0x2c, 0x00, 0x29, 0x00, 0xd5, 0x06, 0xa4, 0x33, 0x80, + 0x05, 0x20, 0x05, 0x80, 0x0e, 0x36, 0x1c, 0x9e, 0x01, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0xe1, + 0xf8, 0x0e, 0x80, 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x07, 0x18, 0x20, 0x00, 0x29, 0x04, 0xb7, + 0x70, 0x42, 0x1b, 0x90, 0x30, 0x38, 0x80, 0x05, 0x20, 0x05, 0x80, 0x0e, 0x36, 0x1c, 0x62, 0x90, + 0x00, 0xa4, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0x38, 0xc6, 0x40, 0x01, 0x48, 0x21, 0xb8, 0x85, 0x13, + 0xda, 0x70, 0x90, 0xc1, 0x02, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0xe1, 0x28, 0x03, 0x06, 0x20, + 0x85, 0xe0, 0x16, 0x4e, 0x68, 0x03, 0xaf, 0x98, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x00, + 0x98, 0x02, 0xe0, 0x07, 0x00, 0x1c, 0x00, 0x7f, 0x00, 0x48, 0x40, 0x1f, 0x04, 0xb6, 0x30, 0x05, + 0x61, 0x20, 0x10, 0xe1, 0x00, 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, + 0xe0, 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, + 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3b, 0xa4, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, + 0xc3, 0x39, 0x84, 0x03, 0x3b, 0xb4, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, + 0x1b, 0xdc, 0x43, 0x3a, 0x90, 0x03, 0x3d, 0xa0, 0x03, 0x00, 0x07, 0x00, 0xe1, 0x0e, 0xef, 0xd0, + 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, + 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, + 0x3b, 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, + 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, + 0xe9, 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, + 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, + 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, + 0x43, 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, + 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, 0xeb, 0xd0, 0x06, 0xf0, 0x20, + 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, + 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, + 0x40, 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, + 0x00, 0xf0, 0x50, 0x0e, 0xee, 0x20, 0x0f, 0xf9, 0xe0, 0x0e, 0x00, 0x41, 0x0f, 0xe1, 0x20, 0x0f, + 0xe7, 0x50, 0x0e, 0xf4, 0xd0, 0x06, 0xe6, 0x50, 0x0e, 0xe1, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, + 0x30, 0x0f, 0xc0, 0x1a, 0x8c, 0x43, 0x3b, 0xbc, 0x83, 0x3d, 0xb0, 0xc1, 0x1a, 0x8c, 0x03, 0x3e, + 0xc4, 0x81, 0x1d, 0xb0, 0xc1, 0x1a, 0x8c, 0x03, 0x3e, 0xe0, 0x01, 0x1b, 0xac, 0x81, 0x39, 0xe0, + 0xc3, 0x3c, 0xc8, 0x03, 0x1b, 0xac, 0x41, 0x3b, 0xb4, 0x03, 0x3e, 0xb0, 0xc1, 0x1a, 0xcc, 0x43, + 0x38, 0xa0, 0x83, 0x39, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, 0x94, 0x03, 0x1b, 0xac, 0xc1, 0x3c, + 0xcc, 0x43, 0x39, 0xc8, 0x01, 0x1b, 0xac, 0xc1, 0x3c, 0xcc, 0x43, 0x39, 0xcc, 0x01, 0x1b, 0xac, + 0xc1, 0x3c, 0xcc, 0x43, 0x39, 0xd0, 0x81, 0x1b, 0xc4, 0x01, 0x1b, 0xac, 0xc1, 0x3c, 0xcc, 0xc3, + 0x3c, 0x94, 0xc3, 0x1c, 0xb0, 0xc1, 0x1a, 0xe0, 0x03, 0x1e, 0xdc, 0x01, 0x40, 0xd0, 0x43, 0x3d, + 0xb8, 0x43, 0x39, 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, 0xe7, 0x50, 0x0e, 0xee, 0x50, 0x0e, + 0xf2, 0x90, 0x0e, 0xe3, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, + 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, + 0x94, 0x03, 0xb0, 0x81, 0x57, 0xce, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, + 0xf0, 0x03, 0x00, 0x0e, 0x80, 0x3f, 0x00, 0x24, 0xa0, 0x0f, 0x02, 0x5b, 0x18, 0x83, 0x20, 0x0c, + 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, + 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, + 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x38, + 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, + 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, 0xe0, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, + 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, + 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, + 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, + 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, + 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, + 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, + 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, + 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, + 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, + 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, + 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0x00, + 0x1e, 0xca, 0xc1, 0x1d, 0xe4, 0x21, 0x1f, 0xdc, 0x01, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, + 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, + 0x01, 0x58, 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x87, 0x38, + 0xb0, 0x03, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x7c, 0x98, + 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, 0xc0, 0x07, 0x36, 0x58, 0x83, 0x79, 0x08, 0x07, + 0x74, 0x30, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, + 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x87, 0x39, 0x60, 0x83, 0x35, 0x98, + 0x87, 0x79, 0x28, 0x07, 0x3a, 0x70, 0x83, 0x38, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x98, 0x87, + 0x72, 0x98, 0x03, 0x36, 0x58, 0x03, 0x7c, 0xc0, 0x83, 0x3b, 0x00, 0x08, 0x7a, 0xa8, 0x07, 0x77, + 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, + 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x36, 0x18, 0x68, 0x30, 0x00, 0xa4, 0x00, 0x88, 0xc1, 0x06, 0x5d, 0x49, 0x83, 0xff, 0xff, + 0xff, 0xff, 0x1f, 0x00, 0x01, 0x30, 0x05, 0xc0, 0x0f, 0x00, 0x38, 0x00, 0x24, 0xa0, 0x0f, 0x02, + 0x5b, 0x18, 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, + 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, + 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, + 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, + 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x80, 0x03, 0x80, 0x70, + 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, + 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, + 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, + 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, + 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, + 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, + 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, + 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, + 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, + 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, + 0xe0, 0xa1, 0x1e, 0x00, 0x78, 0x28, 0x07, 0x77, 0x90, 0x87, 0x7c, 0x70, 0x07, 0x80, 0xa0, 0x87, + 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, + 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, 0x0d, 0xc6, 0xa1, 0x1d, 0xde, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, + 0xc6, 0x01, 0x1f, 0xe2, 0xc0, 0x0e, 0xd8, 0x60, 0x0d, 0xc6, 0x01, 0x1f, 0xf0, 0x80, 0x0d, 0xd6, + 0xc0, 0x1c, 0xf0, 0x61, 0x1e, 0xe4, 0x81, 0x0d, 0xd6, 0xa0, 0x1d, 0xda, 0x01, 0x1f, 0xd8, 0x60, + 0x0d, 0xe6, 0x21, 0x1c, 0xd0, 0xc1, 0x1c, 0xd8, 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xca, 0x81, 0x0d, + 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xe4, 0x80, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xe6, + 0x80, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xe8, 0xc0, 0x0d, 0xe2, 0x80, 0x0d, 0xd6, 0x60, + 0x1e, 0xe6, 0x61, 0x1e, 0xca, 0x61, 0x0e, 0xd8, 0x60, 0x0d, 0xf0, 0x01, 0x0f, 0xee, 0x00, 0x20, + 0xe8, 0xa1, 0x1e, 0xdc, 0xa1, 0x1c, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x73, 0x28, 0x07, + 0x77, 0x28, 0x07, 0x79, 0x48, 0x87, 0x71, 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, + 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, + 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0x60, 0xa8, 0x41, 0x00, 0x2c, 0x00, 0x29, 0x6c, 0x38, 0xd6, + 0x40, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x10, 0xb1, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xc0, 0x29, 0x00, 0x7e, 0x00, 0xfc, 0x01, 0x20, 0x01, 0x75, 0x00, 0xf4, 0x41, 0x60, 0x0b, 0xc0, + 0x06, 0xa2, 0x0d, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xa4, 0x0d, 0x8c, 0x1b, 0x18, 0x00, 0x29, + 0x00, 0x67, 0x60, 0x0c, 0x54, 0x10, 0x40, 0x1b, 0x98, 0x37, 0x30, 0x00, 0x52, 0x00, 0xce, 0xc0, + 0x18, 0xaa, 0x20, 0x80, 0x36, 0x10, 0x70, 0x20, 0x00, 0x67, 0xb0, 0xc1, 0x88, 0x03, 0x01, 0x20, + 0x05, 0xe0, 0x0c, 0x00, 0x49, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, + 0x88, 0x09, 0x43, 0x61, 0x1c, 0x13, 0x86, 0x40, 0x40, 0x26, 0x0c, 0x89, 0x22, 0x4c, 0x20, 0x16, + 0x61, 0x20, 0x26, 0x14, 0x4c, 0xe3, 0x3c, 0xd0, 0x04, 0x22, 0x12, 0x06, 0x62, 0x02, 0x11, 0x09, + 0x83, 0x34, 0x81, 0x58, 0x84, 0x41, 0x9a, 0x60, 0x30, 0x8d, 0xf3, 0x40, 0xd3, 0x84, 0x83, 0x69, + 0x9c, 0x07, 0x9a, 0xa8, 0x09, 0x07, 0xd3, 0x38, 0x0f, 0x34, 0x55, 0x13, 0x8a, 0x48, 0x70, 0x24, + 0x6b, 0x42, 0xc1, 0x34, 0xce, 0x85, 0x4d, 0x30, 0x22, 0xc1, 0x91, 0xb0, 0x6c, 0x82, 0xc1, 0x34, + 0xce, 0x85, 0x69, 0x13, 0x8e, 0x48, 0x70, 0xa4, 0x8d, 0xeb, 0x26, 0x24, 0x4c, 0xe3, 0x5c, 0x98, + 0xe6, 0x7d, 0x60, 0x30, 0x01, 0x89, 0x04, 0x47, 0xda, 0x38, 0x2f, 0x0c, 0x26, 0x28, 0x4c, 0xe3, + 0x5c, 0x98, 0xe6, 0x7d, 0x60, 0x20, 0x06, 0x13, 0x0e, 0xa6, 0x71, 0x2e, 0x4c, 0xf3, 0x26, 0x30, + 0x4c, 0xe3, 0x5c, 0x98, 0xe6, 0x7d, 0x60, 0x20, 0x06, 0x63, 0x40, 0x06, 0x13, 0x1a, 0xa6, 0x71, + 0x2e, 0x4c, 0xf3, 0x3e, 0x30, 0x10, 0x83, 0x31, 0x20, 0x83, 0x32, 0x98, 0x40, 0x30, 0x8d, 0xf3, + 0x4c, 0x30, 0x22, 0xc1, 0x91, 0xa0, 0x6c, 0x42, 0x61, 0x06, 0x82, 0xf3, 0x58, 0x13, 0x08, 0x33, + 0x10, 0x1c, 0x62, 0x82, 0xb1, 0x08, 0xc3, 0x05, 0x65, 0x13, 0x06, 0xa6, 0x71, 0x26, 0x14, 0x8b, + 0x30, 0x3c, 0xd6, 0x04, 0xe2, 0x0c, 0x04, 0x47, 0x9a, 0x40, 0x9c, 0x81, 0xe0, 0x3c, 0x13, 0x88, + 0x33, 0x10, 0x1c, 0x34, 0x98, 0x30, 0xa4, 0x81, 0x1a, 0x38, 0x13, 0x88, 0x34, 0x50, 0xd4, 0x60, + 0x0d, 0x26, 0x10, 0x69, 0xa0, 0x06, 0xce, 0x33, 0xa1, 0x48, 0x03, 0x45, 0x0d, 0xd6, 0xe0, 0x9a, + 0x10, 0xb0, 0xc1, 0x84, 0xa2, 0x0d, 0x1a, 0xe7, 0x81, 0x26, 0x18, 0x6d, 0xd0, 0x38, 0x0f, 0x34, + 0x4d, 0x38, 0xda, 0xa0, 0x71, 0x1e, 0x68, 0x72, 0x83, 0x09, 0x47, 0x1b, 0x34, 0xce, 0x03, 0x4d, + 0x6f, 0x30, 0xa1, 0x68, 0x83, 0xc6, 0xb9, 0xb0, 0x09, 0x46, 0x1b, 0x34, 0xce, 0x85, 0x69, 0x13, + 0x92, 0x36, 0x68, 0x9c, 0x0b, 0xd3, 0xbc, 0x0f, 0x0c, 0x26, 0x28, 0x6d, 0xd0, 0x38, 0x17, 0xa6, + 0x79, 0x1f, 0x18, 0x88, 0xc1, 0x84, 0xa3, 0x0d, 0x1a, 0xe7, 0xc2, 0x34, 0x6f, 0x02, 0xd3, 0x06, + 0x8d, 0x73, 0x61, 0x9a, 0xf7, 0x81, 0x81, 0x18, 0x8c, 0x01, 0x19, 0x4c, 0x68, 0xda, 0xa0, 0x71, + 0x2e, 0x4c, 0xf3, 0x3e, 0x30, 0x10, 0x83, 0x31, 0x20, 0x83, 0x32, 0x98, 0x40, 0xb4, 0x41, 0xe3, + 0x3c, 0x13, 0x84, 0x36, 0x80, 0x83, 0x09, 0x43, 0x1b, 0x34, 0x71, 0x00, 0x13, 0x36, 0x7c, 0xc0, + 0x03, 0x3b, 0xf8, 0x05, 0x3b, 0xa0, 0x83, 0x36, 0xa8, 0x07, 0x77, 0x58, 0x07, 0x77, 0x78, 0x87, + 0x7b, 0x70, 0x87, 0x36, 0x68, 0x87, 0x70, 0x18, 0x87, 0x77, 0x98, 0x07, 0x7c, 0x88, 0x83, 0x3a, + 0x70, 0x03, 0x38, 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x0a, 0xe5, 0xd0, 0x06, 0xed, 0xa0, 0x07, 0xef, + 0xd0, 0x06, 0xf0, 0x20, 0x07, 0x77, 0x00, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x00, 0x0f, 0x72, 0x70, 0x07, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, + 0x72, 0xd0, 0x06, 0xf0, 0x20, 0x07, 0x77, 0x20, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, + 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, + 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, + 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, + 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x30, 0x0b, 0x71, 0x20, 0x07, 0x78, 0xa0, + 0x11, 0xc2, 0xe4, 0x70, 0x1f, 0x5e, 0xd5, 0x79, 0x59, 0x3e, 0x7f, 0xb5, 0xd3, 0xeb, 0xf2, 0x6b, + 0xc8, 0x4e, 0xbf, 0xdd, 0x50, 0xf9, 0x5b, 0x5d, 0x1e, 0xd3, 0xe7, 0x2f, 0x66, 0x3d, 0x3d, 0x0f, + 0x0f, 0xdf, 0x6d, 0x78, 0x9d, 0x5e, 0x7e, 0xcd, 0xe5, 0xe3, 0x97, 0x38, 0x3c, 0x5e, 0x97, 0xdd, + 0xe4, 0xf9, 0xcb, 0x1c, 0x66, 0xb3, 0xc5, 0xe1, 0xf1, 0xfa, 0x65, 0x0e, 0xb3, 0xd9, 0xe2, 0xf0, + 0x78, 0xfd, 0x15, 0xd7, 0xd3, 0x6c, 0x7a, 0xda, 0xfd, 0x32, 0x87, 0xd9, 0x6c, 0x71, 0x78, 0xbc, + 0xfe, 0x92, 0xcb, 0xf6, 0xf4, 0xb8, 0xfc, 0x0d, 0xc3, 0xd3, 0xdf, 0xbb, 0x3c, 0x0c, 0x87, 0x97, + 0xe5, 0x73, 0x17, 0x39, 0x2c, 0xbf, 0xa7, 0xdd, 0x2e, 0x3c, 0xce, 0xf6, 0xb5, 0xd1, 0x5c, 0x6c, + 0xf6, 0x90, 0x0a, 0xc8, 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0x0c, 0x18, 0x52, 0x65, 0x16, 0x01, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x90, 0x01, 0x43, 0xaa, 0x37, 0xa0, 0x08, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, 0x8d, 0x42, 0x26, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x17, 0x32, 0x01, 0x00, 0x92, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xf5, 0x90, 0x09, + 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x72, + 0x89, 0x4c, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, + 0x21, 0xd5, 0x59, 0x64, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0x40, 0x03, 0x2b, 0x00, 0x20, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x85, 0x1b, 0x58, 0x01, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xf8, 0xc0, 0x0a, 0x00, 0x48, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xa1, 0x08, 0x27, 0x00, 0x40, + 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x4c, 0x38, + 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, + 0xa0, 0xc2, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, + 0x30, 0xa4, 0xe2, 0x15, 0x4e, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0xc8, 0x80, 0x21, 0x15, 0xbe, 0x70, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x68, 0x86, 0x13, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x05, 0x37, 0xda, 0x01, 0x00, 0x09, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xd5, 0xd1, 0x0e, 0x00, + 0x48, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x91, 0x8f, + 0x76, 0x00, 0x40, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, + 0xca, 0x7f, 0xac, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, + 0x03, 0x86, 0x54, 0x34, 0x64, 0x15, 0x00, 0x90, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x19, 0x30, 0xa4, 0x52, 0x23, 0xab, 0x00, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x28, 0x61, 0x02, 0x00, 0x24, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x70, 0xa9, 0x53, 0x80, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x55, 0x4f, 0x99, 0x00, + 0x00, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x97, + 0xf2, 0x14, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, + 0x52, 0xb1, 0x95, 0x26, 0x00, 0x40, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x64, 0xc0, 0x90, 0xca, 0xb4, 0xbe, 0x06, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xe5, 0xb5, 0x09, 0x00, 0x90, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x02, 0x31, 0x30, 0x70, 0x80, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x05, 0x66, 0x9a, 0x00, 0x00, + 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x3d, 0xfb, + 0x1e, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, + 0xe5, 0x5a, 0x26, 0x00, 0x40, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0x4a, 0xde, 0xbc, 0x07, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x03, 0x86, 0x54, 0x30, 0x87, 0x09, 0x00, 0x90, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x42, 0xbb, 0x0e, 0x02, 0x02, 0x40, 0x01, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x55, 0xe9, 0x65, 0x02, 0x00, 0x24, 0x05, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x7c, 0xcf, 0x83, 0x80, + 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0xc5, 0x7f, + 0x9a, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0x2a, 0x1b, 0x0c, 0xbe, 0x08, 0x08, 0x00, 0x05, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x03, 0x86, 0x54, 0x75, 0x18, 0x6c, 0x02, 0x00, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x60, 0x31, 0x00, 0x03, 0x09, 0x08, 0x00, 0x05, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xf0, 0x18, 0x68, 0x02, 0x00, + 0x24, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x54, 0x32, + 0xf8, 0x26, 0x20, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, + 0x52, 0xa5, 0x65, 0x90, 0x09, 0x00, 0x90, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0x12, 0xcd, 0xc0, 0x9b, 0x80, 0x00, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x05, 0x9e, 0x01, 0x55, 0x00, 0x40, 0x32, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x3e, 0x03, 0xaa, 0x00, 0x80, + 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x8a, 0x06, + 0x9f, 0x05, 0x00, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0xaa, 0x33, 0x0d, 0xc8, 0xe0, 0x02, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc8, 0x80, 0x21, 0xd5, 0xaa, 0x06, 0x65, 0x80, 0x01, 0x40, 0xf2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x5e, 0x03, 0x35, 0xc8, 0x80, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0xa5, 0xb3, 0x01, 0x19, + 0x68, 0x00, 0x90, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, + 0xf2, 0xdb, 0x20, 0x0d, 0x36, 0x20, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x0c, 0x18, 0x52, 0x9d, 0x6f, 0xa0, 0x06, 0x1c, 0x00, 0x24, 0x13, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x62, 0x38, 0x78, 0x83, 0x0e, 0x08, 0x00, 0x0a, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xa0, 0x1c, 0x7c, 0x16, + 0x00, 0x24, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x7e, + 0x39, 0x20, 0x83, 0x0c, 0x08, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x03, 0x86, 0x54, 0x23, 0x1d, 0x94, 0x01, 0x06, 0x00, 0xc9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xb4, 0x0e, 0xd4, 0xc0, 0x03, 0x02, 0xa0, 0x02, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x6c, 0x07, 0x64, 0xa0, 0x01, + 0x40, 0x12, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xbe, + 0x83, 0x34, 0xf8, 0x80, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, + 0x60, 0x48, 0xf5, 0xe3, 0x81, 0x1a, 0x70, 0x00, 0x90, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x4a, 0xf5, 0xe0, 0x0d, 0xc0, 0x00, 0x08, 0x80, 0x0b, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xf8, 0x1e, 0x74, 0x16, 0x00, + 0x24, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x6a, 0x3e, + 0x10, 0x83, 0x30, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, + 0x80, 0x21, 0xd5, 0xdd, 0x07, 0x9d, 0x05, 0x00, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xda, 0x0f, 0xc4, 0x40, 0x0c, 0x80, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x65, 0xff, 0xc1, 0x18, 0x8c, 0x01, + 0x00, 0x24, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x72, + 0x50, 0x40, 0x03, 0x31, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc8, 0x80, 0x21, 0x55, 0x28, 0x0a, 0x63, 0x30, 0x06, 0x00, 0x90, 0x64, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x22, 0x47, 0x01, 0x0d, 0xc8, 0x00, 0x08, 0x00, + 0x05, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0x2c, 0x29, 0x8c, + 0x41, 0x19, 0x00, 0x40, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, + 0x90, 0xea, 0x2d, 0x85, 0x31, 0x28, 0x03, 0x00, 0x48, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc9, 0xa6, 0xd0, 0x99, 0x01, 0x00, 0x24, 0x1b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xde, 0x53, 0xe8, 0xcc, 0x00, 0x00, + 0x92, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x2c, 0x2a, + 0x80, 0xc1, 0x19, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0x8a, 0x4d, 0x05, 0xaf, 0x00, 0x02, 0xa0, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xaa, 0x0a, 0xdc, 0x19, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0x5c, 0x05, 0xad, 0x00, 0x02, 0xa0, + 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xc8, 0x0a, 0x19, + 0x1a, 0x00, 0x40, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, + 0x2a, 0x67, 0x85, 0x0a, 0x0d, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0xe5, 0xb6, 0x82, 0x67, 0x06, 0x00, 0x90, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x62, 0x5d, 0x81, 0x33, 0x03, 0x00, 0x48, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xa1, 0xaf, 0x40, 0x06, + 0x66, 0x00, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0x2a, 0x16, 0x16, 0xc4, 0xc0, 0x0c, 0x00, 0x20, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xc6, 0x02, 0x1a, 0xa4, 0x01, 0x00, 0x24, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x5b, 0x16, 0xc0, 0x20, 0x0d, + 0x00, 0x20, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0xd9, 0xb3, 0x00, 0x06, 0x6b, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xa6, 0x85, 0x8c, 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xbd, 0xb5, 0xa0, 0xb1, 0x01, 0x00, + 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xd4, + 0x16, 0xb4, 0x36, 0x00, 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x32, 0x60, 0x48, 0x35, 0xde, 0xc2, 0xd6, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xfc, 0x5b, 0xd8, 0xdc, 0x00, 0x00, 0x92, 0x31, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x8e, 0x0b, 0x61, + 0xf0, 0x06, 0x00, 0x90, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, + 0x0c, 0xa9, 0xf4, 0x5c, 0x10, 0x83, 0x37, 0x00, 0x80, 0x84, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xc5, 0xeb, 0x82, 0x18, 0xc0, 0x01, 0x00, 0x24, 0x64, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x7f, 0x17, 0xc6, + 0x00, 0x0e, 0x00, 0x20, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0x85, 0xbd, 0x30, 0x06, 0x71, 0x00, 0x00, 0x49, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0xf4, 0x05, 0x8d, 0x0d, 0x00, 0x20, 0x11, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf9, 0xbe, 0xb0, 0xb1, + 0x01, 0x00, 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0xaa, 0xfc, 0x17, 0xb6, 0x36, 0x00, 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0x45, 0x83, 0x03, 0xd7, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xe0, 0x70, 0xe0, 0xdc, 0x00, 0x00, + 0x92, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x2b, + 0x0e, 0x1a, 0x1b, 0x00, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x19, 0x30, 0xa4, 0x32, 0xc7, 0x61, 0x63, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x21, 0x39, 0x6c, 0x6d, 0x00, 0x00, 0x89, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x27, 0x07, 0xae, + 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, + 0x52, 0xe1, 0xe5, 0xc0, 0xb9, 0x01, 0x00, 0x24, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xda, 0x1c, 0x34, 0x36, 0x00, 0x80, 0x44, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0x9e, 0xc3, 0xc6, 0x06, 0x00, + 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x52, + 0x74, 0xd8, 0xda, 0x00, 0x00, 0x12, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0x15, 0x99, 0x0e, 0x5c, 0x1b, 0x00, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x02, 0xd5, 0x21, 0x63, 0x03, 0x00, 0x48, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xb9, 0x3a, 0x68, + 0x6c, 0x00, 0x00, 0x89, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, + 0x90, 0x6a, 0x5e, 0x07, 0xad, 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xb5, 0xec, 0xb0, 0xb5, 0x01, 0x00, 0x24, 0x62, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xb4, 0x1d, 0x34, 0x36, 0x00, + 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x25, + 0xba, 0xc3, 0xc6, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0x7a, 0x77, 0xd8, 0xda, 0x00, 0x00, 0x12, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xfe, 0x0e, 0x5c, 0x1b, 0x00, 0x40, 0x22, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xa2, 0xe1, 0x41, + 0x63, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0x6e, 0x3c, 0x6c, 0x6c, 0x00, 0x00, 0x89, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x2a, 0x95, 0x87, 0xad, 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x91, 0xf3, 0xc0, 0xb5, 0x01, + 0x00, 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, + 0x90, 0x1e, 0x38, 0x37, 0x00, 0x80, 0x64, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0xc5, 0xd3, 0x83, 0xc6, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xec, 0x7a, 0xd8, 0xd8, 0x00, 0x00, 0x12, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x6c, 0x0f, + 0x5b, 0x1b, 0x00, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, + 0x30, 0xa4, 0x62, 0xef, 0x81, 0x6b, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x28, 0x3e, 0x70, 0x6e, 0x00, 0x00, 0xc9, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0xcc, 0x87, 0x46, 0x0e, + 0x80, 0x00, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, + 0xc5, 0xf9, 0xd0, 0xd0, 0x01, 0x10, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x01, 0x43, 0x2a, 0x3f, 0x1f, 0x3a, 0x3b, 0x00, 0x02, 0xc0, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0xb5, 0xeb, 0xc3, 0x83, 0x07, 0x40, 0x00, + 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x48, 0x6c, 0x10, 0x28, + 0xaa, 0x5c, 0x01, 0x00, 0x90, 0x05, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x20, + 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x4a, 0x94, 0x40, 0x21, 0x14, + 0x44, 0x11, 0x94, 0x03, 0x0d, 0x46, 0x00, 0x0a, 0xa1, 0x20, 0x0a, 0xa4, 0x60, 0x0a, 0xa3, 0x80, + 0x0a, 0xa5, 0x70, 0x0a, 0xac, 0x10, 0x03, 0x0a, 0x32, 0xa0, 0xc4, 0x8a, 0xac, 0xd0, 0x0a, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, + 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, + 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, + 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, + 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, + 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, + 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, + 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, + 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, + 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, + 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, + 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, + 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, + 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, + 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, + 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, + 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, + 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, + 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, + 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, + 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, + 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, + 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, + 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, + 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, + 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, + 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, + 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, + 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, + 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, + 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, + 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, + 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xcb, 0xe7, 0x0e, 0xef, 0x30, 0x0f, 0xe1, 0xe0, 0x0e, + 0xe9, 0x40, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x30, 0xc3, 0x01, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, + 0x87, 0x5f, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, 0xa0, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x98, 0x81, + 0x84, 0x41, 0x39, 0xe0, 0xc3, 0x38, 0xb0, 0x43, 0x3d, 0x90, 0x43, 0x39, 0xcc, 0x40, 0xc4, 0xa0, + 0x1d, 0xca, 0xa1, 0x1d, 0xe0, 0x41, 0x1e, 0xde, 0xc1, 0x1c, 0x66, 0x24, 0x63, 0x30, 0x0e, 0xe1, + 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0xe9, 0x40, 0x0f, 0xe5, 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x07, + 0x73, 0x48, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x98, 0xb1, 0x94, 0x01, 0x3c, 0x8c, + 0xc3, 0x3c, 0x94, 0xc3, 0x38, 0xd0, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0xcc, 0xc3, 0x8c, 0xc5, 0x0c, + 0x48, 0x21, 0x15, 0x42, 0x61, 0x1e, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0x52, 0x81, 0x14, 0x66, + 0x4c, 0x67, 0x30, 0x0e, 0xef, 0x20, 0x0f, 0xef, 0xe0, 0x06, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x0f, + 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0x30, 0xa3, 0x40, + 0x83, 0x76, 0x68, 0x07, 0x79, 0x08, 0x87, 0x19, 0x4e, 0x1a, 0xa0, 0x43, 0x39, 0x84, 0x03, 0x3c, + 0x84, 0x03, 0x3b, 0xb0, 0xc3, 0x3b, 0x8c, 0xc3, 0x3c, 0xa4, 0x03, 0x3d, 0x94, 0x03, 0x00, 0x00, + 0x79, 0x20, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x72, 0x1e, 0x48, 0x20, 0x43, 0x88, 0x0c, 0x19, + 0x09, 0x72, 0x32, 0x48, 0x20, 0x23, 0x81, 0x8c, 0x91, 0x91, 0xd1, 0x44, 0xa0, 0x10, 0x28, 0x64, + 0x3c, 0x31, 0x32, 0x42, 0x8e, 0x90, 0x21, 0xa3, 0x98, 0x51, 0xba, 0x02, 0x4a, 0x72, 0x74, 0xcf, + 0x53, 0x2c, 0xd7, 0x92, 0x28, 0x83, 0x72, 0x49, 0x4b, 0x21, 0x39, 0x93, 0xe3, 0x10, 0x13, 0x00, + 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x49, 0x43, 0x20, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x75, 0x77, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x62, 0x72, + 0x65, 0x77, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x20, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, + 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, + 0x20, 0x54, 0x42, 0x41, 0x41, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x36, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x64, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x61, 0x6e, 0x79, 0x20, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x6e, 0x67, + 0x5f, 0x5a, 0x54, 0x53, 0x35, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x69, 0x6e, 0x74, 0x5f, 0x5a, 0x54, + 0x53, 0x35, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x42, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x56, 0x69, 0x65, 0x77, 0x5f, 0x5a, + 0x54, 0x53, 0x31, 0x32, 0x42, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x6f, 0x74, + 0x5f, 0x5a, 0x54, 0x53, 0x36, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x32, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x48, + 0x69, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, + 0x5f, 0x5a, 0x54, 0x53, 0x4e, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x55, + 0x74, 0x5f, 0x45, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x48, 0x69, + 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x33, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, 0x00, 0xc6, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x82, 0x90, 0xa0, 0xc4, 0x08, 0x42, 0x92, 0x12, 0x23, 0x08, 0x89, 0x4a, 0x8c, 0x20, 0x24, + 0x2b, 0x31, 0x82, 0x90, 0xb0, 0xc4, 0x08, 0xc2, 0xd0, 0x12, 0x23, 0x08, 0x83, 0x4b, 0x8c, 0x20, + 0x0c, 0x2f, 0x31, 0x82, 0x30, 0xc0, 0xc4, 0x08, 0xc2, 0x10, 0x13, 0x23, 0x08, 0x83, 0x4c, 0x8c, + 0x20, 0x0c, 0x33, 0x31, 0x82, 0x30, 0xd0, 0xc4, 0x08, 0xc2, 0x50, 0x13, 0x23, 0x08, 0x83, 0x4d, + 0x8c, 0x20, 0x0c, 0x37, 0x31, 0x82, 0x30, 0xe0, 0xc4, 0x08, 0xc2, 0x90, 0x13, 0x23, 0x08, 0x83, + 0x4e, 0x8c, 0x20, 0x0c, 0x3b, 0x31, 0x82, 0x30, 0xf0, 0xc4, 0x0c, 0x83, 0x16, 0x6c, 0x33, 0x0c, + 0x9c, 0xd0, 0xcd, 0x30, 0x78, 0x43, 0x37, 0x43, 0x40, 0xcc, 0x10, 0x18, 0x33, 0x0c, 0xc5, 0x1c, + 0x7c, 0x33, 0x0c, 0x74, 0x40, 0x07, 0xdf, 0x0c, 0xc3, 0x41, 0x07, 0xdf, 0x0c, 0x83, 0x1d, 0xd8, + 0xc1, 0x37, 0xc3, 0x81, 0xd8, 0xc1, 0x67, 0x07, 0x60, 0x60, 0x07, 0x61, 0x30, 0xc3, 0x80, 0x07, + 0x76, 0x10, 0x06, 0x33, 0x0c, 0x0a, 0x1d, 0x7c, 0x33, 0x0c, 0x0b, 0x1d, 0x7c, 0x33, 0x14, 0x89, + 0x1e, 0x7c, 0x7b, 0x10, 0x06, 0x33, 0x0c, 0x7c, 0xa0, 0x07, 0xdf, 0x0c, 0x03, 0x1f, 0xec, 0x41, + 0x18, 0xcc, 0x30, 0x34, 0x74, 0xf0, 0xcd, 0x50, 0x30, 0x7f, 0xf0, 0xfd, 0x01, 0x18, 0xcc, 0x30, + 0x80, 0xc2, 0x1f, 0x7c, 0x33, 0x0c, 0xa0, 0xf0, 0x07, 0x60, 0x30, 0xc3, 0xe1, 0xfc, 0xc1, 0xf7, + 0x07, 0x60, 0xf0, 0x07, 0x61, 0x30, 0xc3, 0x30, 0x0a, 0x7f, 0xf0, 0xcd, 0x30, 0x8c, 0xc2, 0x1f, + 0x80, 0xc1, 0x0c, 0xc3, 0x28, 0xfc, 0x41, 0x18, 0xcc, 0x30, 0xfc, 0xc1, 0x1f, 0x7c, 0x33, 0x14, + 0x8f, 0x1e, 0x7c, 0x7b, 0x10, 0x06, 0x33, 0x0c, 0xa8, 0xa0, 0x07, 0xdf, 0x0c, 0x09, 0xa4, 0x07, + 0xdf, 0x1e, 0x84, 0x81, 0x1e, 0x88, 0x81, 0x1e, 0x8c, 0xc1, 0x0c, 0x83, 0x2a, 0xe8, 0x81, 0x18, + 0xcc, 0x30, 0xa8, 0xc2, 0x1e, 0x84, 0xc1, 0x0c, 0x45, 0x64, 0x07, 0x9f, 0x1d, 0x80, 0xc1, 0x0c, + 0x43, 0x2b, 0xd8, 0xc1, 0x37, 0xc3, 0xd0, 0x0a, 0x76, 0x00, 0x06, 0x33, 0x0c, 0xaa, 0xa0, 0x07, + 0x63, 0x30, 0xc3, 0x80, 0x07, 0x76, 0xf0, 0xcd, 0x30, 0xe0, 0x81, 0x1d, 0x80, 0xc1, 0x0c, 0x83, + 0x44, 0x07, 0xdf, 0x0c, 0xc3, 0x2c, 0xcc, 0xc2, 0x37, 0x43, 0x52, 0xd9, 0xc1, 0xf7, 0x07, 0x60, + 0xf0, 0x07, 0x61, 0xf0, 0x07, 0x64, 0x30, 0xc3, 0x41, 0xd1, 0xc1, 0x47, 0x07, 0x62, 0x50, 0x0b, + 0x65, 0x30, 0x43, 0x64, 0xd9, 0xc1, 0x67, 0x07, 0x60, 0x60, 0x07, 0x61, 0x60, 0x07, 0x64, 0x60, + 0x07, 0x62, 0xf0, 0x07, 0x66, 0xf0, 0x07, 0x63, 0x40, 0x07, 0x67, 0x30, 0x43, 0x31, 0xd9, 0xc2, + 0x77, 0x0b, 0x68, 0x30, 0xc3, 0x80, 0x0b, 0x7f, 0x90, 0x06, 0x33, 0x0c, 0xb8, 0xf0, 0x07, 0x6a, + 0x30, 0x43, 0x71, 0xe9, 0xc1, 0xa7, 0x07, 0x61, 0x30, 0xc3, 0xb0, 0x0b, 0x7a, 0xf0, 0xcd, 0x30, + 0xe0, 0x82, 0x1d, 0x94, 0xc1, 0x0c, 0x83, 0x2d, 0xd8, 0x41, 0x19, 0xcc, 0x30, 0x60, 0x74, 0xf0, + 0xcd, 0x30, 0xfc, 0xc2, 0x2f, 0x7c, 0x33, 0x0c, 0xbb, 0xa0, 0x07, 0x61, 0x30, 0x43, 0x93, 0xd1, + 0xc1, 0x47, 0x07, 0x68, 0xf0, 0x0b, 0x6b, 0xf0, 0x0b, 0x6c, 0xf0, 0x07, 0x6d, 0xa0, 0x07, 0x6e, + 0x30, 0xc3, 0x20, 0x0e, 0x7f, 0xd0, 0x06, 0x33, 0x0c, 0xe2, 0x40, 0x07, 0x68, 0x30, 0xc3, 0x20, + 0x0e, 0xbf, 0xc0, 0x06, 0xc7, 0x0a, 0x80, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, + 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, + 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x65, 0xa1, 0x81, 0x1b, 0xa0, + 0x81, 0x1b, 0xe0, 0x02, 0x1d, 0xa0, 0x01, 0x1a, 0x80, 0x82, 0x1b, 0xd0, 0x01, 0x1a, 0x80, 0x82, + 0x1b, 0xd0, 0x01, 0x2e, 0xb8, 0x01, 0x1d, 0xd0, 0x81, 0x1b, 0x80, 0x82, 0x1b, 0xc0, 0x03, 0x1d, + 0xd0, 0x01, 0x28, 0xb8, 0x01, 0x1d, 0xd0, 0x81, 0x1b, 0xd0, 0x01, 0x1a, 0xb8, 0x01, 0x3c, 0xe0, + 0x02, 0x6c, 0x80, 0x02, 0x1d, 0xd0, 0x01, 0x28, 0xb8, 0x01, 0x1d, 0xd0, 0x01, 0x1a, 0xb8, 0x01, + 0x1d, 0x80, 0x05, 0x1d, 0xd0, 0x81, 0x8c, 0x04, 0x26, 0x28, 0x27, 0x36, 0x36, 0xbb, 0x36, 0x17, + 0xb6, 0x34, 0xb7, 0xb5, 0x32, 0x39, 0x97, 0x37, 0x38, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x51, 0x80, + 0x8c, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xda, 0xde, 0xc8, 0xea, 0xd8, 0xca, 0x5c, 0xcc, 0xd8, 0xc2, + 0xce, 0xe6, 0x46, 0x19, 0xdc, 0xe0, 0x0d, 0xe0, 0x20, 0x15, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, + 0xb2, 0x32, 0x37, 0xba, 0x51, 0x82, 0x38, 0x00, 0xa9, 0x18, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, + 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, + 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, + 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, + 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, 0x07, + 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, + 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, + 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, 0xc2, + 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, + 0x0b, 0x88, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x05, 0xcf, 0x38, 0xbc, 0x83, 0x3b, 0xd8, 0x43, + 0x39, 0xc8, 0xc3, 0x39, 0x94, 0x83, 0x3b, 0x8c, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xc8, 0x03, 0x3b, + 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, + 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, + 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x08, 0xc0, 0x58, + 0x42, 0x10, 0x00, 0x00, 0x64, 0x2c, 0x88, 0x4f, 0x27, 0x1c, 0x15, 0x05, 0x0b, 0x42, 0xc8, 0x82, + 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, + 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0xa0, 0x83, 0x2d, 0xc3, 0x10, 0xd0, 0xc1, 0x96, 0x21, 0x09, 0xe8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x08, 0xc0, 0x58, + 0x42, 0x10, 0x00, 0x00, 0x64, 0x2c, 0x88, 0x4f, 0x27, 0x1c, 0x15, 0x05, 0x0b, 0x42, 0xc8, 0x82, + 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, + 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x3e, 0x9d, 0xe0, 0x74, 0x3e, 0x9d, 0xe0, + 0x78, 0x14, 0x2d, 0x08, 0x2d, 0x0b, 0x42, 0xc4, 0x82, 0x0c, 0x32, 0x04, 0x11, 0x84, 0x01, 0x21, + 0xfe, 0x83, 0x0c, 0xc3, 0x14, 0x61, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x49, + 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa0, + 0x83, 0x2d, 0xc3, 0x10, 0xd0, 0xc1, 0x96, 0x21, 0x09, 0xe8, 0x60, 0xcb, 0xd0, 0x04, 0x74, 0xb0, + 0x65, 0x70, 0x02, 0x3a, 0xd8, 0x32, 0x50, 0x01, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x8a, 0x4f, 0x27, 0x20, 0x15, 0x05, + 0xb5, 0xe2, 0xd3, 0x09, 0x0a, 0x45, 0x41, 0xad, 0xd0, 0x52, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, + 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, + 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x53, 0x50, 0x00, 0x1b, + 0x10, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa0, 0x83, 0x2d, 0x83, 0x13, + 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, + 0x74, 0xd4, 0x8a, 0x4f, 0x27, 0x20, 0x15, 0x05, 0xb5, 0xe2, 0xd3, 0x09, 0x0a, 0x45, 0x41, 0xad, + 0xd0, 0x52, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, + 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, + 0xf8, 0x0f, 0x1b, 0x10, 0x53, 0x50, 0x00, 0x3e, 0x9d, 0x40, 0x89, 0x81, 0x4f, 0x27, 0x50, 0x63, + 0x40, 0x57, 0xad, 0x10, 0x54, 0x2b, 0xf4, 0xd4, 0x0a, 0x15, 0xb5, 0x32, 0xc8, 0x10, 0x60, 0x17, + 0x06, 0x85, 0xf8, 0x0f, 0x32, 0x0c, 0x1a, 0x86, 0x81, 0x21, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, + 0x60, 0x74, 0x1a, 0x06, 0x88, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xd1, 0x04, 0x05, 0xe0, + 0xd3, 0x09, 0x62, 0xd0, 0x06, 0x3e, 0x9d, 0x20, 0x06, 0x6e, 0x40, 0x65, 0x50, 0x2b, 0xe4, 0xd5, + 0x0a, 0x75, 0xb5, 0x42, 0x45, 0xad, 0x0c, 0x32, 0x04, 0x66, 0x50, 0x06, 0x18, 0x14, 0xe2, 0x3f, + 0xc8, 0x30, 0xa0, 0x81, 0x19, 0x60, 0x60, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x18, 0x6b, + 0x80, 0x06, 0x18, 0x20, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x44, 0x13, 0x14, 0xc0, 0x06, + 0xc4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa0, 0x83, 0x2d, 0x83, 0x13, + 0xd0, 0xc1, 0x96, 0x61, 0x0a, 0xe8, 0x60, 0xcb, 0xd0, 0x05, 0x74, 0xb0, 0x65, 0x10, 0x83, 0x80, + 0x0e, 0xb6, 0x0c, 0x6c, 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd4, 0x8a, 0x4f, 0x27, 0x24, 0x16, 0x05, + 0xb5, 0xe2, 0xd3, 0x09, 0x4b, 0x45, 0x41, 0xad, 0xf8, 0x74, 0x42, 0x43, 0x51, 0x50, 0x2b, 0xe4, + 0xd4, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, + 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x59, 0x50, + 0x00, 0x1b, 0x10, 0x03, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa0, 0x83, 0x2d, 0xc3, 0x11, + 0xd0, 0xc1, 0x96, 0x61, 0x0a, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd4, 0x8a, 0x4f, 0x27, 0x24, 0x16, 0x05, + 0xb5, 0xe2, 0xd3, 0x09, 0x4b, 0x45, 0x41, 0xad, 0xf8, 0x74, 0x42, 0x43, 0x51, 0x50, 0x2b, 0xe4, + 0xd4, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, + 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x59, 0x50, + 0x00, 0x3e, 0x9d, 0xa0, 0xa1, 0x81, 0x4f, 0x27, 0x68, 0x69, 0x40, 0x5d, 0xad, 0x50, 0x55, 0x2b, + 0x44, 0xd5, 0x0a, 0x4d, 0xb5, 0x42, 0x46, 0xad, 0x0c, 0x32, 0x04, 0x9f, 0x87, 0x81, 0x21, 0xfe, + 0x83, 0x0c, 0x43, 0x18, 0x7c, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x06, 0x19, + 0x84, 0x01, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x72, 0x06, 0x63, 0x80, 0xc1, + 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, 0x74, 0x02, 0x1b, 0xdc, + 0x81, 0x4f, 0x27, 0xb0, 0x01, 0x1e, 0xd0, 0x1b, 0xd4, 0x0a, 0x9d, 0x41, 0xad, 0x90, 0x19, 0xd4, + 0x0a, 0x95, 0x41, 0xad, 0x90, 0x51, 0x2b, 0x83, 0x0c, 0x41, 0x1c, 0xc0, 0x01, 0x06, 0x86, 0xf8, + 0x0f, 0x32, 0x0c, 0x73, 0x10, 0x07, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x86, + 0x1d, 0xcc, 0x01, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x92, 0x07, 0x75, 0x80, + 0xc1, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, 0x74, 0x82, 0x1f, + 0x98, 0x82, 0x4f, 0x27, 0xf8, 0xc1, 0x29, 0x50, 0x28, 0xd4, 0x0a, 0xe5, 0x41, 0xad, 0x10, 0x1e, + 0xd4, 0x0a, 0xdd, 0x41, 0xad, 0x90, 0x51, 0x2b, 0x83, 0x0c, 0xc1, 0x28, 0x88, 0x02, 0x06, 0x86, + 0xf8, 0x0f, 0x32, 0x0c, 0xa5, 0x30, 0x0a, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, + 0x06, 0x2a, 0x94, 0x02, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0xb2, 0x0a, 0xa7, + 0x80, 0xc1, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0x6c, 0x40, 0x0c, + 0x11, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa0, 0x83, 0x2d, 0xc3, 0x11, 0xd0, 0xc1, 0x96, 0x61, + 0x0a, 0xe8, 0x60, 0xcb, 0x90, 0x05, 0x74, 0xb0, 0x65, 0xd0, 0x02, 0x3a, 0xd8, 0x32, 0x98, 0x41, + 0x40, 0x07, 0x5b, 0x06, 0x36, 0x08, 0xe8, 0x60, 0xcb, 0xd0, 0x06, 0x01, 0x1d, 0x6c, 0x19, 0xf2, + 0x20, 0xa0, 0x83, 0x2d, 0xc3, 0x1f, 0x04, 0x74, 0xb0, 0x65, 0x00, 0x85, 0x80, 0x0e, 0xb6, 0x0c, + 0xac, 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xb4, 0x1b, 0x4b, 0x00, 0x84, 0xb1, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2c, 0x88, 0x4f, + 0x27, 0x14, 0x13, 0x05, 0x0b, 0x32, 0xc8, 0x30, 0x04, 0xc5, 0xb0, 0x01, 0x71, 0x04, 0x04, 0x30, + 0xc8, 0x40, 0x08, 0x85, 0x4f, 0x27, 0x20, 0xd7, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa0, 0x83, 0x2d, 0x03, 0x11, 0xd0, 0xc1, 0x96, 0xe1, + 0x08, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x28, + 0x83, 0xd1, 0x00, 0xf2, 0xcd, 0x31, 0xfc, 0x04, 0x58, 0x84, 0xc5, 0x58, 0x03, 0x10, 0x0c, 0xd4, + 0x1b, 0x0d, 0x20, 0xde, 0x1c, 0xc4, 0x4f, 0xa0, 0xc4, 0x4a, 0x84, 0x05, 0xf9, 0xe6, 0x18, 0x50, + 0x22, 0x25, 0xc2, 0x62, 0xac, 0x01, 0x08, 0x08, 0x4a, 0x94, 0x02, 0xf9, 0xe6, 0x18, 0x56, 0x02, + 0x2d, 0xc2, 0x62, 0xac, 0x01, 0x08, 0x0a, 0x00, 0xe4, 0xf4, 0x8a, 0x4f, 0x27, 0x3c, 0x1c, 0x05, + 0xbd, 0xe2, 0xd3, 0x09, 0xd1, 0x46, 0x41, 0xaf, 0x0c, 0x32, 0x14, 0x83, 0x33, 0xc8, 0x10, 0x08, + 0xce, 0x20, 0x43, 0xe0, 0x34, 0xc3, 0x06, 0x44, 0x15, 0x14, 0xc0, 0x20, 0x03, 0x62, 0x34, 0x83, + 0x0c, 0x41, 0xd1, 0xf8, 0x74, 0xc2, 0x55, 0x06, 0x83, 0x0c, 0x82, 0x14, 0x0d, 0x1b, 0x10, 0x42, + 0x50, 0x00, 0x83, 0x0c, 0x8c, 0xe2, 0x0c, 0x32, 0x04, 0x89, 0xe3, 0xd3, 0x09, 0x9b, 0x19, 0x0c, + 0x32, 0x08, 0x56, 0x35, 0x6c, 0x40, 0x08, 0x41, 0x01, 0x6c, 0x40, 0x0c, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x24, 0xa0, 0x83, 0x2d, 0x43, 0x13, 0xd0, 0xc1, 0x96, 0x41, 0x0a, 0xe8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, 0x0d, 0x20, 0xde, 0x1c, + 0xc4, 0x4f, 0xa4, 0x04, 0x58, 0x80, 0xc5, 0x1c, 0xc4, 0x4f, 0xa0, 0x44, 0x4a, 0x80, 0xc5, 0x58, + 0x04, 0x10, 0x08, 0x04, 0x25, 0x4a, 0x81, 0x78, 0x73, 0x10, 0x28, 0x41, 0x16, 0x60, 0x01, 0x16, + 0x73, 0x10, 0x3f, 0x81, 0x12, 0x64, 0x01, 0x16, 0x63, 0x11, 0x40, 0x20, 0x14, 0x94, 0x28, 0x06, + 0xe2, 0xcd, 0x41, 0xac, 0x04, 0x5a, 0x80, 0x05, 0x58, 0xcc, 0x41, 0xfc, 0x04, 0x4a, 0xa0, 0x05, + 0x58, 0x8c, 0x45, 0x00, 0x81, 0x60, 0x50, 0xa2, 0x0c, 0x88, 0x37, 0x07, 0xc1, 0x16, 0x2c, 0x01, + 0x16, 0x60, 0x31, 0x07, 0xf1, 0x13, 0x28, 0xc1, 0x12, 0x60, 0x31, 0x16, 0x01, 0x04, 0xc2, 0x01, + 0x34, 0xd5, 0x8a, 0x4f, 0x27, 0x50, 0x61, 0x40, 0x41, 0xad, 0xf8, 0x74, 0x82, 0x05, 0x06, 0x14, + 0xd4, 0x8a, 0x4f, 0x27, 0x60, 0x1f, 0x05, 0xb5, 0x32, 0xc8, 0x70, 0x14, 0xd6, 0x20, 0x43, 0x40, + 0x58, 0x83, 0x0c, 0xc1, 0x60, 0x0d, 0x1b, 0x10, 0x5c, 0x50, 0x00, 0x83, 0x0c, 0x0a, 0x52, 0x0d, + 0x32, 0x04, 0x47, 0x35, 0xc8, 0x10, 0x18, 0x95, 0x4f, 0x27, 0x7c, 0x6d, 0x30, 0x6c, 0x40, 0x04, + 0x42, 0x01, 0x0c, 0x32, 0x38, 0x4c, 0x35, 0xc8, 0x10, 0x2c, 0xd5, 0x20, 0x43, 0xa0, 0x54, 0x3e, + 0x9d, 0x30, 0x06, 0x6e, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x0c, 0x32, 0x48, 0x50, 0x35, 0xc8, + 0x10, 0x3c, 0xd5, 0x20, 0x43, 0xe0, 0x54, 0x3e, 0x9d, 0x70, 0x06, 0x6f, 0x30, 0x6c, 0x40, 0x04, + 0x42, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa0, + 0x83, 0x2d, 0x83, 0x12, 0xd0, 0xc1, 0x96, 0xe1, 0x09, 0xe8, 0x60, 0xcb, 0x40, 0x05, 0x74, 0xb0, + 0x65, 0xc8, 0x02, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x64, 0x2c, 0x08, 0x19, + 0x0b, 0x32, 0xc8, 0x10, 0x14, 0x04, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x83, + 0x0c, 0xc3, 0x51, 0x60, 0x50, 0x88, 0xbf, 0x4f, 0x27, 0x28, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x04, + 0xb0, 0x01, 0x31, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xa0, 0x83, 0x2d, 0x43, 0x10, + 0xd0, 0xc1, 0x96, 0x81, 0x08, 0xe8, 0x60, 0xcb, 0x80, 0x04, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x0a, 0x1d, 0xb5, 0x32, 0xc8, 0x10, + 0x18, 0x05, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x50, 0x00, 0x3e, 0x9d, 0x90, 0x60, 0x83, + 0x0c, 0x44, 0x72, 0x60, 0x60, 0x88, 0xff, 0xb0, 0x01, 0x31, 0x04, 0x05, 0xe0, 0xd3, 0x09, 0x0c, + 0x36, 0xc8, 0x70, 0x30, 0x09, 0x06, 0x89, 0xf8, 0x0f, 0x1b, 0x10, 0x43, 0x50, 0x00, 0x1b, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa0, 0x83, 0x2d, 0x03, 0x12, + 0xd0, 0xc1, 0x96, 0x81, 0x09, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd4, 0x0a, 0x21, 0xb5, 0x32, 0xc8, 0x10, + 0x1c, 0x06, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x4a, 0x50, 0x00, 0x83, 0x0c, 0x43, 0x72, 0x60, + 0x50, 0x88, 0xbf, 0x4f, 0x27, 0x30, 0xdb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x60, 0x30, + 0x09, 0x06, 0x88, 0xf8, 0xfb, 0x74, 0xc2, 0xb3, 0x0d, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, + 0xc9, 0xb3, 0x60, 0xb0, 0x88, 0xbf, 0x4f, 0x27, 0x48, 0xdb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, + 0x01, 0x31, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xa0, 0x83, 0x2d, 0x43, 0x10, + 0xd0, 0xc1, 0x96, 0x81, 0x08, 0xe8, 0x60, 0xcb, 0x80, 0x04, 0x74, 0xb0, 0x65, 0x60, 0x02, 0x3a, + 0xd8, 0x32, 0x40, 0x01, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x54, 0x2c, 0x88, 0x4f, + 0x27, 0x18, 0x15, 0x05, 0x0b, 0x42, 0xc9, 0x82, 0xf8, 0x74, 0x82, 0x82, 0x51, 0xb0, 0x20, 0x83, + 0x0c, 0x46, 0x82, 0x20, 0x11, 0x88, 0xff, 0x20, 0x83, 0xb1, 0x28, 0x48, 0x04, 0xe2, 0x8f, 0xc1, + 0x00, 0xfe, 0xc3, 0x06, 0xc4, 0x13, 0x10, 0x80, 0x4f, 0x27, 0x3c, 0x1f, 0x49, 0x0b, 0x42, 0xc9, + 0x82, 0x0c, 0x32, 0x38, 0xd1, 0x83, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0xce, 0x14, 0x21, 0x11, 0x88, + 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa0, 0x83, 0x2d, 0x43, 0x11, 0xd0, 0xc1, 0x96, 0x61, + 0x09, 0xe8, 0x60, 0xcb, 0xe0, 0x04, 0x74, 0xb0, 0x65, 0xa0, 0x02, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xd4, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x64, 0xf4, 0x8a, 0x4f, + 0x27, 0x1c, 0x15, 0x05, 0xbd, 0xe2, 0xd3, 0x09, 0x09, 0x45, 0x41, 0xaf, 0x10, 0x53, 0x2b, 0x3e, + 0x9d, 0xd0, 0x68, 0x14, 0xd4, 0x8a, 0x4f, 0x27, 0x3c, 0x19, 0x05, 0xb5, 0x32, 0xc8, 0x80, 0x38, + 0x0d, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x30, 0xd0, 0x83, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, + 0xc8, 0xb0, 0x4c, 0x12, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x71, 0x05, 0x05, + 0xe0, 0xd3, 0x09, 0x97, 0x19, 0x90, 0x56, 0x2b, 0xe4, 0xd4, 0x0a, 0x35, 0xb5, 0x32, 0xc8, 0x40, + 0x69, 0x18, 0x0e, 0x81, 0xf8, 0x0f, 0x32, 0x60, 0x9c, 0x86, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, + 0x3f, 0xc8, 0x70, 0x7d, 0x1d, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xc1, 0x04, + 0x05, 0xe0, 0xd3, 0x09, 0x63, 0xf0, 0x06, 0x64, 0x06, 0xb5, 0x42, 0x5a, 0xad, 0x50, 0x56, 0x2b, + 0x83, 0x0c, 0x60, 0x60, 0x06, 0x63, 0x80, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0x64, 0x80, 0x06, 0x65, + 0x80, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x30, 0x06, 0x6b, 0x80, 0x06, 0x78, 0x04, + 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0xa0, 0x83, 0x2d, 0x83, 0x14, 0xd0, 0xc1, 0x96, 0xc1, + 0x0a, 0xe8, 0x60, 0xcb, 0xf0, 0x05, 0x74, 0xb0, 0x65, 0x18, 0x83, 0x80, 0x0e, 0xb6, 0x0c, 0x6c, + 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x74, 0xd4, 0x8a, 0x4f, 0x27, 0x20, 0x16, 0x05, 0xb5, 0xe2, 0xd3, 0x09, + 0x4a, 0x45, 0x41, 0xad, 0xf8, 0x74, 0x02, 0x43, 0x51, 0x50, 0x2b, 0xf4, 0xd4, 0x8a, 0x4f, 0x27, + 0x40, 0x1d, 0x05, 0xb5, 0xe2, 0xd3, 0x09, 0x12, 0x47, 0x41, 0xad, 0xf8, 0x74, 0x02, 0xb5, 0x51, + 0x50, 0x2b, 0x83, 0x0c, 0xce, 0x24, 0x21, 0x12, 0x88, 0xff, 0x20, 0x83, 0x53, 0x51, 0x88, 0x04, + 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0x83, 0x0c, 0x0f, 0x76, 0x61, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0x40, 0x9b, 0x86, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x7c, 0x41, + 0x01, 0xf8, 0x74, 0xc2, 0xe7, 0x06, 0x24, 0x06, 0xb5, 0x42, 0x53, 0xad, 0x90, 0x54, 0x2b, 0x14, + 0xd5, 0xca, 0x20, 0x83, 0x37, 0x06, 0x61, 0x80, 0x45, 0x20, 0xfe, 0x83, 0x0c, 0x5e, 0x19, 0x8c, + 0x01, 0x1a, 0x81, 0xf8, 0x63, 0x30, 0x80, 0xff, 0x20, 0xc3, 0x87, 0x06, 0x66, 0x80, 0x48, 0x20, + 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x00, 0x06, 0x6b, 0x90, 0x06, 0xa8, 0x04, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x14, 0x14, 0x80, 0x4f, 0x27, 0xbc, 0xc1, 0x1e, 0x90, 0x1c, 0xd4, + 0x0a, 0x8d, 0x41, 0xad, 0x90, 0x18, 0xd4, 0x0a, 0x85, 0x41, 0xad, 0x0c, 0x32, 0xb8, 0xc1, 0x1c, + 0xc0, 0x01, 0x16, 0x81, 0xf8, 0x0f, 0x32, 0xb8, 0x41, 0x1d, 0xc8, 0x01, 0x1a, 0x81, 0xf8, 0x63, + 0x30, 0x80, 0xff, 0x20, 0xc3, 0x1b, 0xe0, 0x41, 0x1d, 0x20, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0xc0, 0xc1, 0x1e, 0xe0, 0x01, 0x2a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, + 0x01, 0x05, 0x05, 0xe0, 0xd3, 0x09, 0x7f, 0x80, 0x0a, 0x24, 0x0a, 0xb5, 0x42, 0x73, 0x50, 0x2b, + 0x24, 0x07, 0xb5, 0x42, 0x71, 0x50, 0x2b, 0x83, 0x0c, 0x7e, 0x30, 0x0a, 0x7f, 0x80, 0x45, 0x20, + 0xfe, 0x83, 0x0c, 0x7e, 0x50, 0x0a, 0xa1, 0x80, 0x46, 0x20, 0xfe, 0x18, 0x0c, 0xe0, 0x3f, 0xc8, + 0xf0, 0x07, 0xa8, 0x40, 0x0a, 0x88, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xa0, 0xb0, + 0x0a, 0xa7, 0x80, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x40, 0x41, 0x01, 0x6c, + 0x40, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa0, 0x83, 0x2d, 0x43, 0x13, + 0xd0, 0xc1, 0x96, 0x21, 0x0b, 0xe8, 0x60, 0xcb, 0xe0, 0x05, 0x74, 0xb0, 0x65, 0x50, 0x83, 0x80, + 0x0e, 0xb6, 0x0c, 0x6f, 0x10, 0xd0, 0xc1, 0x96, 0x61, 0x0f, 0x02, 0x3a, 0xd8, 0x32, 0x80, 0x42, + 0x40, 0x07, 0x5b, 0x06, 0x56, 0x08, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x58, 0x42, 0x00, 0x50, 0x62, 0x34, 0x80, 0x76, 0x73, 0x08, 0x28, + 0x01, 0x16, 0x00, 0x00, 0x54, 0x2c, 0x88, 0x4f, 0x27, 0x18, 0x14, 0x05, 0x0b, 0x32, 0xc8, 0x10, + 0x1c, 0x06, 0x06, 0x84, 0xf8, 0x0f, 0x32, 0x04, 0x89, 0x81, 0x42, 0x10, 0xfe, 0x63, 0x08, 0x01, + 0xc7, 0x41, 0x40, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa0, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xd4, 0x1b, 0x0d, 0xa0, 0xdd, 0x58, 0x42, 0x20, + 0x8c, 0x25, 0x08, 0x01, 0x2d, 0x46, 0x03, 0x28, 0x31, 0x1a, 0x40, 0xbb, 0x39, 0x04, 0x94, 0x10, + 0x8b, 0xb1, 0x04, 0x81, 0x18, 0x4b, 0x08, 0x80, 0xb1, 0x04, 0x60, 0x00, 0xa4, 0xf4, 0x8a, 0x4f, + 0x27, 0x2c, 0x18, 0x05, 0xbd, 0xe2, 0xd3, 0x09, 0xcd, 0x45, 0x41, 0xaf, 0x8c, 0x21, 0x0c, 0xdf, + 0x20, 0x83, 0xf0, 0x38, 0x83, 0x0c, 0x07, 0xe4, 0xa0, 0x10, 0x88, 0xff, 0x20, 0x43, 0xf0, 0x34, + 0x28, 0x04, 0xe1, 0x3f, 0x86, 0x10, 0x94, 0x01, 0x06, 0x87, 0xf8, 0x0f, 0x32, 0x2c, 0x56, 0x35, + 0xc8, 0xa0, 0x38, 0x11, 0x0a, 0x81, 0xf8, 0x0f, 0x32, 0x40, 0xcc, 0x84, 0x44, 0x20, 0xfe, 0x83, + 0x0c, 0x01, 0x46, 0x21, 0x11, 0x84, 0xff, 0x20, 0x03, 0x05, 0x55, 0x28, 0x04, 0xe2, 0x3f, 0xc8, + 0x10, 0x70, 0x1a, 0x0a, 0x01, 0xf8, 0x8f, 0x21, 0x04, 0x72, 0x80, 0x41, 0x03, 0xfe, 0x1c, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x34, 0x28, 0xa8, 0xc2, 0xa2, 0xda, 0x68, 0x00, 0x25, 0xca, 0x60, 0x34, + 0x80, 0x76, 0x73, 0x08, 0x61, 0x21, 0x16, 0x34, 0x28, 0x01, 0x5a, 0x8c, 0x06, 0x10, 0x6f, 0x2c, + 0x02, 0x00, 0x80, 0x80, 0x76, 0x73, 0x08, 0x62, 0xb1, 0x12, 0xc4, 0x1b, 0x8b, 0x00, 0x02, 0x20, + 0xa0, 0xdd, 0x1c, 0xc2, 0x4a, 0x88, 0xc5, 0x1c, 0x82, 0x58, 0x84, 0x05, 0x0d, 0x0a, 0x89, 0x76, + 0x73, 0x08, 0x62, 0x81, 0x12, 0x73, 0x08, 0x28, 0x21, 0x16, 0xc4, 0x1b, 0x8b, 0x00, 0x84, 0x60, + 0x18, 0x8b, 0x08, 0x8a, 0xa2, 0x18, 0x8b, 0x10, 0x0c, 0xc3, 0x18, 0x8b, 0x18, 0x8e, 0xe3, 0xa0, + 0xda, 0x58, 0x04, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, 0xe2, 0xbf, 0x00, 0x82, 0x20, 0x88, + 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x90, 0x61, 0x8c, 0x00, 0x04, 0x41, 0x10, 0x04, 0x05, 0x00, + 0x74, 0xd5, 0x8a, 0x4f, 0x27, 0x60, 0x65, 0x40, 0x41, 0xad, 0xf8, 0x74, 0x82, 0x16, 0x06, 0x14, + 0xd4, 0x8a, 0x4f, 0x27, 0x70, 0x1b, 0x05, 0x06, 0xe2, 0xd3, 0x09, 0x1e, 0x47, 0x81, 0x61, 0x0c, + 0x32, 0x14, 0x9d, 0x36, 0xc7, 0x10, 0x08, 0xda, 0x20, 0x43, 0xa0, 0x65, 0x83, 0x0c, 0x0a, 0x18, + 0x64, 0x73, 0x0c, 0xc1, 0x41, 0x07, 0x83, 0x0c, 0x41, 0xa7, 0x21, 0x11, 0x88, 0xff, 0x20, 0x03, + 0x43, 0x06, 0xdb, 0x1c, 0x43, 0xb0, 0x84, 0xc1, 0x20, 0x43, 0x10, 0x06, 0x60, 0x30, 0xc8, 0x10, + 0x9d, 0x41, 0x37, 0xc7, 0x10, 0x30, 0x7b, 0x30, 0xc8, 0x10, 0x90, 0x41, 0x18, 0x20, 0x11, 0x88, + 0x3f, 0x22, 0x41, 0xf8, 0xfb, 0x74, 0xc2, 0x1b, 0x84, 0x01, 0x05, 0x86, 0x31, 0xc8, 0x80, 0xb9, + 0x81, 0x18, 0xcc, 0x31, 0x04, 0x82, 0x28, 0x0c, 0x32, 0x04, 0x6b, 0x80, 0x06, 0x28, 0x05, 0xe2, + 0x3f, 0xc8, 0xa0, 0xc9, 0x41, 0x19, 0xcc, 0x31, 0x04, 0xc6, 0x1b, 0x0c, 0x32, 0x04, 0x6f, 0xe0, + 0x06, 0x18, 0x30, 0xe2, 0x8f, 0x45, 0x10, 0xfe, 0x18, 0x1d, 0xe2, 0x8f, 0x84, 0x25, 0xfe, 0x28, + 0x04, 0xe1, 0x3f, 0xc8, 0xf0, 0xe8, 0x01, 0x1b, 0x0c, 0x32, 0x14, 0x7b, 0xd0, 0x06, 0x83, 0x0c, + 0x03, 0x1f, 0xb8, 0xc1, 0x20, 0xc3, 0x19, 0xa4, 0x81, 0x1b, 0x0c, 0x32, 0xa0, 0x81, 0x1a, 0xb8, + 0xc1, 0x20, 0x43, 0x1a, 0xac, 0x81, 0x1b, 0xa0, 0x31, 0x88, 0x3f, 0x16, 0x82, 0xf8, 0x63, 0x20, + 0x80, 0x3f, 0x16, 0x88, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0xc6, 0xc1, 0x1c, 0x88, 0x3f, 0x06, 0x82, + 0xf8, 0x8f, 0x18, 0x1c, 0x40, 0x08, 0x82, 0x85, 0x7f, 0xd8, 0x41, 0x38, 0xd0, 0x41, 0xc0, 0x41, + 0x40, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa0, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, 0xc4, 0x68, 0x00, 0xed, + 0xe6, 0x10, 0x50, 0x02, 0x2c, 0x68, 0x50, 0x02, 0x64, 0x18, 0x23, 0x00, 0x41, 0x10, 0xc4, 0x3f, + 0xaa, 0x8d, 0x06, 0x10, 0x6f, 0x04, 0x60, 0x0e, 0x02, 0x25, 0xc0, 0x02, 0x2c, 0x56, 0x82, 0x06, + 0x45, 0x00, 0x00, 0x00, 0xb4, 0x2c, 0x88, 0x4f, 0x27, 0x30, 0x1a, 0x05, 0x0b, 0x32, 0xc8, 0x10, + 0x30, 0x0a, 0x06, 0x84, 0xf8, 0x8f, 0x21, 0x04, 0x60, 0x30, 0x86, 0x40, 0x84, 0xc1, 0x18, 0xc2, + 0xd1, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0xe3, 0x13, 0x90, 0xbf, 0x11, 0xe0, 0x6f, 0x06, + 0xf8, 0xcf, 0x31, 0x44, 0x03, 0x1a, 0x0c, 0x32, 0x04, 0x52, 0x34, 0xc8, 0xd0, 0x3c, 0xd1, 0x1c, + 0x43, 0x50, 0x58, 0x73, 0x0c, 0x41, 0x21, 0x21, 0x11, 0x88, 0xff, 0xb0, 0x01, 0xd1, 0x05, 0x04, + 0xb0, 0x01, 0x31, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa0, 0x83, 0x2d, 0xc3, 0x14, + 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x34, 0x28, 0x81, 0x22, + 0xa0, 0xde, 0x68, 0x00, 0xed, 0xc6, 0x12, 0x02, 0x61, 0x2c, 0x41, 0x20, 0x68, 0x31, 0x1a, 0x40, + 0xbb, 0xb1, 0x84, 0x00, 0x20, 0xc3, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xd1, 0x6e, 0x04, 0x60, + 0x2c, 0x01, 0x10, 0xc6, 0x12, 0x84, 0x61, 0x2c, 0x41, 0x00, 0xc6, 0x12, 0x80, 0x62, 0x2c, 0x01, + 0x08, 0xc6, 0x12, 0x82, 0x81, 0x06, 0x05, 0x05, 0x24, 0xf5, 0x8a, 0x4f, 0x27, 0x4c, 0x60, 0x40, + 0x41, 0xaf, 0xf8, 0x74, 0x42, 0xf5, 0x51, 0xd0, 0x2b, 0x63, 0x08, 0xc5, 0x19, 0x8c, 0x21, 0x10, + 0xd6, 0x18, 0x42, 0x61, 0x8d, 0x21, 0x18, 0x6a, 0x30, 0x86, 0x90, 0x64, 0x63, 0x08, 0x4a, 0x36, + 0x86, 0x70, 0xb4, 0x01, 0x16, 0x83, 0xf8, 0xe3, 0x31, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, 0x40, + 0x88, 0xff, 0x20, 0x03, 0xe3, 0x75, 0x83, 0x0c, 0x4f, 0xd4, 0xa1, 0x10, 0x88, 0xff, 0x20, 0xc3, + 0x14, 0x7d, 0x48, 0x04, 0xe2, 0x3f, 0xc8, 0x10, 0x80, 0xc1, 0x87, 0x01, 0x11, 0xfe, 0x63, 0x08, + 0x41, 0x1e, 0x60, 0x30, 0x89, 0xff, 0x18, 0xc2, 0x90, 0x06, 0x18, 0x48, 0xe2, 0x8f, 0x03, 0x03, + 0xfe, 0x18, 0x08, 0xe0, 0x8f, 0x66, 0x10, 0x90, 0xff, 0x1c, 0x43, 0x1a, 0x04, 0xa0, 0x30, 0xc8, + 0x10, 0xa8, 0xc1, 0x19, 0x60, 0xa0, 0x88, 0xff, 0xb0, 0x01, 0x21, 0x07, 0x41, 0x01, 0x20, 0x31, + 0x89, 0xbf, 0x4f, 0x27, 0xcc, 0x81, 0x28, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, 0x3e, 0x9d, 0x40, + 0x07, 0xa2, 0x30, 0xc8, 0x00, 0x06, 0x72, 0xb0, 0x06, 0x83, 0x0c, 0x63, 0x50, 0x06, 0x6b, 0x80, + 0x42, 0x20, 0xfe, 0x83, 0x0c, 0x63, 0x50, 0x07, 0x6c, 0x30, 0xc8, 0x60, 0x06, 0x68, 0xc0, 0x06, + 0x28, 0x04, 0xe2, 0x8f, 0x44, 0x10, 0xfe, 0xc8, 0x04, 0xe2, 0x3f, 0x6c, 0x40, 0x24, 0x41, 0x01, + 0x20, 0x19, 0x88, 0x81, 0xf8, 0xa3, 0x19, 0xa0, 0x81, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x4a, 0x81, + 0xf8, 0xfb, 0x74, 0x42, 0x28, 0xb8, 0xc2, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xe0, 0xd3, 0x09, 0xa2, + 0xd0, 0x0a, 0x83, 0x0c, 0x6e, 0x00, 0x0a, 0x75, 0x30, 0xc8, 0x30, 0x07, 0x71, 0x50, 0x07, 0x28, + 0x04, 0xe2, 0x3f, 0xc8, 0x10, 0x80, 0xc2, 0x1f, 0x0c, 0x32, 0xd0, 0x81, 0x1d, 0xe0, 0x01, 0x16, + 0x81, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x6a, 0x81, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x50, 0x00, 0x48, + 0x07, 0x75, 0x20, 0xfe, 0x38, 0x07, 0x72, 0x20, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x60, 0x10, 0x88, + 0xbf, 0x4f, 0x27, 0xbc, 0xc2, 0x1f, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x30, 0x08, 0xec, 0x60, 0xcb, 0x40, 0x06, 0x01, 0x1e, 0x6c, + 0x19, 0xdc, 0x20, 0xb0, 0x83, 0x2d, 0x03, 0x1d, 0x04, 0x78, 0xb0, 0x65, 0xf0, 0x83, 0xc0, 0x0e, + 0xb6, 0x0c, 0xa4, 0x10, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xc4, 0x1b, 0x8b, 0x18, 0x86, 0xe1, 0x18, 0x8b, 0x10, 0x0c, 0xc1, 0x18, 0x8b, 0x10, 0x04, 0xc1, + 0x18, 0x8b, 0x18, 0x8e, 0xe1, 0x18, 0x8b, 0x08, 0x8a, 0xa0, 0x18, 0x8b, 0x08, 0x82, 0xa0, 0x18, + 0x8b, 0x00, 0x08, 0x80, 0x18, 0x8b, 0x00, 0x00, 0x80, 0xa0, 0xda, 0x68, 0x00, 0xf1, 0xc6, 0x22, + 0x00, 0x21, 0x18, 0xc6, 0x22, 0x00, 0x82, 0x20, 0xc6, 0x22, 0x82, 0xa2, 0x28, 0xc6, 0x22, 0x04, + 0xc3, 0x30, 0xc6, 0x22, 0x86, 0xe3, 0x38, 0xa8, 0x36, 0x16, 0x01, 0x82, 0x20, 0x88, 0x7f, 0x20, + 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x63, 0x11, + 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x20, + 0x08, 0x82, 0xf8, 0x47, 0x89, 0x11, 0x80, 0xd1, 0x00, 0xe2, 0xcd, 0x41, 0xbc, 0x45, 0x4a, 0xc0, + 0x05, 0x5c, 0xcc, 0x41, 0xbc, 0x05, 0x4a, 0xa4, 0x04, 0x5c, 0x8c, 0x45, 0x00, 0x81, 0x40, 0x90, + 0x61, 0x8c, 0x00, 0x04, 0x41, 0x10, 0x04, 0x85, 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0x23, 0xde, + 0x08, 0x00, 0x00, 0x00, 0xa4, 0xd5, 0x8a, 0x4f, 0x27, 0x6c, 0x68, 0x40, 0x41, 0xad, 0xf8, 0x74, + 0x42, 0x77, 0x06, 0x14, 0xd4, 0x8a, 0x4f, 0x27, 0x7c, 0x66, 0x40, 0x41, 0xad, 0x0c, 0x32, 0x04, + 0xc3, 0x37, 0xc8, 0x40, 0x18, 0x1f, 0x0a, 0x81, 0xf8, 0x0f, 0x32, 0x10, 0x06, 0x18, 0x0c, 0x32, + 0x1c, 0x09, 0x18, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0x0f, 0x32, 0x28, 0x8c, 0x18, 0x20, + 0x12, 0x88, 0xff, 0x20, 0x83, 0xc2, 0x8c, 0x01, 0x06, 0x86, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x26, + 0x85, 0xf8, 0x23, 0xc1, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x0f, 0x32, 0x48, 0x14, 0x1a, 0x20, 0x14, + 0x88, 0xff, 0x20, 0x83, 0x44, 0xa5, 0x01, 0x06, 0x8e, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x46, 0x85, + 0xf8, 0x23, 0x41, 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0xa3, 0x83, 0x88, 0x3f, 0x1e, 0x91, 0xf8, 0xa3, + 0x10, 0x84, 0xff, 0x20, 0x03, 0x15, 0x07, 0x70, 0x30, 0xc8, 0x00, 0xc9, 0x41, 0x1c, 0x0c, 0x32, + 0x38, 0x73, 0x20, 0x07, 0x83, 0x0c, 0x0a, 0x1d, 0xcc, 0xc1, 0x20, 0x03, 0x52, 0x07, 0x74, 0x30, + 0xc8, 0x60, 0xd8, 0x41, 0x1d, 0x0c, 0x32, 0x94, 0xc1, 0x19, 0xd4, 0xc1, 0x20, 0x83, 0x19, 0xa0, + 0x41, 0x1d, 0x0c, 0x32, 0x9c, 0x41, 0x1a, 0xd4, 0xc1, 0x20, 0x03, 0x1a, 0xa8, 0x41, 0x1d, 0xa0, + 0x32, 0x88, 0x3f, 0x26, 0x82, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x16, 0x8c, 0xf8, 0xa3, 0x10, 0x84, + 0x3f, 0x3e, 0x89, 0xf8, 0x23, 0x73, 0x88, 0x3f, 0x06, 0x02, 0xf8, 0xa3, 0xf2, 0x88, 0x3f, 0x0a, + 0x41, 0xf8, 0xe3, 0xe4, 0x88, 0x3f, 0x42, 0x8c, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x42, 0x94, 0xf8, + 0xa3, 0x10, 0x84, 0x3f, 0x5e, 0x93, 0xf8, 0x63, 0x25, 0x89, 0x3f, 0x06, 0x02, 0xf8, 0x63, 0x85, + 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0x23, 0x94, 0x0a, 0xe2, 0x8f, 0x4c, 0x2a, 0x88, 0x3f, 0x22, 0xab, + 0x20, 0xfe, 0x48, 0xac, 0x82, 0xf8, 0x0f, 0x32, 0x10, 0x43, 0x2a, 0x0c, 0x32, 0x04, 0x43, 0x2a, + 0x0c, 0x32, 0x04, 0x43, 0x2a, 0x60, 0x60, 0x0a, 0xe2, 0x3f, 0x62, 0x70, 0x00, 0x21, 0x08, 0x16, + 0xfe, 0x61, 0x07, 0xf8, 0xa0, 0x0a, 0x01, 0xaa, 0x42, 0x40, 0xfe, 0x73, 0x0c, 0xb9, 0x10, 0xcc, + 0xc3, 0x20, 0x43, 0xa0, 0x0b, 0xab, 0x80, 0x01, 0x23, 0xfe, 0xc3, 0x06, 0x44, 0x39, 0x04, 0x05, + 0x80, 0x02, 0x23, 0xfe, 0x3e, 0x9d, 0x60, 0x0e, 0xf4, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x20, + 0xd1, 0x88, 0xbf, 0x4f, 0x27, 0xa0, 0xc3, 0x3c, 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x68, 0x38, + 0xe2, 0xef, 0xd3, 0x09, 0xea, 0x20, 0x0f, 0xc3, 0x06, 0x44, 0x20, 0x14, 0xc0, 0x06, 0xc4, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa0, 0x83, 0x2d, 0x03, 0x2b, 0x04, 0x74, 0xb0, 0x65, + 0x78, 0x85, 0x80, 0x0e, 0xb6, 0x0c, 0xb2, 0x10, 0xd0, 0xc1, 0x96, 0xa1, 0x16, 0x02, 0x3a, 0x00, + 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x30, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0xc6, 0x88, 0x01, 0x72, 0x06, 0x21, 0x08, 0x06, 0x8a, 0x4b, 0x18, 0xc4, 0x10, 0x8c, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x8a, 0x50, 0x00, 0x3e, 0x9d, 0xa0, 0x68, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, + 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x40, 0x61, 0xcb, 0x50, 0x04, 0xa1, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0xc6, 0x88, 0x01, 0x72, 0x06, 0x21, 0x08, 0x06, 0x0a, 0x4b, 0x18, 0xc4, 0x10, 0x8c, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x8a, 0x50, 0x00, 0x3e, 0x9d, 0xa0, 0x68, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, + 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x40, 0x61, 0xcb, 0x50, 0x04, 0xa1, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0xc6, 0x88, 0x01, 0x72, 0x06, 0x21, 0x08, 0x06, 0x8d, 0x4a, 0x18, 0xc4, 0x10, 0x8c, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x8a, 0x50, 0x00, 0x3e, 0x9d, 0xa0, 0x68, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, + 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x40, 0x61, 0xcb, 0x50, 0x04, 0xa1, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0x06, 0x1d, 0x8b, 0xe2, 0xd3, 0x09, 0x08, 0x46, 0xc1, 0x82, 0x8c, 0x18, 0x28, 0x67, 0x10, + 0x82, 0x60, 0xe0, 0xac, 0x44, 0x72, 0x18, 0xc4, 0x10, 0x6c, 0x40, 0x0c, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x40, 0x61, 0xcb, + 0x50, 0x04, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, + 0x9d, 0x60, 0x58, 0x14, 0x24, 0x06, 0x1d, 0x83, 0xe2, 0xd3, 0x09, 0x08, 0x46, 0xc1, 0x80, 0x8c, + 0x18, 0x28, 0x67, 0x10, 0x82, 0x60, 0xf0, 0xa4, 0x44, 0x72, 0x18, 0xc4, 0x10, 0x6c, 0x40, 0x0c, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, + 0x08, 0x40, 0x61, 0xcb, 0x50, 0x04, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x06, 0x1d, 0x83, 0xe2, 0xd3, 0x09, 0x08, + 0x46, 0xc1, 0x80, 0x8c, 0x18, 0x28, 0x67, 0x10, 0x82, 0x60, 0xf0, 0x9c, 0x44, 0x72, 0x18, 0xc4, + 0x10, 0x6c, 0x40, 0x0c, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, + 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x40, 0x61, 0xcb, 0x50, 0x04, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0x90, 0xa0, 0x41, 0x08, 0x82, 0x01, 0x44, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0xc1, 0x08, 0x05, 0xe0, 0xd3, + 0x09, 0x0c, 0x37, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, + 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x38, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0x90, 0xa0, 0x41, 0x08, 0x82, 0x01, 0x24, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0xc1, 0x08, 0x05, 0xe0, 0xd3, + 0x09, 0x0c, 0x37, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, + 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x38, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0x90, 0xa0, 0x41, 0x08, 0x82, 0x41, 0x04, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0xc1, 0x08, 0x05, 0xe0, 0xd3, + 0x09, 0x0c, 0x37, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, + 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x38, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x42, 0xc9, 0xa2, 0xf8, 0x74, 0x82, 0xa2, 0x51, 0xb0, 0x20, 0x23, 0x06, + 0x0b, 0x1a, 0x84, 0x20, 0x18, 0x48, 0x21, 0xb1, 0x24, 0x88, 0x41, 0x0c, 0xc1, 0x06, 0xc4, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, + 0x08, 0x46, 0x61, 0xcb, 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x38, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0x86, 0x4f, 0x27, 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0xa0, 0xa4, 0x41, 0x08, 0x82, 0xc1, + 0xc4, 0x0f, 0x88, 0x51, 0x0c, 0x41, 0xb2, 0x01, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xe0, 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, + 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x38, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0xa0, 0xa8, 0x41, 0x08, 0x82, 0xc1, 0xa4, 0x0f, 0x88, 0x51, + 0x0c, 0x41, 0xb2, 0x01, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xe0, + 0x83, 0x2d, 0x83, 0x10, 0xf4, 0xc1, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, 0x50, 0x04, 0xa4, 0xb0, + 0x65, 0x38, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, 0x3e, 0x9d, 0x40, 0x48, 0x14, 0x0c, 0x48, 0x06, + 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x1c, 0x36, 0x20, 0x10, 0x81, 0x00, 0x7c, 0x3a, 0x01, 0xc1, + 0x86, 0x0d, 0x88, 0x40, 0x18, 0x80, 0x0d, 0x88, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x22, 0x30, 0x85, 0x2d, 0xc3, 0x11, 0x98, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, 0x3e, 0x9d, 0x40, 0x48, + 0x14, 0x0c, 0x48, 0x06, 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x3c, 0x62, 0x42, 0x0d, 0x12, 0x10, + 0x70, 0x41, 0xa2, 0xc3, 0x06, 0xc4, 0x52, 0x14, 0x80, 0x4f, 0x27, 0x2c, 0xdb, 0xb0, 0x01, 0x11, + 0x14, 0x03, 0xe0, 0xd3, 0x09, 0xcc, 0x36, 0x6c, 0x40, 0x04, 0x03, 0x01, 0x6c, 0x40, 0x0c, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0x30, 0x85, 0x2d, 0x83, 0x12, 0x98, 0xc2, 0x96, 0x81, + 0x09, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xa0, 0xa2, 0x00, 0x50, + 0x7c, 0x3a, 0x61, 0xc0, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0x18, 0xe0, 0x05, 0x8a, 0x52, + 0x63, 0x20, 0x3e, 0x9d, 0xe0, 0x7c, 0x14, 0x18, 0xc6, 0x88, 0x01, 0xb2, 0x06, 0x21, 0x08, 0x06, + 0x57, 0x3f, 0x24, 0xc4, 0x10, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x92, + 0x50, 0x00, 0x3e, 0x9d, 0x20, 0x8d, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0x03, 0x11, 0xa8, 0xc2, 0x96, 0xc1, + 0x08, 0x56, 0x61, 0xcb, 0xa0, 0x04, 0xad, 0xb0, 0x65, 0x60, 0x02, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x64, 0x00, 0x4a, 0x1a, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xc0, 0xa2, 0x00, 0x50, 0x7c, 0x3a, 0x61, 0xc8, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x81, 0x18, 0xe0, 0x05, 0x8a, 0x92, 0x63, 0x20, 0x3e, 0x9d, + 0xf0, 0x80, 0x01, 0x05, 0x86, 0x31, 0x62, 0x90, 0xb0, 0x41, 0x08, 0x82, 0x41, 0xc6, 0x0f, 0x09, + 0x31, 0x04, 0xd0, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0x21, 0x09, 0x05, 0xe0, + 0xd3, 0x09, 0x12, 0x19, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0x03, 0x11, 0xa8, 0xc2, 0x96, 0xc1, + 0x08, 0x56, 0x61, 0xcb, 0xa0, 0x04, 0xad, 0xb0, 0x65, 0x60, 0x02, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x74, 0x00, 0x4a, 0x1e, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xe0, 0xa2, 0x00, 0x50, 0x7c, 0x3a, 0x61, 0xd0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0xc1, 0x18, 0xe0, 0x05, 0x8a, 0xd2, 0x63, 0x20, 0x3e, 0x9d, + 0x00, 0x85, 0x01, 0x05, 0x86, 0x41, 0x91, 0x81, 0xf8, 0x74, 0x82, 0x44, 0x06, 0x14, 0x18, 0x06, + 0x4d, 0x06, 0xe2, 0xd3, 0x09, 0xd4, 0x19, 0x50, 0x60, 0x18, 0x23, 0x06, 0x4c, 0x1b, 0x84, 0x20, + 0x18, 0x6c, 0x21, 0xf1, 0x28, 0xc9, 0x61, 0x10, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, + 0x30, 0x6c, 0x40, 0x60, 0x42, 0x01, 0xf8, 0x74, 0x02, 0xb6, 0x06, 0xc3, 0x06, 0x44, 0x20, 0x10, + 0xc0, 0x06, 0xc4, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0x03, 0x11, + 0xa8, 0xc2, 0x96, 0xc1, 0x08, 0x56, 0x61, 0xcb, 0xa0, 0x04, 0xad, 0xb0, 0x65, 0x60, 0x02, 0x57, + 0xd8, 0x32, 0x34, 0x41, 0x2b, 0x6c, 0x19, 0x9e, 0xc0, 0x15, 0xb6, 0x0c, 0x50, 0xd0, 0x0a, 0x5b, + 0x06, 0x29, 0x70, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, + 0x00, 0xa3, 0x00, 0x50, 0x7c, 0x3a, 0x61, 0xd8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x01, 0x19, + 0xe0, 0x05, 0x8a, 0x12, 0x64, 0x20, 0x3e, 0x9d, 0x10, 0x89, 0x01, 0x05, 0x86, 0x41, 0x92, 0x81, + 0xf8, 0x74, 0xc2, 0x54, 0x06, 0x14, 0x18, 0x06, 0x51, 0x06, 0xe2, 0xd3, 0x09, 0x15, 0x1a, 0x50, + 0x60, 0x18, 0x23, 0x06, 0x8d, 0x1b, 0x84, 0x20, 0x18, 0x74, 0x20, 0xf1, 0x28, 0xc9, 0x61, 0x10, + 0x43, 0x60, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x98, 0x50, 0x00, 0x3e, + 0x9d, 0x80, 0xb1, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0x03, 0x11, 0xa8, 0xc2, 0x96, 0xc1, 0x08, 0x56, 0x61, 0xcb, + 0xa0, 0x04, 0xad, 0xb0, 0x65, 0x60, 0x02, 0x57, 0xd8, 0x32, 0x34, 0x41, 0x2b, 0x6c, 0x19, 0x9e, + 0xc0, 0x15, 0xb6, 0x0c, 0x50, 0xd0, 0x0a, 0x5b, 0x06, 0x29, 0x70, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x54, 0x00, 0x4a, 0x16, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0x80, 0xa2, 0x00, 0x40, 0x7c, 0x3a, 0x61, 0xc0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xc4, 0x18, 0x8a, 0x4f, 0x27, 0x34, 0x1e, 0x05, + 0x86, 0xe1, 0xd3, 0x09, 0xcf, 0x47, 0x81, 0x81, 0x8c, 0x18, 0x24, 0x6c, 0x10, 0x82, 0x60, 0x90, + 0xd9, 0x83, 0x62, 0x14, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x6c, 0x40, 0x4c, + 0x42, 0x01, 0xf8, 0x74, 0xc2, 0x44, 0x06, 0xc3, 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0x03, 0x11, 0xbc, 0xc2, 0x96, 0xc1, + 0x08, 0x56, 0x61, 0xcb, 0x90, 0x04, 0xb0, 0xb0, 0x65, 0x58, 0x82, 0x58, 0xd8, 0x32, 0x34, 0x01, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xa0, 0xa2, 0x00, 0x40, + 0x7c, 0x3a, 0x61, 0xc8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xd4, 0x18, 0x8a, 0x4f, + 0x27, 0x38, 0x1f, 0x05, 0x86, 0xe1, 0xd3, 0x09, 0x10, 0x18, 0x50, 0x60, 0x20, 0x23, 0x06, 0xca, + 0x1b, 0x84, 0x20, 0x18, 0x78, 0xf5, 0xa0, 0x18, 0xc5, 0x10, 0x44, 0xa3, 0x09, 0x01, 0x30, 0x9a, + 0x20, 0x04, 0xc3, 0x06, 0xc4, 0x24, 0x14, 0x80, 0x4f, 0x27, 0x4c, 0x65, 0x30, 0x6c, 0x40, 0x04, + 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, + 0x85, 0x2d, 0x03, 0x11, 0xbc, 0xc2, 0x96, 0xc1, 0x08, 0x56, 0x61, 0xcb, 0x90, 0x04, 0xb0, 0xb0, + 0x65, 0x58, 0x82, 0x58, 0xd8, 0x32, 0x34, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0xfd, 0x04, + 0x21, 0xf0, 0xe9, 0x84, 0xc0, 0xa2, 0x00, 0x40, 0x7c, 0x3a, 0x61, 0xd0, 0x28, 0x18, 0x90, 0x0c, + 0x12, 0x70, 0x41, 0xa2, 0xe4, 0x18, 0x8a, 0x4f, 0x27, 0x3c, 0x60, 0x40, 0x81, 0x61, 0xf8, 0x74, + 0x42, 0x14, 0x06, 0x14, 0x18, 0x08, 0x49, 0x86, 0xe2, 0xd3, 0x09, 0x53, 0x19, 0x50, 0x60, 0x18, + 0x3e, 0x9d, 0x50, 0x99, 0x01, 0x05, 0x06, 0x42, 0x96, 0xa1, 0xf8, 0x74, 0xc2, 0xa5, 0x06, 0x14, + 0x18, 0x86, 0x4f, 0x27, 0x64, 0x6b, 0x40, 0x81, 0x81, 0x8c, 0x18, 0x3c, 0x70, 0x10, 0x82, 0x60, + 0xf0, 0xf9, 0x03, 0x05, 0x3d, 0xcd, 0xa2, 0x20, 0x46, 0x31, 0x04, 0xa3, 0x09, 0x01, 0x30, 0x9a, + 0x20, 0x04, 0xc3, 0x06, 0x44, 0x27, 0x14, 0x80, 0x4f, 0x27, 0x74, 0x70, 0x30, 0x6c, 0x40, 0x04, + 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, + 0x85, 0x2d, 0x03, 0x11, 0xbc, 0xc2, 0x96, 0xc1, 0x08, 0x56, 0x61, 0xcb, 0x90, 0x04, 0xb0, 0xb0, + 0x65, 0x58, 0x82, 0x58, 0xd8, 0x32, 0x34, 0x01, 0x1e, 0x6c, 0x19, 0x9c, 0x00, 0x16, 0xb6, 0x0c, + 0x50, 0x10, 0x0b, 0x5b, 0x06, 0x29, 0xc0, 0x83, 0x2d, 0xc3, 0x14, 0xc0, 0xc2, 0x96, 0xa1, 0x0a, + 0x62, 0x61, 0xcb, 0x70, 0x05, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, + 0xe0, 0xa2, 0x00, 0x40, 0x7c, 0x3a, 0x61, 0xd8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, + 0xf4, 0x18, 0x8a, 0x4f, 0x27, 0x40, 0x61, 0x40, 0x81, 0x61, 0xf8, 0x74, 0x82, 0x24, 0x06, 0x14, + 0x18, 0x08, 0x4d, 0x86, 0xe2, 0xd3, 0x09, 0x94, 0x19, 0x50, 0x60, 0x18, 0x3e, 0x9d, 0x60, 0x9d, + 0x01, 0x05, 0x06, 0x42, 0x97, 0xa1, 0xf8, 0x74, 0x02, 0xb6, 0x06, 0x14, 0x18, 0x86, 0x4f, 0x27, + 0x68, 0x6c, 0x40, 0x81, 0x81, 0x8c, 0x18, 0x40, 0x71, 0x10, 0x82, 0x60, 0x00, 0x06, 0xfd, 0x40, + 0x41, 0x4f, 0xb3, 0x28, 0x88, 0x51, 0x0c, 0xc1, 0x36, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, + 0x6c, 0x40, 0x74, 0x42, 0x01, 0xf8, 0x74, 0x42, 0x17, 0x07, 0xc3, 0x06, 0x44, 0x20, 0x10, 0xc0, + 0x06, 0xc4, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0x03, 0x11, + 0xbc, 0xc2, 0x96, 0xc1, 0x08, 0x56, 0x61, 0xcb, 0x90, 0x04, 0xb0, 0xb0, 0x65, 0x58, 0x82, 0x58, + 0xd8, 0x32, 0x34, 0x01, 0x1e, 0x6c, 0x19, 0x9c, 0x00, 0x16, 0xb6, 0x0c, 0x50, 0x10, 0x0b, 0x5b, + 0x06, 0x29, 0xc0, 0x83, 0x2d, 0xc3, 0x14, 0xc0, 0xc2, 0x96, 0xa1, 0x0a, 0x62, 0x61, 0xcb, 0x70, + 0x05, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x11, 0x80, 0x92, 0xc4, 0x20, 0x7c, 0xbf, 0x41, 0x08, 0x30, 0x0a, 0x00, 0x85, + 0x8c, 0x04, 0xf1, 0xe9, 0x84, 0x03, 0xa3, 0x20, 0x31, 0x46, 0x0c, 0x0e, 0x39, 0x08, 0x41, 0x30, + 0x08, 0x03, 0x73, 0x20, 0x86, 0x60, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0xd8, 0x80, 0x58, + 0x84, 0x02, 0xf0, 0xe9, 0x84, 0x85, 0x1b, 0x36, 0x20, 0x02, 0x81, 0x00, 0x36, 0x20, 0x06, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, 0xa8, 0xc2, 0x96, 0x81, + 0x08, 0x40, 0x61, 0xcb, 0x60, 0x04, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x03, 0x00, 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x18, 0x28, 0x00, + 0x10, 0x3a, 0x12, 0xc5, 0xa7, 0x13, 0x90, 0x8c, 0x82, 0xc4, 0xf0, 0xe9, 0x04, 0x45, 0xa3, 0x20, + 0x41, 0x46, 0x0c, 0x90, 0x33, 0x08, 0x41, 0x30, 0x10, 0x83, 0x73, 0x30, 0x8a, 0x21, 0x18, 0x4d, + 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x36, 0x20, 0x1c, 0xa1, 0x00, 0x7c, 0x3a, 0xc1, 0xf9, 0x86, + 0x0d, 0x88, 0x40, 0x20, 0x80, 0x0d, 0x88, 0x01, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, + 0x85, 0x2d, 0xc3, 0x10, 0xbc, 0xc2, 0x96, 0x81, 0x08, 0x46, 0x61, 0xcb, 0x60, 0x04, 0xa4, 0xb0, + 0x65, 0x40, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x15, 0x80, 0x92, 0xc5, 0x20, 0x7c, 0xbf, 0x41, 0x08, + 0x32, 0x0a, 0x00, 0x85, 0x8e, 0x04, 0xf1, 0xe9, 0x04, 0x24, 0xa3, 0x20, 0x31, 0x46, 0x0c, 0x90, + 0x33, 0x08, 0x41, 0x30, 0x10, 0x83, 0x71, 0x20, 0x86, 0x20, 0x19, 0x4d, 0x08, 0x80, 0xd1, 0x04, + 0x21, 0x18, 0x36, 0x20, 0x16, 0xa1, 0x00, 0x7c, 0x3a, 0x61, 0xe9, 0x86, 0x0d, 0x88, 0x40, 0x20, + 0x80, 0x0d, 0x88, 0x01, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, + 0xa8, 0xc2, 0x96, 0x81, 0x08, 0x40, 0x61, 0xcb, 0x60, 0x04, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x18, 0x28, 0x00, 0x10, 0x42, 0x12, 0xc5, 0xa7, 0x13, 0x12, 0x8d, 0x82, 0xc4, 0xf0, 0xe9, + 0x84, 0x65, 0xa3, 0x20, 0x41, 0x46, 0x0c, 0x12, 0x34, 0x08, 0x41, 0x30, 0x20, 0x03, 0x72, 0x30, + 0x8a, 0x21, 0x60, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x86, 0x0d, 0x08, 0x47, 0x28, 0x00, + 0x9f, 0x4e, 0x70, 0xc0, 0x60, 0xd8, 0x80, 0x08, 0x04, 0x02, 0xd8, 0x80, 0x18, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, 0xbc, 0xc2, 0x96, 0x81, + 0x08, 0x46, 0x61, 0xcb, 0x60, 0x04, 0xa4, 0xb0, 0x65, 0x40, 0x82, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x28, 0x0a, 0x00, 0x54, 0x00, 0x4a, 0x16, + 0x83, 0xf0, 0xfd, 0x06, 0x21, 0xc8, 0x28, 0x00, 0x14, 0x9f, 0x4e, 0x08, 0x2e, 0x0a, 0x66, 0x24, + 0x83, 0x44, 0x5c, 0xa0, 0xa0, 0x4f, 0x27, 0x14, 0x09, 0x05, 0x33, 0x91, 0x41, 0x22, 0x2e, 0x70, + 0x70, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe4, 0x40, 0x0d, 0x0a, 0x33, 0x18, 0x31, 0x30, 0x80, + 0x10, 0x04, 0x03, 0x39, 0x58, 0x03, 0xe1, 0x0c, 0x86, 0x0d, 0x08, 0x48, 0x20, 0x00, 0x9f, 0x4e, + 0x80, 0xc4, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x01, 0xd8, 0x80, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, 0xa8, 0xc2, 0x96, 0xa1, 0x08, 0x66, 0x61, 0xcb, + 0x90, 0x04, 0xb3, 0xb0, 0x65, 0x70, 0x02, 0x53, 0xd8, 0x32, 0x40, 0x81, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x1a, 0x14, 0x05, 0x00, 0x00, + 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x20, 0x28, 0x00, 0x10, 0x9f, 0x4e, 0x08, + 0x30, 0x0a, 0x66, 0x24, 0x83, 0x44, 0x5c, 0xb0, 0xa0, 0x4f, 0x27, 0x14, 0x09, 0x05, 0x33, 0x91, + 0x41, 0x22, 0x2e, 0x78, 0xd0, 0xa7, 0x13, 0x92, 0x8e, 0x82, 0xd9, 0xc8, 0x20, 0x11, 0x17, 0x4c, + 0x38, 0x62, 0x60, 0x00, 0x21, 0x08, 0x06, 0x72, 0xf0, 0x06, 0xc9, 0x1a, 0x8c, 0x18, 0x18, 0x40, + 0x08, 0x82, 0x81, 0x1c, 0xc0, 0x81, 0xc1, 0x06, 0x23, 0x06, 0x06, 0x10, 0x82, 0x60, 0x20, 0x07, + 0x71, 0x30, 0xb4, 0xc1, 0xb0, 0x01, 0x61, 0x0d, 0x05, 0xe0, 0xd3, 0x09, 0x16, 0x1a, 0x0c, 0x1b, + 0x10, 0xc1, 0x30, 0x00, 0x3e, 0x9d, 0x70, 0xa1, 0xc1, 0xb0, 0x01, 0x11, 0x0c, 0x04, 0xb0, 0x01, + 0x31, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, + 0xbc, 0xc2, 0x96, 0xa1, 0x08, 0x66, 0x61, 0xcb, 0x90, 0x04, 0xb3, 0xb0, 0x65, 0x68, 0x82, 0x59, + 0xd8, 0x32, 0x4c, 0x81, 0x29, 0x6c, 0x19, 0xaa, 0xc0, 0x14, 0xb6, 0x0c, 0x57, 0x60, 0x0a, 0x00, + 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x0c, 0x62, 0x10, 0x02, 0x80, 0x24, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x74, 0x1b, 0x4b, 0x08, 0x02, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x4a, 0x12, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0xc0, 0x28, 0x00, 0x14, 0x9f, 0x4e, 0x08, + 0x2c, 0x0a, 0x6e, 0x64, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xf0, 0x00, 0x0c, 0x82, 0x23, 0x83, + 0x5d, 0x0c, 0x1b, 0x10, 0x4a, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, 0xa8, 0xc2, 0x96, 0xa1, 0x08, 0x66, 0x61, 0xcb, + 0x80, 0x04, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x9a, + 0x95, 0x00, 0xdd, 0xc6, 0x12, 0x82, 0x00, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x28, 0x28, 0x00, 0x10, 0x9f, 0x4e, 0x08, 0x30, 0x9f, 0x4e, 0x10, 0x2c, 0x0a, 0x66, 0x63, + 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe8, 0xa0, 0x0c, 0x82, 0x24, 0x83, 0x44, 0x50, 0x71, 0x23, + 0x23, 0x06, 0x06, 0x10, 0x82, 0x60, 0x80, 0x07, 0x66, 0x10, 0x2c, 0x19, 0xec, 0x62, 0xd8, 0x80, + 0x80, 0x82, 0x02, 0xf0, 0xe9, 0x04, 0x08, 0x0c, 0x86, 0x0d, 0x88, 0xa0, 0x20, 0x80, 0x0d, 0x88, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x40, 0x85, 0x2d, 0xc3, 0x10, + 0xbc, 0xc2, 0x96, 0xc1, 0x08, 0x66, 0x61, 0xcb, 0x90, 0x04, 0xb3, 0xb0, 0x65, 0x60, 0x02, 0x53, + 0xd8, 0x32, 0x38, 0x81, 0x29, 0x00, 0x00, 0x00, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xd0, 0x80, 0x32, 0x28, 0xa4, 0x82, 0xa2, 0xc4, 0x08, 0x00, 0x0d, 0x0a, 0x8b, 0x12, + 0x35, 0x40, 0x83, 0xc2, 0x0c, 0x28, 0x3c, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa0, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0xac, 0x85, 0x12, 0xf8, 0x74, 0x82, 0xc3, 0xd1, 0x53, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb5, 0x32, 0xc7, 0x10, 0x40, 0x8c, 0x4f, 0x27, + 0x14, 0x60, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x8c, 0x21, 0x0c, 0x8e, 0x4f, 0x27, 0x1c, 0xdf, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0xe0, 0xd3, 0x09, 0xc8, 0x33, 0x6c, 0x40, 0x04, 0xd4, 0x00, 0xf8, + 0x74, 0x42, 0xf2, 0x0c, 0x1b, 0x10, 0xc1, 0x43, 0x00, 0x3e, 0x9d, 0xa0, 0x38, 0xc3, 0x06, 0x44, + 0x00, 0x0d, 0x80, 0x4f, 0x27, 0x2c, 0xdf, 0xb0, 0x01, 0x11, 0x3c, 0x03, 0xe0, 0xd3, 0x09, 0xcc, + 0x37, 0x6c, 0x40, 0x04, 0x10, 0x01, 0xf8, 0x74, 0x42, 0xf3, 0x0c, 0x1b, 0x10, 0x41, 0x34, 0x00, + 0xc4, 0x01, 0xca, 0x88, 0x81, 0x41, 0x07, 0x20, 0x08, 0x06, 0x05, 0x3b, 0x04, 0x0f, 0x09, 0x89, + 0x41, 0x45, 0x62, 0xf8, 0x74, 0x42, 0x24, 0xd1, 0x62, 0x28, 0xc3, 0x06, 0x44, 0x47, 0x10, 0x80, + 0x4f, 0x27, 0x74, 0x70, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x74, 0x82, 0x07, 0x07, 0x44, + 0x2c, 0xc6, 0xb0, 0x01, 0x21, 0x04, 0x04, 0xe0, 0xd3, 0x09, 0x60, 0x10, 0x07, 0xc3, 0x06, 0x44, + 0x50, 0x10, 0xc0, 0x88, 0x81, 0x31, 0x07, 0x20, 0x08, 0x06, 0x04, 0x68, 0x80, 0xc1, 0xb5, 0x01, + 0x31, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xa0, 0x83, 0x2d, 0x03, 0x11, + 0xd0, 0xc1, 0x96, 0x01, 0x09, 0xe8, 0x60, 0xcb, 0xb0, 0x04, 0x76, 0xb0, 0x65, 0x68, 0x02, 0x53, + 0xd8, 0x32, 0x3c, 0x81, 0x29, 0x6c, 0x19, 0xa2, 0xc0, 0x14, 0xb6, 0x0c, 0x53, 0x80, 0x0b, 0x5b, + 0x86, 0x2a, 0xc8, 0x85, 0x2d, 0xc3, 0x15, 0x98, 0xc2, 0x96, 0x01, 0x0b, 0x76, 0x61, 0xcb, 0xa0, + 0x05, 0xa6, 0xb0, 0x65, 0xd8, 0x02, 0x5c, 0xd8, 0x32, 0x74, 0x01, 0x2f, 0x6c, 0x19, 0xbc, 0xc0, + 0x14, 0xb6, 0x0c, 0x60, 0x10, 0x98, 0xc2, 0x96, 0x41, 0x0c, 0x02, 0x3b, 0xd8, 0x32, 0x8c, 0x41, + 0x60, 0x07, 0x5b, 0x86, 0x32, 0x08, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x83, 0x42, 0x2a, 0x28, 0x4a, 0x8c, 0x00, 0xd0, 0xa0, 0xb0, 0xc8, 0x30, 0x02, 0x00, + 0x33, 0x11, 0xa1, 0x90, 0xa0, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0xa0, + 0xc5, 0x14, 0xf8, 0x74, 0xc2, 0x92, 0x11, 0x53, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb5, 0x32, 0xc7, 0x10, 0x34, 0x8a, 0x4f, 0x27, 0x14, 0xdd, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x30, 0x3e, 0x9d, 0x70, 0x70, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x4f, 0x27, 0x20, + 0xcd, 0xb0, 0x01, 0x11, 0x44, 0x03, 0xe0, 0xd3, 0x09, 0x49, 0x33, 0x6c, 0x40, 0x04, 0x0d, 0x01, + 0xf8, 0x74, 0x82, 0xc2, 0x0c, 0x1b, 0x10, 0x81, 0x33, 0x00, 0x64, 0x01, 0xca, 0x88, 0x81, 0x41, + 0x07, 0x20, 0x08, 0x06, 0x05, 0x39, 0x04, 0x0c, 0x15, 0x86, 0x32, 0x1c, 0x11, 0x38, 0x84, 0x7f, + 0x64, 0xa0, 0x8b, 0x61, 0x03, 0xc2, 0x0a, 0x02, 0x60, 0xc4, 0xc0, 0x98, 0x03, 0x10, 0x04, 0x03, + 0xa2, 0x2e, 0xc2, 0xe0, 0xd9, 0x80, 0x18, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xa0, + 0x83, 0x2d, 0x03, 0x11, 0xd0, 0xc1, 0x96, 0x01, 0x09, 0xe8, 0x60, 0xcb, 0xb0, 0x04, 0x76, 0xb0, + 0x65, 0x68, 0x02, 0x53, 0xd8, 0x32, 0x3c, 0x81, 0x29, 0x6c, 0x19, 0xa2, 0xc0, 0x14, 0xb6, 0x0c, + 0x52, 0xb0, 0x0b, 0x5b, 0x06, 0x2a, 0xe8, 0x85, 0x2d, 0xc3, 0x15, 0xfc, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x00, 0x32, 0x8c, 0x00, 0xd0, + 0xa0, 0x0c, 0x0a, 0xa9, 0xa0, 0x28, 0x31, 0x02, 0x40, 0x83, 0xc2, 0xa2, 0x44, 0x0d, 0xd0, 0xa0, + 0x30, 0x03, 0x0a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa0, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0xac, 0xc5, 0x12, 0xf8, 0x74, 0x82, 0xc3, 0xd1, 0x53, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb5, 0x32, 0xc7, 0x10, 0x34, 0x8c, 0x4f, 0x27, + 0x14, 0x60, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x8c, 0x21, 0x0c, 0x8e, 0x4f, 0x27, 0x1c, 0xdf, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0xe0, 0xd3, 0x09, 0xc8, 0x33, 0x6c, 0x40, 0x04, 0xd5, 0x00, 0xf8, + 0x74, 0x42, 0xf2, 0x0c, 0x1b, 0x10, 0xc1, 0x43, 0x00, 0x3e, 0x9d, 0xa0, 0x38, 0xc3, 0x06, 0x44, + 0x00, 0x0d, 0x80, 0x4f, 0x27, 0x2c, 0xdf, 0xb0, 0x01, 0x11, 0x3c, 0x03, 0xe0, 0xd3, 0x09, 0xcc, + 0x37, 0x6c, 0x40, 0x04, 0x10, 0x01, 0xf8, 0x74, 0x42, 0xf3, 0x0c, 0x1b, 0x10, 0x41, 0x34, 0x00, + 0xc4, 0x01, 0xca, 0x88, 0x81, 0x41, 0x07, 0x20, 0x08, 0x06, 0x05, 0x3b, 0x04, 0x0f, 0x09, 0x89, + 0x41, 0x45, 0x62, 0xf8, 0x74, 0x42, 0x24, 0xd1, 0x62, 0x28, 0xc3, 0x06, 0x84, 0x47, 0x10, 0x80, + 0x4f, 0x27, 0x78, 0x70, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x74, 0xc2, 0x07, 0x07, 0x44, + 0x2c, 0xc6, 0xb0, 0x01, 0x21, 0x04, 0x04, 0xe0, 0xd3, 0x09, 0x61, 0x10, 0x07, 0xc3, 0x06, 0x44, + 0x50, 0x10, 0xc0, 0x88, 0x81, 0x31, 0x07, 0x20, 0x08, 0x06, 0x04, 0x68, 0x84, 0xc1, 0xb5, 0x01, + 0x31, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xa0, 0x83, 0x2d, 0x03, 0x11, + 0xd0, 0xc1, 0x96, 0x01, 0x09, 0xe8, 0x60, 0xcb, 0xb0, 0x04, 0x76, 0xb0, 0x65, 0x68, 0x02, 0x53, + 0xd8, 0x32, 0x3c, 0x81, 0x29, 0x6c, 0x19, 0xa2, 0xc0, 0x14, 0xb6, 0x0c, 0x53, 0x80, 0x0b, 0x5b, + 0x86, 0x2a, 0xc8, 0x85, 0x2d, 0xc3, 0x15, 0x98, 0xc2, 0x96, 0x01, 0x0b, 0x76, 0x61, 0xcb, 0xa0, + 0x05, 0xa6, 0xb0, 0x65, 0xd8, 0x02, 0x5c, 0xd8, 0x32, 0x74, 0x01, 0x2f, 0x6c, 0x19, 0xbc, 0xc0, + 0x14, 0xb6, 0x0c, 0x60, 0x10, 0x98, 0xc2, 0x96, 0x41, 0x0c, 0x02, 0x3b, 0xd8, 0x32, 0x8c, 0x41, + 0x60, 0x07, 0x5b, 0x86, 0x32, 0x08, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x14, 0x52, 0x41, 0x51, 0x62, 0x04, 0x80, 0x06, 0x85, 0x05, + 0x33, 0x11, 0xa1, 0x90, 0xa0, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0x9c, + 0x85, 0x14, 0xf8, 0x74, 0x82, 0x82, 0xd1, 0x52, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb5, 0x32, 0xc7, 0x10, 0x28, 0x89, 0x4f, 0x27, 0x14, 0xdc, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x2c, 0x3e, 0x9d, 0x70, 0x6c, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x4f, 0x27, 0x20, + 0xcc, 0xb0, 0x01, 0x11, 0x44, 0x03, 0xe0, 0xd3, 0x09, 0x09, 0x33, 0x6c, 0x40, 0x04, 0x0c, 0x01, + 0xf8, 0x74, 0x82, 0xb2, 0x0c, 0x1b, 0x10, 0x41, 0x33, 0x00, 0x54, 0x01, 0xca, 0x88, 0x81, 0x41, + 0x07, 0x20, 0x08, 0x06, 0xc5, 0x38, 0x04, 0x0c, 0x15, 0x86, 0x32, 0x1c, 0x11, 0x4c, 0x84, 0x7f, + 0x64, 0xa0, 0x8b, 0x61, 0x03, 0xc2, 0x0a, 0x02, 0x60, 0xc4, 0xc0, 0x98, 0x03, 0x10, 0x04, 0x03, + 0x82, 0x2e, 0xc0, 0xe0, 0xd9, 0x80, 0x18, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xa0, + 0x83, 0x2d, 0x03, 0x11, 0xd0, 0xc1, 0x96, 0x01, 0x09, 0xe8, 0x60, 0xcb, 0xb0, 0x04, 0x76, 0xb0, + 0x65, 0x68, 0x02, 0x53, 0xd8, 0x32, 0x3c, 0x81, 0x29, 0x6c, 0x19, 0xa2, 0xc0, 0x14, 0xb6, 0x0c, + 0x52, 0xb0, 0x0b, 0x5b, 0x06, 0x2a, 0xe8, 0x85, 0x2d, 0xc3, 0x15, 0xfc, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x50, 0x62, + 0x04, 0x60, 0x34, 0xa0, 0x0c, 0x88, 0x37, 0x07, 0x21, 0x16, 0x29, 0x31, 0x16, 0x64, 0x31, 0x16, + 0x01, 0x04, 0xc4, 0x40, 0x86, 0xd1, 0x00, 0xaa, 0xcd, 0x41, 0x9c, 0xc5, 0x59, 0x9c, 0x05, 0x58, + 0x50, 0xa2, 0x14, 0x88, 0x37, 0x07, 0x91, 0x16, 0x63, 0x31, 0x16, 0x64, 0x31, 0x07, 0x21, 0x16, + 0x69, 0x31, 0x16, 0x64, 0x31, 0x16, 0x01, 0x04, 0xc5, 0x40, 0x89, 0x62, 0x20, 0xde, 0x1c, 0x44, + 0x5b, 0x8c, 0xc5, 0x58, 0x90, 0xc5, 0x1c, 0x84, 0x58, 0xb4, 0xc5, 0x58, 0x90, 0xc5, 0x58, 0x04, + 0x10, 0x18, 0x03, 0x19, 0xc6, 0x08, 0x40, 0x10, 0x04, 0xf1, 0x8f, 0x6a, 0x73, 0x10, 0x67, 0x71, + 0x16, 0x67, 0x11, 0x17, 0xc4, 0x9b, 0x83, 0x60, 0x89, 0xb1, 0x18, 0x0b, 0xb2, 0x98, 0x83, 0x10, + 0x0b, 0x96, 0x18, 0x0b, 0xb2, 0x18, 0x8b, 0x00, 0x82, 0x63, 0x00, 0x00, 0x3e, 0x9d, 0x90, 0x9d, + 0x01, 0x05, 0x00, 0x92, 0xda, 0x20, 0x7c, 0x46, 0x41, 0x08, 0x28, 0xa8, 0x15, 0x9f, 0x4e, 0x10, + 0xd6, 0x80, 0x82, 0x5a, 0xf1, 0xe9, 0x04, 0x42, 0x0d, 0x28, 0xa8, 0x95, 0x39, 0x86, 0xe2, 0xf3, + 0x06, 0x19, 0x02, 0x62, 0x1b, 0x64, 0x08, 0x86, 0x6d, 0xd8, 0x80, 0x18, 0x83, 0xa0, 0x00, 0x06, + 0x19, 0x34, 0x04, 0x1b, 0x64, 0x08, 0x0e, 0x6c, 0x90, 0x21, 0x30, 0x30, 0x9f, 0x4e, 0x30, 0x83, + 0x3a, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x3c, 0x06, 0x1b, 0x64, 0x08, 0x16, 0x6c, + 0x90, 0x21, 0x50, 0x30, 0x9f, 0x4e, 0x50, 0x03, 0x3b, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, + 0x19, 0x30, 0xe8, 0x1a, 0x64, 0x08, 0x9e, 0x6b, 0x90, 0x21, 0x70, 0x2e, 0x9f, 0x4e, 0x70, 0x83, + 0x3b, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x36, 0x20, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x03, 0x11, 0xd0, 0xc1, 0x96, 0xc1, 0x08, 0xe8, 0x60, 0xcb, + 0x80, 0x04, 0x74, 0xb0, 0x65, 0x60, 0x02, 0x3a, 0xd8, 0x32, 0x44, 0x01, 0x1d, 0x6c, 0x19, 0xac, + 0x80, 0x0e, 0xb6, 0x0c, 0x5b, 0x40, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x81, 0x4f, 0x27, 0x0c, 0x11, 0x05, 0x00, 0x92, 0xc4, 0x20, + 0x7c, 0xc6, 0x41, 0x08, 0x34, 0x0a, 0x12, 0x63, 0xd8, 0x80, 0x30, 0x82, 0x01, 0xd8, 0x80, 0x18, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x03, 0x11, 0x88, 0xc3, 0x96, 0xa1, + 0x08, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x81, 0x4f, 0x27, 0x0c, 0x11, 0x05, 0x00, 0x92, 0xc4, 0x20, 0x7c, 0xc6, 0x41, 0x08, + 0x36, 0x0a, 0x74, 0x25, 0x83, 0x44, 0x0c, 0x1b, 0x10, 0x47, 0x30, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x03, 0x11, 0x8c, 0xc3, 0x96, 0xc1, + 0x08, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, + 0x0d, 0x20, 0xde, 0x1c, 0x04, 0x58, 0xa4, 0x44, 0x58, 0x84, 0xc5, 0x1c, 0x04, 0x58, 0xa0, 0x44, + 0x4a, 0x84, 0xc5, 0x58, 0x04, 0x10, 0x08, 0x04, 0x25, 0x4a, 0x81, 0x78, 0x73, 0x10, 0x28, 0x51, + 0x16, 0x61, 0x11, 0x16, 0x73, 0x10, 0x60, 0x81, 0x12, 0x65, 0x11, 0x16, 0x63, 0x11, 0x40, 0x20, + 0x14, 0x94, 0x28, 0x06, 0xe2, 0xcd, 0x41, 0xac, 0x44, 0x5a, 0x84, 0x45, 0x58, 0xcc, 0x41, 0x80, + 0x05, 0x4a, 0xa4, 0x45, 0x58, 0x8c, 0x45, 0x00, 0x81, 0x60, 0x90, 0xae, 0x04, 0x00, 0x00, 0x00, + 0x3e, 0x9d, 0x10, 0x7d, 0x14, 0x00, 0x48, 0x4a, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xa0, 0xa9, 0x56, + 0x7c, 0x3a, 0x81, 0x1a, 0x03, 0x0a, 0x6a, 0xc5, 0xa7, 0x13, 0x2c, 0x31, 0xa0, 0xa0, 0x56, 0x7c, + 0x3a, 0x01, 0x0b, 0x03, 0x0a, 0x6a, 0x65, 0x90, 0xe1, 0x28, 0xae, 0x41, 0x86, 0x80, 0xb8, 0x06, + 0x19, 0x82, 0xe1, 0x1a, 0x36, 0x20, 0x96, 0xa0, 0x00, 0x06, 0x19, 0x14, 0xc4, 0x1a, 0x64, 0x08, + 0x0e, 0x6b, 0x90, 0x21, 0x30, 0x2c, 0x9f, 0x4e, 0x70, 0xde, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x02, + 0x18, 0x64, 0x70, 0x18, 0x6b, 0x90, 0x21, 0x58, 0xac, 0x41, 0x86, 0x40, 0xb1, 0x7c, 0x3a, 0x41, + 0x82, 0x83, 0x61, 0x03, 0x22, 0x10, 0x0a, 0xc0, 0xa7, 0x13, 0x26, 0x35, 0x18, 0x36, 0x20, 0x02, + 0x4c, 0x00, 0x36, 0x20, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, + 0x87, 0x2d, 0x83, 0x12, 0xd0, 0xc1, 0x96, 0xc1, 0x09, 0xe8, 0x60, 0xcb, 0x30, 0x05, 0x74, 0xb0, + 0x65, 0xc0, 0x02, 0x3a, 0xd8, 0x32, 0x68, 0x01, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x01, 0x00, 0x3e, 0x9d, 0x40, 0x48, 0x14, 0x00, 0x48, 0x16, + 0x83, 0xf0, 0x19, 0x05, 0x21, 0x48, 0x43, 0x07, 0x3e, 0x9d, 0x20, 0x40, 0xc3, 0x06, 0x44, 0x20, + 0x14, 0x80, 0x4f, 0x27, 0x0c, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x83, 0x11, 0x8c, 0xc3, 0x96, 0x01, + 0x09, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x01, 0x00, + 0x3e, 0x9d, 0x40, 0x48, 0x14, 0x00, 0x48, 0x16, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xf0, 0xe9, 0x84, + 0x40, 0x19, 0x36, 0x20, 0x82, 0x63, 0x00, 0x7c, 0x3a, 0x41, 0x60, 0x86, 0x0d, 0x88, 0xe0, 0x10, + 0x80, 0x0d, 0x88, 0x01, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x43, 0x11, + 0x88, 0xc3, 0x96, 0xe1, 0x08, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xa4, 0x2b, 0x01, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1b, 0x06, 0x71, 0xf8, + 0x85, 0x35, 0x00, 0x00, 0x29, 0xe8, 0xc2, 0xa7, 0x13, 0x8a, 0x89, 0x02, 0x00, 0x49, 0x63, 0x10, + 0x3e, 0xa3, 0x20, 0x04, 0x3e, 0x9d, 0x10, 0x34, 0xc3, 0x06, 0x44, 0x60, 0x04, 0x80, 0x4f, 0x27, + 0x08, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0x00, 0x87, 0x2d, 0x83, 0x11, 0x94, 0xc3, 0x96, 0x01, 0x09, 0xc8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, + 0x89, 0x9d, 0x3d, 0x38, 0x86, 0x00, 0x00, 0x84, 0x60, 0xc8, 0xc0, 0xb0, 0x1c, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, + 0x20, 0x04, 0x42, 0x30, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, + 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, + 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0xcd, 0x21, 0xb1, + 0xe3, 0x06, 0x49, 0x11, 0x08, 0x80, 0x10, 0x08, 0xc1, 0x30, 0x9a, 0x10, 0x04, 0xa3, 0x09, 0x02, + 0x90, 0x81, 0x61, 0xa7, 0x23, 0x90, 0x60, 0x40, 0x38, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0b, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0c, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0e, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0d, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xb0, 0x14, 0x38, 0x80, 0x4c, 0x81, + 0x04, 0xef, 0x14, 0x58, 0xd0, 0x58, 0x81, 0x06, 0xce, 0x15, 0x78, 0x20, 0x5f, 0x81, 0x08, 0xde, + 0x16, 0x98, 0x50, 0x6f, 0x81, 0x0a, 0xa4, 0x17, 0xb8, 0xa0, 0x7e, 0x81, 0x0c, 0x83, 0x18, 0xd8, + 0x20, 0x8a, 0x81, 0x0e, 0xca, 0x18, 0xf8, 0x00, 0x8f, 0x81, 0x10, 0xb1, 0x19, 0x18, 0xa1, 0xa9, + 0x81, 0x12, 0xb0, 0x1a, 0x38, 0x71, 0xad, 0x81, 0x14, 0xbc, 0x1b, 0x58, 0x51, 0xbe, 0x81, 0x16, + 0xd2, 0x1c, 0x78, 0xc1, 0xde, 0x81, 0x19, 0x84, 0x1e, 0xb8, 0xc1, 0xe9, 0x81, 0x1d, 0xb4, 0x1e, + 0xf8, 0x91, 0xec, 0x81, 0x21, 0xde, 0x1e, 0x38, 0x32, 0xef, 0x81, 0x25, 0x8f, 0x1f, 0x78, 0xb2, + 0xfa, 0x81, 0x29, 0xc7, 0x1f, 0xb8, 0x02, 0xfe, 0x81, 0x2d, 0xf7, 0x1f, 0xf8, 0xe2, 0x08, 0x82, + 0x30, 0xa3, 0x20, 0x18, 0xd3, 0x0b, 0x82, 0x33, 0xe0, 0x20, 0x58, 0x43, 0x18, 0x82, 0x37, 0xb2, + 0x21, 0x98, 0x03, 0x1e, 0x82, 0x3b, 0x85, 0x22, 0xd8, 0xb3, 0x2a, 0x82, 0x3f, 0xe2, 0x22, 0x18, + 0x94, 0x39, 0x82, 0x43, 0xb2, 0x23, 0x58, 0x24, 0x3d, 0x82, 0x47, 0xeb, 0x23, 0x98, 0xc4, 0x48, + 0x82, 0x4a, 0xb0, 0x24, 0xb8, 0x44, 0x4e, 0x82, 0x4c, 0xfd, 0x24, 0xd8, 0x64, 0x5a, 0x82, 0x4f, + 0xfe, 0x25, 0x18, 0x85, 0x6b, 0x82, 0x52, 0x92, 0x27, 0x38, 0xc5, 0x7c, 0x82, 0x54, 0x9e, 0x28, + 0x58, 0xd5, 0x8a, 0x82, 0x56, 0xbd, 0x28, 0x78, 0xf5, 0x8f, 0x82, 0x58, 0x95, 0x29, 0x98, 0xa5, + 0x9a, 0x82, 0x5a, 0xc4, 0x29, 0xb8, 0xa5, 0x9c, 0x82, 0x5c, 0xd0, 0x29, 0xd8, 0x65, 0x9d, 0x82, + 0x5e, 0xdc, 0x29, 0xf8, 0x35, 0x9e, 0x82, 0x60, 0xea, 0x29, 0x18, 0x16, 0x9f, 0x82, 0x62, 0xf8, + 0x29, 0x38, 0xf6, 0x9f, 0x82, 0x64, 0x8a, 0x2a, 0x58, 0x06, 0xa9, 0x82, 0x66, 0x96, 0x2a, 0x78, + 0xc6, 0xa9, 0x82, 0x68, 0xa2, 0x2a, 0x98, 0x86, 0xaa, 0x82, 0x6a, 0xae, 0x2a, 0xb8, 0x46, 0xab, + 0x82, 0x6c, 0xba, 0x2a, 0xd8, 0x06, 0xac, 0x82, 0x6e, 0xc6, 0x2a, 0xf8, 0xc6, 0xac, 0x82, 0x70, + 0xd2, 0x2a, 0x18, 0x87, 0xad, 0x82, 0x72, 0xde, 0x2a, 0x38, 0x47, 0xae, 0x82, 0x74, 0xea, 0x2a, + 0x58, 0x07, 0xaf, 0x82, 0x76, 0xf6, 0x2a, 0x78, 0xc7, 0xaf, 0x82, 0x78, 0x82, 0x2b, 0x98, 0x87, + 0xb8, 0x82, 0x7a, 0x8e, 0x2b, 0xb8, 0x47, 0xb9, 0x82, 0x7c, 0x9a, 0x2b, 0xd8, 0x07, 0xba, 0x82, + 0x7e, 0xa6, 0x2b, 0xf8, 0xc7, 0xba, 0x82, 0x80, 0x01, 0xb2, 0x2b, 0x18, 0x18, 0x80, 0xbb, 0x82, + 0x82, 0x01, 0xbe, 0x2b, 0x38, 0x18, 0x40, 0xbc, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x0c, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00, 0x12, 0x03, 0x94, 0x38, 0x3a, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x18, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x8b, 0x0f, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x21, 0x10, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x38, 0x10, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x4d, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x68, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x83, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9e, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x8e, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb9, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd4, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xee, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x08, 0x11, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x22, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x40, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x5e, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x7c, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x5c, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x9a, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xb8, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x94, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xd6, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf2, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xca, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x0e, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2a, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xfe, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x42, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5a, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x2a, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x72, 0x12, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8c, 0x12, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x58, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xaa, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc5, 0x12, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x8e, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xe4, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xc6, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x20, 0x13, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x3d, 0x13, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x5e, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x7a, 0x13, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x3a, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x9a, 0x13, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xb5, 0x13, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x72, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xd4, 0x13, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xee, 0x13, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xa8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x0c, 0x14, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x27, 0x14, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xde, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x46, 0x14, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x62, 0x14, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x16, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x82, 0x14, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9f, 0x14, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x50, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xc0, 0x14, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdc, 0x14, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x8a, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xfc, 0x14, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa9, 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x17, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xc2, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x36, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x4c, 0x15, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xf4, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x62, 0x15, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x83, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x27, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xa8, 0x15, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xcf, 0x15, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0x70, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xfa, 0x15, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x9a, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x20, 0x16, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xbe, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x4a, 0x16, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xe7, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x76, 0x16, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x11, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xa6, 0x16, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc7, 0x16, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x5f, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xec, 0x16, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x13, 0x17, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0xa8, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x3e, 0x17, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xd2, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x64, 0x17, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xf6, 0x06, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x8e, 0x17, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xba, 0x17, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x49, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xea, 0x17, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x09, 0x18, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x95, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x2c, 0x18, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x4b, 0x18, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xd4, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x6e, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf6, 0x07, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x93, 0x18, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x19, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xbc, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe1, 0x18, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x64, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x0a, 0x19, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8c, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2f, 0x19, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xaf, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x54, 0x19, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xd2, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x73, 0x19, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xef, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x92, 0x19, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xb4, 0x19, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x2c, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xd3, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4a, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf1, 0x19, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x66, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x0c, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x27, 0x1a, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x99, 0x09, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x3e, 0x1a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xae, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5e, 0x1a, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7c, 0x1a, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xe8, 0x09, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa2, 0x1a, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x0c, 0x0a, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc6, 0x1a, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2e, 0x0a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf0, 0x1a, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x56, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x12, 0x1b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x34, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x96, 0x0a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x4f, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6b, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc9, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x87, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe3, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa4, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xfe, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc1, 0x1b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x19, 0x0b, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe4, 0x1b, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3a, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x08, 0x1c, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2c, 0x1c, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x7e, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x51, 0x1c, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x76, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc4, 0x0b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x92, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xde, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xaf, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xf9, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xcc, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x14, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xea, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x30, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x08, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x24, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x66, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x41, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x81, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5e, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x9c, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7c, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9a, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xd4, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb6, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd3, 0x1d, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x09, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf0, 0x1d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0e, 0x1e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x40, 0x0d, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x29, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x59, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x45, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x73, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x61, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x7e, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xa8, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x9a, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xb7, 0x1e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xdd, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xd4, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf2, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x14, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x0e, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x49, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x48, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x64, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x66, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x80, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x84, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x9c, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa0, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xb6, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xbd, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xda, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xec, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf8, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x16, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x24, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x24, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x32, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x3e, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x50, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, + 0x1b, 0x08, 0x00, 0x00, 0x12, 0x03, 0x94, 0xe0, 0x88, 0x00, 0x00, 0x00, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2e, 0x70, 0x30, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, + 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x30, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, + 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, + 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, + 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, + 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, + 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, + 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x73, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, + 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, + 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, + 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, + 0x74, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, + 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, + 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, 0x32, 0x6c, 0x6c, 0x76, + 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x2e, 0x66, 0x61, 0x64, + 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, + 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x78, 0x38, 0x36, 0x5f, + 0x36, 0x34, 0x2d, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x6d, 0x61, 0x63, 0x6f, 0x73, + 0x78, 0x31, 0x35, 0x2e, 0x30, 0x2e, 0x30, 0x2f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x6d, 0x69, + 0x6b, 0x65, 0x2f, 0x43, 0x6c, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x4c, 0x75, 0x69, 0x73, 0x61, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x2f, 0x73, 0x72, + 0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, + 0x61, 0x63, 0x6b, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x62, 0x75, 0x69, + 0x6c, 0x74, 0x69, 0x6e, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x73, 0x2e, 0x64, 0x61, 0x72, 0x77, 0x69, 0x6e, 0x2e, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x2e, + 0x6c, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x6c, + 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x2e, 0x70, 0x30, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x30, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, + 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, + 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, + 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, + 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x73, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, + 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, + 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, + 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, + 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, + 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, + 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, + 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, + 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, + 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x4c, 0x5f, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, 0x32, + 0x5f, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x5f, 0x6c, + 0x6c, 0x76, 0x6d, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, + 0x65, 0x2e, 0x66, 0x61, 0x64, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x5f, 0x6c, 0x6c, 0x76, + 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.linux.arm64.inl b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.linux.arm64.inl new file mode 100644 index 000000000..2d4a5014c --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.linux.arm64.inl @@ -0,0 +1,2038 @@ + +static const unsigned char luisa_fallback_backend_device_builtin_module[32552] = { + 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, + 0x4a, 0x59, 0xbe, 0x66, 0xdd, 0xfb, 0xb5, 0x7f, 0x0b, 0x51, 0x80, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x21, 0x0c, 0x00, 0x00, 0x56, 0x15, 0x00, 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x1c, 0x45, 0x02, + 0x42, 0x92, 0x0b, 0x42, 0xe4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x72, 0x88, + 0x48, 0x70, 0xc4, 0x21, 0x23, 0x44, 0x12, 0x87, 0x8c, 0x10, 0x41, 0x92, 0x02, 0x64, 0xc8, 0x08, + 0xb1, 0x14, 0x20, 0x43, 0x46, 0x88, 0x20, 0xc9, 0x01, 0x32, 0x72, 0x84, 0x58, 0x0e, 0x90, 0x91, + 0x23, 0x44, 0x90, 0xa1, 0x82, 0xa2, 0x02, 0x19, 0xc3, 0x07, 0xcb, 0x15, 0x19, 0x72, 0x8c, 0x8c, + 0x25, 0x10, 0x1d, 0x3a, 0x74, 0xc8, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, + 0x22, 0x66, 0x04, 0x10, 0xb2, 0x42, 0x82, 0xc9, 0x11, 0x52, 0x42, 0x82, 0xc9, 0x91, 0x71, 0xc2, + 0x50, 0x48, 0x0a, 0x09, 0x26, 0x47, 0xc6, 0x05, 0x42, 0x72, 0x26, 0x08, 0x54, 0x81, 0x46, 0x00, + 0x0a, 0x11, 0x00, 0x00, 0x00, 0x73, 0x04, 0xa0, 0x50, 0x86, 0xc0, 0x00, 0x50, 0x86, 0x00, 0x00, + 0x30, 0x03, 0x50, 0x04, 0x03, 0x60, 0x8e, 0x00, 0x24, 0xe6, 0x08, 0xc0, 0xa0, 0x14, 0x08, 0xc0, + 0x20, 0x91, 0xb8, 0x46, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x62, 0x71, 0x80, 0x09, 0x47, 0x84, 0xc1, + 0x60, 0x30, 0x94, 0x62, 0x01, 0x18, 0x24, 0x12, 0x49, 0x60, 0x28, 0x46, 0x00, 0x30, 0x48, 0x24, + 0x1a, 0x29, 0x30, 0x28, 0x46, 0x00, 0x30, 0x48, 0x24, 0x1e, 0xc5, 0x40, 0x00, 0x06, 0x89, 0x44, + 0xa2, 0x18, 0x0b, 0xc0, 0x20, 0x91, 0x48, 0x94, 0x23, 0x00, 0x18, 0x24, 0x12, 0x89, 0x46, 0x39, + 0x02, 0x80, 0x41, 0x22, 0x91, 0x78, 0x94, 0x22, 0x00, 0x48, 0x00, 0x00, 0xa5, 0x58, 0x00, 0x12, + 0x06, 0x43, 0x31, 0x02, 0x80, 0x04, 0xc0, 0x00, 0x28, 0xc6, 0x02, 0x90, 0x30, 0x18, 0x0c, 0xe5, + 0x08, 0x00, 0x12, 0x00, 0x00, 0x00, 0x50, 0x92, 0x05, 0x20, 0x61, 0x30, 0x18, 0x0c, 0x06, 0x43, + 0x41, 0x02, 0x80, 0x04, 0x00, 0x00, 0x30, 0x00, 0x8a, 0xb2, 0x00, 0x24, 0x0c, 0x06, 0x83, 0xc1, + 0x60, 0x30, 0x94, 0x63, 0x01, 0x48, 0x18, 0x0c, 0x06, 0x43, 0x61, 0x16, 0x80, 0x84, 0xc1, 0x60, + 0x30, 0x18, 0x0c, 0x06, 0x83, 0xa1, 0x34, 0x0b, 0x40, 0xc2, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, + 0xc1, 0x60, 0x28, 0xc4, 0x02, 0x90, 0x48, 0x94, 0x62, 0x01, 0x48, 0x24, 0x12, 0xc5, 0x08, 0x00, + 0x12, 0x80, 0x04, 0xa0, 0x18, 0x0b, 0x40, 0x22, 0x91, 0x48, 0x94, 0x22, 0x00, 0x48, 0x24, 0x00, + 0x85, 0x08, 0x00, 0x12, 0x80, 0x62, 0x04, 0x00, 0x00, 0x43, 0x02, 0x50, 0x8a, 0x00, 0x00, 0x90, + 0x00, 0x14, 0x22, 0x00, 0x48, 0x24, 0xe6, 0x08, 0x82, 0x42, 0x04, 0x00, 0x89, 0x54, 0x19, 0x12, + 0x80, 0x44, 0x19, 0x06, 0x80, 0x41, 0x19, 0x0c, 0x00, 0x43, 0x21, 0x12, 0x80, 0x44, 0xa2, 0x10, + 0x03, 0xc0, 0x60, 0x50, 0x08, 0x03, 0xc0, 0x60, 0x28, 0x43, 0x22, 0x91, 0x98, 0x23, 0x80, 0xca, + 0x20, 0x93, 0xc9, 0x86, 0x11, 0x08, 0xa3, 0x0c, 0x06, 0x03, 0x6d, 0x18, 0x41, 0x48, 0xca, 0x60, + 0xb3, 0xd9, 0x86, 0x11, 0x04, 0x39, 0x28, 0x03, 0x0e, 0x87, 0x1b, 0x08, 0x18, 0x46, 0x10, 0x8c, + 0x39, 0x02, 0x64, 0x18, 0x81, 0x48, 0x86, 0x11, 0x06, 0x63, 0x18, 0x61, 0x48, 0x6e, 0x92, 0xa6, + 0x88, 0x12, 0x26, 0x7f, 0x43, 0x9a, 0x61, 0x21, 0x24, 0x89, 0x5d, 0x9c, 0x09, 0x11, 0x80, 0x01, + 0x00, 0x70, 0x8b, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x40, 0xe3, 0x34, 0x88, 0x30, 0x24, 0x12, 0x89, + 0x83, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xf7, 0x98, 0x20, 0x22, 0x88, 0x15, 0xc0, 0xd0, 0x40, 0xa3, + 0x05, 0x33, 0x20, 0x71, 0x90, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x1e, 0x13, 0x44, 0x04, 0x11, 0x22, + 0x13, 0x42, 0x0c, 0x06, 0x83, 0xc1, 0x90, 0x48, 0x0c, 0x6f, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xdf, + 0x63, 0x82, 0x88, 0x20, 0x56, 0x00, 0x0b, 0x91, 0x09, 0x09, 0x42, 0x62, 0x32, 0x18, 0x8e, 0x92, + 0xa6, 0x88, 0x12, 0x26, 0x5f, 0x13, 0x04, 0x62, 0x11, 0x1b, 0x69, 0x02, 0x1a, 0x81, 0x40, 0x86, + 0x91, 0xc7, 0xe3, 0x25, 0x00, 0x46, 0x48, 0xa4, 0x8c, 0x30, 0x48, 0x01, 0x51, 0x18, 0x00, 0x00, + 0xcf, 0x02, 0x00, 0x00, 0x1b, 0x48, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, + 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x86, 0x20, 0x0c, + 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, + 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, + 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, + 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, + 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, + 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, + 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, + 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, + 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, + 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, + 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, + 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, + 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, + 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, + 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x73, 0x28, 0x07, 0x77, 0x28, + 0x07, 0x79, 0x48, 0x87, 0x71, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, + 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00, 0xd6, 0xc0, + 0x1c, 0xe0, 0xa1, 0x0d, 0xc2, 0x41, 0x1e, 0xda, 0xc1, 0x1e, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1d, + 0xca, 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0x20, 0x1c, 0xd8, 0xa0, 0x0d, 0xcc, + 0xa1, 0x1d, 0xec, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, + 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, + 0x07, 0x60, 0x03, 0x22, 0x04, 0xc0, 0x02, 0x90, 0x02, 0x50, 0x6d, 0x40, 0x06, 0x01, 0x58, 0x00, + 0x52, 0x00, 0xaa, 0x0d, 0x08, 0x31, 0x00, 0x0b, 0x40, 0x0a, 0x00, 0x1d, 0x6c, 0x78, 0x8a, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x80, 0x53, 0x00, 0xfc, 0x00, 0xf8, 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, + 0x85, 0x61, 0x03, 0x61, 0x04, 0x00, 0x1f, 0x6c, 0x20, 0x0e, 0x01, 0x58, 0x36, 0x20, 0x88, 0x00, + 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0x81, 0x44, 0x92, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x01, + 0x30, 0x05, 0xc0, 0x0f, 0x00, 0x38, 0x00, 0xfe, 0x00, 0x90, 0x80, 0x3e, 0x08, 0x6c, 0x21, 0x08, + 0xc2, 0x40, 0x20, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, 0xc0, 0x1c, 0xea, + 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, + 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, + 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, + 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, + 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, + 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, 0x87, + 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, + 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, + 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, 0xce, + 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, + 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, + 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, 0x07, + 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, 0x00, 0x82, 0x1e, 0xc2, 0x41, + 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, 0xc6, 0x01, 0x1e, 0xea, 0x01, 0x38, 0x87, 0x72, 0x70, + 0x87, 0x72, 0x90, 0x87, 0x74, 0x18, 0x07, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, + 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, + 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x20, 0x1c, 0xe4, 0xa1, 0x1d, 0xec, 0x01, 0x0f, 0xd8, 0x60, 0x0d, + 0xdc, 0xa1, 0x1c, 0xde, 0xc1, 0x1d, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xc2, 0x81, 0x0d, 0xda, + 0xc0, 0x1c, 0xda, 0xc1, 0x1e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, + 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, + 0x87, 0x72, 0x00, 0x36, 0x14, 0x0a, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0xc8, 0x8f, 0xe5, 0xff, 0xff, + 0xff, 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, 0x90, 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, + 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, + 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, + 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, + 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, + 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, + 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, + 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, + 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, + 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, + 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, + 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, + 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x83, + 0x71, 0x80, 0x87, 0x7a, 0x00, 0xce, 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, 0xe4, 0x21, 0x1d, 0xc6, 0x01, + 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, + 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x03, 0x73, 0x80, 0x87, 0x36, 0x08, 0x07, + 0x79, 0x68, 0x07, 0x7b, 0xc0, 0x03, 0x36, 0x58, 0x03, 0x77, 0x28, 0x87, 0x77, 0x70, 0x07, 0x36, + 0x58, 0x03, 0x7b, 0xc0, 0x83, 0x70, 0x60, 0x83, 0x36, 0x30, 0x87, 0x76, 0xb0, 0x07, 0x80, 0xa8, + 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, + 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0x0d, 0xf2, 0xc1, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x48, 0x44, 0x38, 0xc0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, 0x43, + 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, + 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, + 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, + 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, + 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, + 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, + 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, + 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, + 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, + 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, + 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, 0xeb, 0xd0, 0x06, 0xf0, 0x20, 0x0f, + 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, + 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, + 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, + 0xe7, 0x50, 0x0e, 0xee, 0x50, 0x0e, 0xf2, 0x90, 0x0e, 0xe3, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, + 0x70, 0x0e, 0xe5, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xe5, 0x10, 0x0e, 0xf4, 0x50, 0x0f, 0xf2, 0x50, + 0x0e, 0xf3, 0x00, 0xac, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0x84, 0x83, 0x3c, 0xb4, 0x83, 0x3d, 0xe0, + 0x01, 0x1b, 0xac, 0x81, 0x3b, 0x94, 0xc3, 0x3b, 0xb8, 0x03, 0x1b, 0xac, 0x81, 0x3d, 0xe0, 0x41, + 0x38, 0xb0, 0x41, 0x1b, 0x98, 0x43, 0x3b, 0xd8, 0x03, 0x40, 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, + 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, + 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0x06, 0xa2, 0x09, 0x00, 0x52, 0xd8, 0x40, 0x38, 0x02, + 0x40, 0x0a, 0x1b, 0x88, 0x67, 0x00, 0x48, 0x61, 0x03, 0x01, 0x11, 0x00, 0x29, 0x6c, 0x40, 0xa2, + 0x01, 0x58, 0x00, 0x52, 0x00, 0xaa, 0x0d, 0x85, 0x54, 0x04, 0x19, 0xb2, 0x81, 0x98, 0x0a, 0x80, + 0x14, 0x36, 0x14, 0x94, 0x11, 0x64, 0xc8, 0x06, 0xa4, 0x22, 0x80, 0x05, 0x20, 0x05, 0x80, 0x0e, + 0x36, 0x1c, 0xd6, 0x00, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0xe1, 0xb8, 0x08, 0x80, 0x14, 0x82, + 0x5b, 0x38, 0xa1, 0x0d, 0x08, 0x56, 0x00, 0x0b, 0x40, 0x0a, 0x00, 0x1d, 0x6c, 0x38, 0xb2, 0x02, + 0x20, 0x85, 0xe0, 0x16, 0x4e, 0x68, 0x03, 0xa2, 0x11, 0xc0, 0x02, 0x90, 0x02, 0x50, 0x6d, 0x40, + 0xb6, 0x02, 0x58, 0x00, 0x52, 0x00, 0xaa, 0x0d, 0x08, 0x67, 0x00, 0x0b, 0x40, 0x0a, 0x00, 0x1d, + 0x6c, 0x38, 0x3a, 0x03, 0x20, 0x85, 0xe0, 0x16, 0x4e, 0x68, 0xc3, 0xe1, 0x1d, 0x00, 0x29, 0x04, + 0xb7, 0x70, 0x42, 0x1b, 0x8e, 0x0f, 0x01, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x80, 0x80, 0xc1, + 0x01, 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0xe1, 0x08, 0x83, 0x04, 0x20, 0x85, 0xe0, 0x16, 0x4e, + 0x68, 0xc3, 0x21, 0x06, 0x0a, 0x40, 0x0a, 0xc1, 0x2d, 0x9c, 0xd0, 0x86, 0x63, 0x0c, 0x16, 0x80, + 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x07, 0x19, 0x30, 0x00, 0x29, 0x04, 0xb7, 0x70, 0x42, 0x1b, + 0x48, 0xa4, 0x0c, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x04, 0xc0, 0x14, 0x00, 0x3f, 0x00, 0xe0, + 0x00, 0xf8, 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, 0x85, 0x29, 0x08, 0x03, 0x81, 0x08, 0x07, 0x78, + 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, + 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, + 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, + 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, + 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, + 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, + 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, + 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, + 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, + 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, + 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, + 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, + 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, + 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, + 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, 0xd2, 0x61, + 0x1c, 0x00, 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0xa1, 0x1c, + 0xc2, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0x80, 0x35, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x70, 0x90, 0x87, 0x76, 0xb0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x70, 0x87, 0x72, 0x78, 0x07, 0x77, + 0x60, 0x83, 0x35, 0xb0, 0x07, 0x3c, 0x08, 0x07, 0x36, 0x68, 0x03, 0x73, 0x68, 0x07, 0x7b, 0x00, + 0x88, 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0x40, 0x22, + 0x66, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x00, 0xa6, 0x00, 0xf8, 0x01, 0x00, 0x07, 0xc0, + 0x1f, 0x00, 0x12, 0xd0, 0x07, 0x81, 0x2d, 0x8c, 0x41, 0x10, 0x06, 0x02, 0x11, 0x0e, 0xf0, 0x00, + 0x0f, 0xf2, 0xf0, 0x0e, 0xf8, 0xd0, 0x06, 0xe6, 0x50, 0x0f, 0xee, 0x30, 0x0e, 0x6d, 0x60, 0x0e, + 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, + 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, 0x3a, 0xb8, 0x83, 0x39, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, + 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, + 0xee, 0xf0, 0x0e, 0x6d, 0xe0, 0x0e, 0xe1, 0xe0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, + 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, + 0xbc, 0x43, 0x1b, 0xcc, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0x94, 0x03, 0x39, 0xb4, 0x81, 0x3e, 0x94, + 0x83, 0x3c, 0xbc, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, + 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf4, 0x20, + 0x0f, 0xe1, 0x00, 0x0f, 0xf0, 0x90, 0x0e, 0xee, 0x70, 0x0e, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, + 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0xc4, 0x3c, 0xd0, 0x43, 0x38, 0x8c, 0xc3, + 0x3a, 0xb4, 0x01, 0x3c, 0xc8, 0xc3, 0x3b, 0xd0, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, + 0xb4, 0x81, 0x38, 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xcc, 0x43, 0x3a, 0xe8, + 0x43, 0x39, 0x00, 0x78, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xe5, 0x40, 0x0f, 0x6d, + 0x30, 0x0e, 0xf0, 0x50, 0x0f, 0xc0, 0x39, 0x94, 0x83, 0x3b, 0x94, 0x83, 0x3c, 0xa4, 0xc3, 0x38, + 0x00, 0x04, 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43, 0x39, 0x84, + 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6b, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xe1, + 0x20, 0x0f, 0xed, 0x60, 0x0f, 0x78, 0xc0, 0x06, 0x6b, 0xe0, 0x0e, 0xe5, 0xf0, 0x0e, 0xee, 0xc0, + 0x06, 0x6b, 0x60, 0x0f, 0x78, 0x10, 0x0e, 0x6c, 0xd0, 0x06, 0xe6, 0xd0, 0x0e, 0xf6, 0x00, 0x10, + 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, + 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0xb0, 0x41, 0x44, 0xce, + 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, 0xf0, 0x03, 0x00, 0x0e, 0x00, 0x09, + 0xe8, 0x83, 0xc0, 0x16, 0x86, 0x20, 0x0c, 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, + 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, + 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, + 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, + 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, + 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, + 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, + 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, + 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, + 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, + 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, + 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, + 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, + 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, + 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, + 0x1e, 0x80, 0x73, 0x28, 0x07, 0x77, 0x28, 0x07, 0x79, 0x48, 0x87, 0x71, 0x00, 0x08, 0x7a, 0x08, + 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, + 0x79, 0x28, 0x87, 0x79, 0x00, 0xd6, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xc2, 0x41, 0x1e, 0xda, 0xc1, + 0x1e, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1d, 0xca, 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, + 0xf0, 0x20, 0x1c, 0xd8, 0xa0, 0x0d, 0xcc, 0xa1, 0x1d, 0xec, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, + 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, + 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x83, 0x81, 0x06, 0x01, 0xb0, 0x00, 0xa4, + 0xb0, 0xe1, 0x48, 0x03, 0x01, 0x20, 0x85, 0xe0, 0x16, 0x4e, 0x68, 0x43, 0xa4, 0x06, 0xff, 0xff, + 0xff, 0xff, 0x3f, 0x00, 0xa7, 0x00, 0xf8, 0x01, 0xf0, 0x07, 0x80, 0x04, 0xd4, 0x01, 0xd0, 0x07, + 0x81, 0x2d, 0x00, 0x1b, 0x88, 0x35, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x36, 0x10, 0x6c, + 0x20, 0x00, 0x67, 0xb0, 0xc1, 0x68, 0x03, 0x01, 0x20, 0x05, 0xe0, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x18, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, + 0x1c, 0x13, 0x86, 0x40, 0x40, 0x26, 0x0c, 0x89, 0x22, 0x4c, 0x20, 0x16, 0x61, 0x20, 0x26, 0x14, + 0x4c, 0xe3, 0x3c, 0xd0, 0x04, 0x62, 0x11, 0x86, 0x68, 0x82, 0xc1, 0x34, 0xce, 0x03, 0x49, 0x13, + 0x0c, 0xa6, 0x71, 0x1e, 0x68, 0x9a, 0x70, 0x30, 0x8d, 0xf3, 0x40, 0x13, 0x35, 0xa1, 0x58, 0x04, + 0x27, 0xaa, 0x26, 0x14, 0x4c, 0xe3, 0x58, 0xd7, 0x04, 0x63, 0x11, 0x9c, 0xe8, 0xc2, 0x26, 0x18, + 0x4c, 0xe3, 0x58, 0x57, 0x36, 0xe1, 0x58, 0x04, 0x27, 0xd2, 0x36, 0x6e, 0x42, 0xc2, 0x34, 0x8e, + 0x75, 0x65, 0x9d, 0xf7, 0x4d, 0x40, 0x16, 0xc1, 0x89, 0xb4, 0xad, 0x03, 0x83, 0x09, 0x0a, 0xd3, + 0x38, 0xd6, 0x95, 0x75, 0xde, 0x17, 0x06, 0x13, 0x0e, 0xa6, 0x71, 0xac, 0x2b, 0xeb, 0x26, 0x30, + 0x4c, 0xe3, 0x58, 0x57, 0xd6, 0x79, 0x5f, 0x18, 0x88, 0xc1, 0x18, 0x4c, 0x68, 0x98, 0xc6, 0xb1, + 0xae, 0xac, 0xf3, 0xbe, 0x30, 0x10, 0x83, 0x31, 0x20, 0x83, 0x09, 0x04, 0xd3, 0x38, 0xcf, 0x04, + 0x63, 0x11, 0x9c, 0x08, 0xc2, 0x26, 0x14, 0x65, 0x20, 0x38, 0x4f, 0x35, 0x81, 0x28, 0x03, 0xc1, + 0x21, 0x26, 0x18, 0x8b, 0x30, 0x58, 0x10, 0x36, 0x61, 0x60, 0x1a, 0x67, 0x42, 0xb1, 0x08, 0xc3, + 0x53, 0x4d, 0x20, 0xcc, 0x40, 0x70, 0xa2, 0x09, 0x84, 0x19, 0x08, 0xce, 0x33, 0x61, 0x38, 0x03, + 0x34, 0x70, 0x26, 0x10, 0x67, 0xa0, 0xa0, 0x41, 0x1a, 0x4c, 0x20, 0xce, 0x00, 0x0d, 0x9c, 0x67, + 0x42, 0x71, 0x06, 0x0a, 0x1a, 0xa4, 0x81, 0x35, 0x21, 0x50, 0x83, 0x09, 0xc5, 0x1a, 0x34, 0xce, + 0x03, 0x4d, 0x30, 0xd6, 0xa0, 0x71, 0x1e, 0x48, 0x9a, 0x60, 0xac, 0x41, 0xe3, 0x3c, 0xd0, 0x34, + 0xe1, 0x58, 0x83, 0xc6, 0x79, 0xa0, 0x89, 0x9a, 0x50, 0xac, 0x41, 0xe3, 0x58, 0xd7, 0x04, 0x63, + 0x0d, 0x1a, 0xc7, 0xba, 0xb2, 0x09, 0xc9, 0x1a, 0x34, 0x8e, 0x75, 0x65, 0x9d, 0xf7, 0x4d, 0x50, + 0xd6, 0xa0, 0x71, 0xac, 0x2b, 0xeb, 0xbc, 0x2f, 0x0c, 0x26, 0x1c, 0x6b, 0xd0, 0x38, 0xd6, 0x95, + 0x75, 0x13, 0x98, 0x35, 0x68, 0x1c, 0xeb, 0xca, 0x3a, 0xef, 0x0b, 0x03, 0x31, 0x18, 0x83, 0x09, + 0xcd, 0x1a, 0x34, 0x8e, 0x75, 0x65, 0x9d, 0xf7, 0x85, 0x81, 0x18, 0x8c, 0x01, 0x19, 0x4c, 0x20, + 0xd6, 0xa0, 0x71, 0x9e, 0x09, 0xc2, 0x1a, 0xb0, 0xc1, 0x84, 0x61, 0x0d, 0x9a, 0x36, 0x00, 0x00, + 0x13, 0xa6, 0x70, 0x90, 0x87, 0x76, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x7a, 0x70, 0x87, 0x75, 0x70, + 0x87, 0x77, 0xb8, 0x07, 0x77, 0x68, 0x03, 0x76, 0x48, 0x07, 0x77, 0xa8, 0x07, 0x7c, 0xd8, 0x80, + 0x07, 0xe5, 0xd0, 0x06, 0xed, 0xa0, 0x07, 0xe5, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, + 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, + 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, + 0x0e, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x30, 0x07, + 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x30, 0x0b, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xa6, + 0xe0, 0x0e, 0x73, 0x20, 0x07, 0x1a, 0x21, 0x4c, 0x0e, 0xf3, 0xe1, 0x55, 0x9d, 0x97, 0xe5, 0xf3, + 0x57, 0x3b, 0xbd, 0x2e, 0xbf, 0x86, 0xec, 0xf4, 0xdb, 0x0d, 0x95, 0xbf, 0xd5, 0xe5, 0x31, 0x7d, + 0xfe, 0x62, 0xd6, 0xd3, 0xf3, 0xf0, 0xf0, 0xdd, 0x86, 0xd7, 0xe9, 0xe5, 0xd7, 0x5c, 0x3e, 0x7e, + 0x89, 0xc3, 0xe3, 0x75, 0xd9, 0x4d, 0x9e, 0xbf, 0xcc, 0x61, 0x36, 0x5b, 0x1c, 0x1e, 0xaf, 0x5f, + 0xe6, 0x30, 0x9b, 0x2d, 0x0e, 0x8f, 0xd7, 0x5f, 0x71, 0x3d, 0xcd, 0xa6, 0xa7, 0xdd, 0x2f, 0x73, + 0x98, 0xcd, 0x16, 0x87, 0xc7, 0xeb, 0x2f, 0xb9, 0x6c, 0x4f, 0x8f, 0xcb, 0xdf, 0x30, 0x3c, 0xfd, + 0xbd, 0xcb, 0xc3, 0x70, 0x78, 0x59, 0x3e, 0x77, 0xb1, 0xd3, 0xee, 0x3a, 0xde, 0x15, 0x96, 0xb7, + 0x6d, 0x34, 0x17, 0x9b, 0x3d, 0xa4, 0x02, 0x32, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x99, 0x45, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0xea, 0x0d, 0x28, 0x02, 0x08, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xa3, 0x90, 0x09, 0x00, + 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xe2, 0x85, + 0x4c, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, + 0x55, 0x3d, 0x64, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x06, 0x0c, 0xa9, 0x5c, 0x22, 0x13, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0x75, 0x16, 0x99, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xd0, 0xc0, 0x0a, 0x00, 0x48, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe1, 0x06, 0x56, 0x00, 0x40, 0x32, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x3e, 0xb0, 0x02, + 0x00, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x28, + 0xc2, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, + 0xa4, 0x22, 0x13, 0x4e, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0x15, 0xa8, 0x70, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x78, 0x85, 0x13, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x85, 0x2f, 0x9c, 0x00, 0x00, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x9a, 0xe1, 0x04, 0x00, 0x48, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc1, 0x8d, 0x76, + 0x00, 0x40, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x4a, + 0x75, 0xb4, 0x03, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0xe4, 0xa3, 0x1d, 0x00, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0xf2, 0x1f, 0xab, 0x00, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x0d, 0x59, 0x05, 0x00, 0x24, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xd4, 0xc8, 0x2a, 0x00, 0x20, 0x19, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x05, 0x4a, 0x98, 0x00, 0x00, + 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x5c, 0xea, + 0x14, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, + 0xd5, 0x53, 0x26, 0x00, 0x40, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0xca, 0xa5, 0x3c, 0x05, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x03, 0x86, 0x54, 0x6c, 0xa5, 0x09, 0x00, 0x90, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x32, 0xad, 0x8f, 0x01, 0x02, 0xc0, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x79, 0x6d, 0x02, 0x00, 0x24, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x40, 0x0c, 0x0c, 0x1c, + 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, 0x81, + 0x99, 0x26, 0x00, 0x40, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, + 0x90, 0x4a, 0xcf, 0x3e, 0x08, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x03, 0x86, 0x54, 0xb9, 0x96, 0x09, 0x00, 0x90, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x92, 0x37, 0x0f, 0x02, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xcc, 0x61, 0x02, 0x00, 0x24, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xd0, 0xae, 0x8b, 0x80, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x55, 0x7a, 0x99, + 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, + 0xdf, 0xf3, 0x22, 0x20, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, + 0x18, 0x52, 0xf1, 0x9f, 0x26, 0x00, 0x40, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x64, 0xc0, 0x90, 0xca, 0x06, 0x83, 0x4f, 0x02, 0x02, 0x20, 0x01, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x1d, 0x06, 0x9b, 0x00, 0x00, 0xc9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x58, 0x0c, 0xc0, 0x60, 0x02, + 0x02, 0x40, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x3c, + 0x06, 0x9a, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, + 0x43, 0x2a, 0x95, 0x0c, 0x3e, 0x0a, 0x08, 0x80, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x03, 0x86, 0x54, 0x69, 0x19, 0x64, 0x02, 0x00, 0x24, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x44, 0x33, 0xf0, 0x28, 0x20, 0x00, 0x12, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, 0x81, 0x67, 0x40, 0x15, 0x00, + 0x90, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xa2, 0xcf, + 0x80, 0x2a, 0x00, 0x20, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0x85, 0xa2, 0xc1, 0x57, 0x01, 0x40, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x64, 0xc0, 0x90, 0xea, 0x4c, 0x03, 0x32, 0xb0, 0x80, 0x00, 0x60, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0xb5, 0xaa, 0x41, 0x19, 0x5c, 0x00, 0x90, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x82, 0xd7, 0x40, 0x0d, + 0x30, 0x20, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, + 0xe9, 0x6c, 0x40, 0x06, 0x19, 0x00, 0x24, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0xfc, 0x36, 0x48, 0x03, 0x0d, 0x08, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xe7, 0x1b, 0xa8, 0xc1, 0x06, 0x00, 0x49, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x18, 0x0e, 0xde, 0x80, + 0x03, 0x02, 0x40, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x15, + 0x28, 0x07, 0x5f, 0x05, 0x00, 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, + 0x01, 0x43, 0xaa, 0x5f, 0x0e, 0xc8, 0x00, 0x03, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0x48, 0x07, 0x65, 0x70, 0x01, 0x40, 0xd2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xad, 0x03, 0x35, 0xe8, 0x80, + 0x00, 0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x25, 0xdb, + 0x01, 0x19, 0x64, 0x00, 0x90, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, + 0x30, 0xa4, 0xb2, 0xef, 0x20, 0x0d, 0x3c, 0x20, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x0c, 0x18, 0x52, 0xfd, 0x78, 0xa0, 0x06, 0x1b, 0x00, 0x24, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x52, 0x3d, 0x78, 0x83, 0x0f, 0x08, + 0x80, 0x0a, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xf8, 0x1e, + 0x74, 0x15, 0x00, 0x24, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, + 0xa9, 0x6a, 0x3e, 0x10, 0x03, 0x30, 0x00, 0x02, 0xc0, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0xdd, 0x07, 0x5d, 0x05, 0x00, 0xc9, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xda, 0x0f, 0xc4, 0x20, 0x0c, 0x80, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0x65, 0xff, 0xc1, + 0x18, 0x88, 0x01, 0x00, 0x24, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, + 0x0c, 0xa9, 0x72, 0x50, 0x40, 0x83, 0x30, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x28, 0x0a, 0x63, 0x20, 0x06, 0x00, 0x90, 0x5c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x22, 0x47, 0x01, 0x0d, 0xc6, + 0x00, 0x08, 0x80, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, + 0x2c, 0x29, 0x8c, 0x01, 0x19, 0x00, 0x40, 0x82, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x64, 0xc0, 0x90, 0xea, 0x2d, 0x85, 0x31, 0x20, 0x03, 0x00, 0x48, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc9, 0xa6, 0xd0, 0x95, 0x01, 0x00, 0x24, + 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xde, 0x53, 0xe8, + 0xca, 0x00, 0x00, 0x92, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0x2c, 0x2a, 0x80, 0x81, 0x19, 0x00, 0x40, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x4d, 0x05, 0xaf, 0x00, 0x02, 0x60, 0x03, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xaa, 0x0a, 0x9c, 0x19, 0x00, 0x40, 0xa2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0x5c, 0x05, 0xad, + 0x00, 0x02, 0x60, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x15, + 0xc8, 0x0a, 0xd9, 0x19, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x64, 0xc0, 0x90, 0x2a, 0x67, 0x85, 0xea, 0x0c, 0x00, 0x20, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xb6, 0x82, 0x57, 0x06, 0x00, 0x90, 0x64, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x62, 0x5d, 0x81, 0x2b, 0x03, + 0x00, 0x48, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xa1, + 0xaf, 0x40, 0x06, 0x65, 0x00, 0x00, 0x49, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x01, 0x43, 0x2a, 0x16, 0x16, 0xc4, 0xa0, 0x0c, 0x00, 0x20, 0xe9, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xc6, 0x02, 0x1a, 0xa0, 0x01, 0x00, 0x24, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x6c, 0x59, 0x00, + 0x03, 0x34, 0x00, 0x80, 0xc4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, + 0x21, 0x95, 0x3d, 0x0b, 0x60, 0xa0, 0x06, 0x00, 0x90, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xb2, 0x69, 0x21, 0x5b, 0x03, 0x00, 0x48, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xbd, 0xb5, 0xa0, 0xad, 0x01, 0x00, + 0x24, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x52, 0x5b, + 0xd0, 0xd8, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0xe3, 0x2d, 0x6c, 0x6c, 0x00, 0x00, 0xc9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xff, 0x16, 0xb6, 0x36, 0x00, 0x80, 0x04, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x95, 0xe3, 0x42, 0x18, 0xb8, 0x01, + 0x00, 0x24, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, + 0x3d, 0x17, 0xc4, 0xc0, 0x0d, 0x00, 0x20, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf1, 0xba, 0x20, 0x06, 0x6f, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xdf, 0x85, 0x31, 0x78, 0x03, + 0x00, 0x48, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, + 0x61, 0x2f, 0x8c, 0x01, 0x1c, 0x00, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x19, 0x30, 0xa4, 0x22, 0x7d, 0x41, 0x5b, 0x03, 0x00, 0x48, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf9, 0xbe, 0xb0, 0xad, 0x01, 0x00, 0x24, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xf2, 0x5f, 0xd8, + 0xd8, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0x34, 0x38, 0x70, 0x6c, 0x00, 0x00, 0xc9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0x2a, 0x38, 0x1c, 0xb8, 0x36, 0x00, 0x80, 0x04, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xc5, 0x8a, 0x83, 0xb6, 0x06, 0x00, 0x90, + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x32, 0xc7, 0x61, + 0x5b, 0x03, 0x00, 0x48, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, + 0x52, 0x85, 0xe4, 0xb0, 0xb1, 0x01, 0x00, 0x24, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x78, 0x72, 0xe0, 0xd8, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x78, 0x39, 0x70, 0x6d, 0x00, 0x00, 0x09, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x36, 0x07, + 0x6d, 0x0d, 0x00, 0x20, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0xe5, 0x9e, 0xc3, 0xb6, 0x06, 0x00, 0x90, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x19, 0x30, 0xa4, 0x4a, 0xd1, 0x61, 0x63, 0x03, 0x00, 0x48, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x91, 0xe9, 0xc0, 0xb1, 0x01, 0x00, 0x24, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x40, 0x75, 0xc8, + 0xd6, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0xb9, 0x3a, 0x68, 0x6b, 0x00, 0x00, 0xc9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0xaa, 0x79, 0x1d, 0x34, 0x36, 0x00, 0x80, 0xe4, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0xcb, 0x0e, 0x1b, 0x1b, 0x00, 0x40, 0xf2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x6d, 0x07, 0x6d, + 0x0d, 0x00, 0x20, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0x25, 0xba, 0xc3, 0xb6, 0x06, 0x00, 0x90, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0xea, 0xdd, 0x61, 0x63, 0x03, 0x00, 0x48, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe1, 0xef, 0xc0, 0xb1, 0x01, 0x00, 0x24, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x68, 0x78, 0xd0, 0xd6, + 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, + 0x6e, 0x3c, 0x6c, 0x6b, 0x00, 0x00, 0xc9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x01, 0x43, 0xaa, 0x54, 0x1e, 0x36, 0x36, 0x00, 0x80, 0xe4, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x39, 0x0f, 0x1c, 0x1b, 0x00, 0x40, 0xf2, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xa4, 0x07, 0xae, 0x0d, + 0x00, 0x20, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0xf1, 0xf4, 0xa0, 0xad, 0x01, 0x00, 0x24, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0xec, 0x7a, 0xd8, 0xd6, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xb1, 0x3d, 0x6c, 0x6c, 0x00, 0x00, 0xc9, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xf6, 0x1e, 0x38, 0x36, + 0x00, 0x80, 0xe4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, + 0x8a, 0x0f, 0x5c, 0x1b, 0x00, 0x40, 0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0x22, 0xf3, 0xa1, 0x89, 0x03, 0x20, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0x71, 0x3e, 0x34, 0x73, 0x00, 0x04, 0xc0, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xcf, 0x87, + 0xae, 0x0e, 0x80, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0c, + 0x18, 0x52, 0xed, 0xfa, 0xf0, 0xdc, 0x01, 0x10, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x90, 0x01, 0x43, 0x2a, 0x75, 0x1f, 0x9e, 0x3c, 0x00, 0x02, 0x60, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x40, 0x62, 0x83, 0x40, 0xd1, 0x7f, 0x0a, + 0x00, 0x80, 0x2c, 0x10, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x20, 0x19, 0x11, 0x4c, 0x90, + 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x4a, 0x94, 0x40, 0x21, 0x14, 0x44, 0x11, 0x94, 0x03, + 0x0d, 0x46, 0x00, 0x0a, 0xa1, 0x20, 0x0a, 0xa4, 0x60, 0x0a, 0xa3, 0x80, 0x0a, 0xa5, 0x70, 0x0a, + 0xac, 0x10, 0x03, 0x4a, 0xac, 0xc8, 0x0a, 0xad, 0xe0, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, + 0xc9, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, + 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, + 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, + 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, + 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, + 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, + 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, + 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, + 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, + 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, + 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, + 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, + 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, + 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, + 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, + 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, + 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, + 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, + 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, + 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, + 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, + 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, + 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, + 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, + 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, + 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, + 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, + 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, + 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, + 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, + 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, + 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, + 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xcb, + 0xe7, 0x0e, 0xef, 0x30, 0x0f, 0xe1, 0xe0, 0x0e, 0xe9, 0x40, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x30, + 0xc3, 0x01, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x5f, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, + 0xa0, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x98, 0x81, 0x84, 0x41, 0x39, 0xe0, 0xc3, 0x38, 0xb0, 0x43, + 0x3d, 0x90, 0x43, 0x39, 0xcc, 0x40, 0xc4, 0xa0, 0x1d, 0xca, 0xa1, 0x1d, 0xe0, 0x41, 0x1e, 0xde, + 0xc1, 0x1c, 0x66, 0x24, 0x63, 0x30, 0x0e, 0xe1, 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0xe9, 0x40, 0x0f, + 0xe5, 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, + 0x87, 0x72, 0x98, 0xb1, 0x94, 0x01, 0x3c, 0x8c, 0xc3, 0x3c, 0x94, 0xc3, 0x38, 0xd0, 0x43, 0x3a, + 0xbc, 0x83, 0x3b, 0xcc, 0xc3, 0x8c, 0xc5, 0x0c, 0x48, 0x21, 0x15, 0x42, 0x61, 0x1e, 0xe6, 0x21, + 0x1d, 0xce, 0xc1, 0x1d, 0x52, 0x81, 0x14, 0x66, 0x4c, 0x67, 0x30, 0x0e, 0xef, 0x20, 0x0f, 0xef, + 0xe0, 0x06, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0x20, + 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0x30, 0xa3, 0x40, 0x83, 0x76, 0x68, 0x07, 0x79, 0x08, 0x87, 0x19, + 0x4e, 0x1a, 0xa0, 0x43, 0x39, 0x84, 0x03, 0x3c, 0x84, 0x03, 0x3b, 0xb0, 0xc3, 0x3b, 0x8c, 0xc3, + 0x3c, 0xa4, 0x03, 0x3d, 0x94, 0x03, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, + 0x72, 0x1e, 0x48, 0x20, 0x43, 0x88, 0x0c, 0x19, 0x09, 0x72, 0x32, 0x48, 0x20, 0x23, 0x81, 0x8c, + 0x91, 0x91, 0xd1, 0x44, 0xa0, 0x10, 0x28, 0x64, 0x3c, 0x31, 0x32, 0x42, 0x8e, 0x90, 0x21, 0xa3, + 0xa8, 0x51, 0xe3, 0x02, 0x4a, 0x92, 0x1c, 0xdd, 0xf3, 0x14, 0xcb, 0xb5, 0x24, 0xca, 0xa0, 0x5c, + 0xd2, 0x52, 0x38, 0x92, 0x33, 0x39, 0xc4, 0x04, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x50, 0x49, 0x43, 0x20, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x49, 0x45, 0x20, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x75, 0x77, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, + 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, + 0x2b, 0x20, 0x54, 0x42, 0x41, 0x41, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x36, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x61, 0x6e, 0x79, + 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x6e, + 0x67, 0x5f, 0x5a, 0x54, 0x53, 0x35, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x69, 0x6e, 0x74, 0x5f, 0x5a, + 0x54, 0x53, 0x35, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x42, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x56, 0x69, 0x65, 0x77, 0x5f, + 0x5a, 0x54, 0x53, 0x31, 0x32, 0x42, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x6f, + 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x36, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x5f, + 0x5a, 0x54, 0x53, 0x31, 0x32, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x48, 0x69, + 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x5f, + 0x5a, 0x54, 0x53, 0x4e, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x55, 0x74, + 0x5f, 0x45, 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x48, 0x69, 0x74, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x33, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, 0x86, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x82, 0x90, 0xa4, 0xc4, 0x08, 0x42, 0xa2, 0x12, 0x23, 0x08, 0xc9, 0x4a, 0x8c, 0x20, 0x24, + 0x2c, 0x31, 0x82, 0x90, 0xb4, 0xc4, 0x08, 0xc2, 0xe0, 0x12, 0x23, 0x08, 0xc3, 0x4b, 0x8c, 0x20, + 0x0c, 0x30, 0x31, 0x82, 0x30, 0xc4, 0xc4, 0x08, 0xc2, 0x20, 0x13, 0x23, 0x08, 0xc3, 0x4c, 0x8c, + 0x20, 0x0c, 0x34, 0x31, 0x82, 0x30, 0xd4, 0xc4, 0x08, 0xc2, 0x60, 0x13, 0x23, 0x08, 0xc3, 0x4d, + 0x8c, 0x20, 0x0c, 0x38, 0x31, 0x82, 0x30, 0xe4, 0xc4, 0x08, 0xc2, 0xa0, 0x13, 0x23, 0x08, 0xc3, + 0x4e, 0x8c, 0x20, 0x0c, 0x3c, 0x31, 0xc3, 0xb0, 0x05, 0xdc, 0x0c, 0x43, 0x27, 0x78, 0x33, 0x0c, + 0xdf, 0xe0, 0xcd, 0x30, 0x7c, 0x84, 0x37, 0x43, 0x50, 0xcc, 0x10, 0x1c, 0x33, 0x0c, 0x06, 0x1d, + 0x80, 0xc1, 0x0c, 0x43, 0x1d, 0xd4, 0x01, 0x18, 0xcc, 0x30, 0x20, 0x75, 0x00, 0x06, 0x33, 0x0c, + 0x77, 0x70, 0x07, 0x60, 0x30, 0xc3, 0x91, 0xdc, 0x01, 0x18, 0xdc, 0x41, 0x18, 0xdc, 0x81, 0x18, + 0xcc, 0x30, 0xe4, 0xc1, 0x1d, 0x80, 0xc1, 0x0c, 0x43, 0x1e, 0xdc, 0x41, 0x18, 0xcc, 0x30, 0xe4, + 0xc1, 0x1d, 0x88, 0xc1, 0x0c, 0xc3, 0x52, 0x07, 0x60, 0x30, 0xc3, 0xc0, 0xd4, 0x01, 0x18, 0xcc, + 0x50, 0x28, 0x7d, 0x00, 0x06, 0x7e, 0x20, 0x06, 0x33, 0x0c, 0x7f, 0xd0, 0x07, 0x60, 0x30, 0xc3, + 0xf0, 0x07, 0x7e, 0x20, 0x06, 0x33, 0x0c, 0x4e, 0x1d, 0x80, 0xc1, 0x0c, 0x45, 0x23, 0x0a, 0x60, + 0x20, 0x0a, 0x61, 0x30, 0xc3, 0x30, 0x0a, 0xa2, 0x00, 0x06, 0x33, 0x0c, 0xa3, 0x20, 0x0a, 0x61, + 0x30, 0xc3, 0xf1, 0x88, 0x02, 0x18, 0x88, 0x42, 0x18, 0x88, 0x82, 0x18, 0xcc, 0x30, 0x98, 0x82, + 0x28, 0x80, 0xc1, 0x0c, 0x83, 0x29, 0x88, 0x42, 0x18, 0xcc, 0x30, 0x98, 0x82, 0x28, 0x88, 0xc1, + 0x0c, 0x83, 0x28, 0x88, 0x02, 0x18, 0xcc, 0x50, 0x40, 0x7d, 0x00, 0x06, 0x7e, 0x20, 0x06, 0x33, + 0x0c, 0xab, 0xd0, 0x07, 0x60, 0x30, 0x43, 0x12, 0xf5, 0x01, 0x18, 0xf8, 0x81, 0x18, 0xf4, 0xc1, + 0x18, 0xf4, 0x01, 0x19, 0xcc, 0x30, 0xb4, 0x42, 0x1f, 0x8c, 0xc1, 0x0c, 0x43, 0x2b, 0xf8, 0x81, + 0x18, 0xcc, 0x50, 0x48, 0x77, 0x00, 0x06, 0x77, 0x10, 0x06, 0x33, 0x0c, 0xb0, 0x70, 0x07, 0x60, + 0x30, 0xc3, 0x00, 0x0b, 0x77, 0x10, 0x06, 0x33, 0x0c, 0xad, 0xd0, 0x07, 0x64, 0x30, 0xc3, 0x30, + 0xd5, 0x01, 0x18, 0xcc, 0x30, 0xd0, 0x02, 0x2d, 0x80, 0xc1, 0x0c, 0x05, 0xd5, 0x07, 0x60, 0xd0, + 0x07, 0x62, 0x30, 0xc3, 0x60, 0x0b, 0x7d, 0x00, 0x06, 0x33, 0x24, 0xd7, 0x1d, 0x80, 0x81, 0x28, + 0x84, 0x81, 0x28, 0x88, 0x81, 0x28, 0x94, 0xc1, 0x0c, 0x87, 0x55, 0x07, 0x60, 0x50, 0x07, 0x63, + 0x80, 0x0b, 0x66, 0x30, 0x43, 0x84, 0xdd, 0x01, 0x18, 0xdc, 0x41, 0x18, 0xdc, 0x81, 0x18, 0xdc, + 0x41, 0x19, 0xdc, 0xc1, 0x18, 0x88, 0xc2, 0x19, 0x88, 0x02, 0x19, 0xd4, 0x01, 0x1a, 0xcc, 0x50, + 0x54, 0xb9, 0x00, 0x06, 0xba, 0x90, 0x06, 0x33, 0x0c, 0xbb, 0x20, 0x0a, 0x6a, 0x30, 0xc3, 0xb0, + 0x0b, 0x77, 0x60, 0x06, 0x33, 0x0c, 0xb9, 0x70, 0x07, 0x66, 0x30, 0xc3, 0x90, 0xd5, 0x01, 0x18, + 0xcc, 0x30, 0xfc, 0xc2, 0x2f, 0x80, 0xc1, 0x0c, 0x83, 0x2d, 0xf4, 0x81, 0x18, 0xcc, 0xd0, 0x68, + 0x75, 0x00, 0x06, 0x75, 0x90, 0x06, 0xbf, 0xb0, 0x06, 0xbf, 0xc0, 0x06, 0xa2, 0xd0, 0x06, 0x7d, + 0xe0, 0x06, 0x33, 0x0c, 0xe2, 0x20, 0x0a, 0x6d, 0x30, 0xc3, 0x20, 0x0e, 0x75, 0x90, 0x06, 0x33, + 0x0c, 0xe2, 0xf0, 0x0b, 0x6c, 0x70, 0xab, 0x00, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, + 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, + 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x58, 0x96, 0x1b, 0xd0, + 0x81, 0x1b, 0xd0, 0x81, 0x2f, 0xd0, 0x01, 0x1d, 0xd0, 0x81, 0x1b, 0xb8, 0x81, 0x29, 0xd0, 0x01, + 0x1d, 0xb8, 0x81, 0x29, 0xd0, 0x01, 0x1d, 0xf8, 0x02, 0x1d, 0xd0, 0x01, 0x1d, 0xd0, 0x81, 0x29, + 0xd0, 0x81, 0x3d, 0xd0, 0x01, 0x1d, 0x98, 0x02, 0x1d, 0xd0, 0x01, 0x1d, 0xb8, 0x01, 0x1d, 0x98, + 0x02, 0x1d, 0xd8, 0x83, 0x2f, 0xd8, 0x86, 0x29, 0xd0, 0x01, 0x1d, 0xd0, 0x81, 0x1b, 0xd0, 0x01, + 0x1d, 0x98, 0x05, 0x1d, 0xd0, 0x81, 0x8c, 0x04, 0x26, 0x28, 0x27, 0x36, 0x36, 0xbb, 0x36, 0x17, + 0xb6, 0x34, 0xb7, 0xb5, 0x32, 0x39, 0x97, 0x37, 0x38, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x51, 0x80, + 0x8c, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xda, 0xde, 0xc8, 0xea, 0xd8, 0xca, 0x5c, 0xcc, 0xd8, 0xc2, + 0xce, 0xe6, 0x46, 0x21, 0xdc, 0xe0, 0x0d, 0xe0, 0x20, 0x0e, 0x52, 0x61, 0x63, 0xb3, 0x6b, 0x73, + 0x49, 0x23, 0x2b, 0x73, 0xa3, 0x1b, 0x25, 0x90, 0x03, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, + 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, + 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, + 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, + 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, + 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, + 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, + 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, + 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, + 0x0f, 0xf4, 0x80, 0x0e, 0x0b, 0x88, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x05, 0xcf, 0x38, 0xbc, + 0x83, 0x3b, 0xd8, 0x43, 0x39, 0xc8, 0xc3, 0x39, 0x94, 0x83, 0x3b, 0x8c, 0x43, 0x39, 0x8c, 0x03, + 0x3d, 0xc8, 0x03, 0x3b, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, + 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x1b, 0x0d, 0x20, + 0xdb, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x64, 0xec, 0x88, 0x8f, 0x27, 0x1c, 0x14, 0x05, + 0x3b, 0x42, 0xc8, 0x8e, 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, + 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x1b, 0x10, 0x03, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa8, 0x83, 0x2d, 0xc3, 0x10, 0xd4, 0xc1, 0x96, 0x21, + 0x09, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x1b, 0x0d, 0x20, + 0xdb, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x64, 0xec, 0x88, 0x8f, 0x27, 0x1c, 0x14, 0x05, + 0x3b, 0x42, 0xc8, 0x8e, 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, + 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x3e, 0x9e, 0xe0, + 0x70, 0x3e, 0x9e, 0xe0, 0x74, 0x14, 0xed, 0x08, 0x2d, 0x3b, 0x42, 0xc4, 0x8e, 0x0c, 0x32, 0x04, + 0x11, 0x84, 0x01, 0x21, 0xfe, 0x83, 0x0c, 0xc3, 0x14, 0x61, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x1b, 0x10, 0x49, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0xa8, 0x83, 0x2d, 0xc3, 0x10, 0xd4, 0xc1, 0x96, 0x21, 0x09, 0xea, 0x60, 0xcb, + 0xd0, 0x04, 0x75, 0xb0, 0x65, 0x70, 0x82, 0x3a, 0xd8, 0x32, 0x50, 0x41, 0x1d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x44, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xd0, 0x8a, 0x8f, + 0x27, 0x20, 0x14, 0x05, 0xb4, 0xe2, 0xe3, 0x09, 0xca, 0x44, 0x01, 0xad, 0xd0, 0x42, 0x2b, 0x83, + 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, + 0x53, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa8, + 0x83, 0x2d, 0x83, 0x13, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x44, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0x02, 0x00, 0x00, 0x00, 0x74, 0xd0, 0x8a, 0x8f, 0x27, 0x20, 0x14, 0x05, 0xb4, 0xe2, 0xe3, 0x09, + 0xca, 0x44, 0x01, 0xad, 0xd0, 0x42, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, + 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, + 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x53, 0x50, 0x00, 0x3e, 0x9e, 0x40, 0x85, 0x81, + 0x8f, 0x27, 0x50, 0x62, 0x40, 0x17, 0xad, 0x10, 0x44, 0x2b, 0xf4, 0xd0, 0x0a, 0x15, 0xb4, 0x32, + 0xc8, 0x10, 0x60, 0x17, 0x06, 0x85, 0xf8, 0x0f, 0x32, 0x0c, 0x1a, 0x86, 0x81, 0x21, 0xfe, 0x38, + 0x04, 0xe0, 0x3f, 0xc8, 0x60, 0x74, 0x1a, 0x06, 0x88, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, + 0xd1, 0x04, 0x05, 0xe0, 0xe3, 0x09, 0x62, 0xc0, 0x06, 0x3e, 0x9e, 0x20, 0x06, 0x6d, 0x40, 0x65, + 0x40, 0x2b, 0xe4, 0xd1, 0x0a, 0x75, 0xb4, 0x42, 0x05, 0xad, 0x0c, 0x32, 0x04, 0x66, 0x50, 0x06, + 0x18, 0x14, 0xe2, 0x3f, 0xc8, 0x30, 0xa0, 0x81, 0x19, 0x60, 0x60, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0x18, 0x6b, 0x80, 0x06, 0x18, 0x20, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x44, + 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa8, + 0x83, 0x2d, 0x83, 0x13, 0xd4, 0xc1, 0x96, 0x61, 0x0a, 0xea, 0x60, 0xcb, 0xd0, 0x05, 0x75, 0xb0, + 0x65, 0x10, 0x83, 0xa0, 0x0e, 0xb6, 0x0c, 0x6c, 0x10, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x44, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd0, 0x8a, 0x8f, + 0x27, 0x24, 0x15, 0x05, 0xb4, 0xe2, 0xe3, 0x09, 0x0b, 0x45, 0x01, 0xad, 0xf8, 0x78, 0x42, 0x33, + 0x51, 0x40, 0x2b, 0xe4, 0xd0, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, + 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, + 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x59, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa8, + 0x83, 0x2d, 0xc3, 0x11, 0xd4, 0xc1, 0x96, 0x61, 0x0a, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x44, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd0, 0x8a, 0x8f, + 0x27, 0x24, 0x15, 0x05, 0xb4, 0xe2, 0xe3, 0x09, 0x0b, 0x45, 0x01, 0xad, 0xf8, 0x78, 0x42, 0x33, + 0x51, 0x40, 0x2b, 0xe4, 0xd0, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, + 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, + 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x59, 0x50, 0x00, 0x3e, 0x9e, 0xa0, 0x9d, 0x81, 0x8f, 0x27, 0x68, 0x68, 0x40, 0x1d, + 0xad, 0x50, 0x45, 0x2b, 0x44, 0xd1, 0x0a, 0x4d, 0xb4, 0x42, 0x06, 0xad, 0x0c, 0x32, 0x04, 0x9f, + 0x87, 0x81, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x18, 0x7c, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, + 0x83, 0x0c, 0x06, 0x19, 0x84, 0x01, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x72, + 0x06, 0x63, 0x80, 0xc1, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, + 0x78, 0x02, 0x1b, 0xd8, 0x81, 0x8f, 0x27, 0xb0, 0xc1, 0x1d, 0xd0, 0x1b, 0xd0, 0x0a, 0x9d, 0x01, + 0xad, 0x90, 0x19, 0xd0, 0x0a, 0x95, 0x01, 0xad, 0x90, 0x41, 0x2b, 0x83, 0x0c, 0x41, 0x1c, 0xc0, + 0x01, 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, 0x73, 0x10, 0x07, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, + 0xfe, 0x83, 0x0c, 0x86, 0x1d, 0xcc, 0x01, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, + 0x92, 0x07, 0x75, 0x80, 0xc1, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, + 0xf8, 0x78, 0x82, 0x1f, 0x94, 0x82, 0x8f, 0x27, 0xf8, 0x81, 0x29, 0x50, 0x28, 0xd0, 0x0a, 0xe5, + 0x01, 0xad, 0x10, 0x1e, 0xd0, 0x0a, 0xdd, 0x01, 0xad, 0x90, 0x41, 0x2b, 0x83, 0x0c, 0xc1, 0x28, + 0x88, 0x02, 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, 0xa5, 0x30, 0x0a, 0x18, 0x1c, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0x83, 0x0c, 0x06, 0x2a, 0x94, 0x02, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, + 0x43, 0xb2, 0x0a, 0xa7, 0x80, 0xc1, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, + 0x01, 0x6c, 0x40, 0x0c, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa8, 0x83, 0x2d, 0xc3, 0x11, + 0xd4, 0xc1, 0x96, 0x61, 0x0a, 0xea, 0x60, 0xcb, 0x90, 0x05, 0x75, 0xb0, 0x65, 0xd0, 0x82, 0x3a, + 0xd8, 0x32, 0x98, 0x41, 0x50, 0x07, 0x5b, 0x06, 0x36, 0x08, 0xea, 0x60, 0xcb, 0xd0, 0x06, 0x41, + 0x1d, 0x6c, 0x19, 0xf2, 0x20, 0xa8, 0x83, 0x2d, 0xc3, 0x1f, 0x04, 0x75, 0xb0, 0x65, 0x00, 0x85, + 0xa0, 0x0e, 0xb6, 0x0c, 0xac, 0x10, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x64, 0x1b, 0x4b, 0x00, 0x84, 0xb1, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x44, 0xec, 0x88, 0x8f, 0x27, 0x14, 0x12, 0x05, 0x3b, 0x32, 0xc8, 0x30, 0x04, 0xc5, 0xb0, 0x01, + 0x71, 0x04, 0x04, 0x30, 0xc8, 0x40, 0x08, 0x85, 0x8f, 0x27, 0x20, 0xd6, 0xb0, 0x01, 0x11, 0x08, + 0x04, 0xb0, 0x01, 0x31, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa8, 0x83, 0x2d, 0x03, 0x11, + 0xd4, 0xc1, 0x96, 0xe1, 0x08, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x94, 0x18, 0x01, 0x28, 0x83, 0xd1, 0x00, 0xfa, 0xcd, 0x31, 0xfc, 0x04, 0x58, 0x84, 0xc5, 0x58, + 0x03, 0x10, 0x0c, 0xe4, 0x1b, 0x0d, 0xa0, 0xde, 0x1c, 0xc4, 0x4f, 0xa4, 0x04, 0x4b, 0x84, 0x05, + 0xfd, 0xe6, 0x18, 0x52, 0x42, 0x25, 0xc2, 0x62, 0xac, 0x01, 0x08, 0x08, 0x4a, 0x94, 0x02, 0xfd, + 0xe6, 0x18, 0x58, 0x02, 0x2d, 0xc2, 0x62, 0xac, 0x01, 0x08, 0x0a, 0x00, 0xe4, 0xf8, 0x8a, 0x8f, + 0x27, 0x3c, 0x1b, 0x05, 0xbe, 0xe2, 0xe3, 0x09, 0x91, 0x46, 0x81, 0xaf, 0x0c, 0x32, 0x14, 0x83, + 0x33, 0xc8, 0x10, 0x08, 0xce, 0x20, 0x43, 0xe0, 0x34, 0xc3, 0x06, 0x44, 0x15, 0x14, 0xc0, 0x20, + 0x03, 0x62, 0x34, 0x83, 0x0c, 0x41, 0xd1, 0xf8, 0x78, 0xc2, 0x45, 0x06, 0x83, 0x0c, 0x82, 0x14, + 0x0d, 0x1b, 0x10, 0x42, 0x50, 0x00, 0x83, 0x0c, 0x8c, 0xe2, 0x0c, 0x32, 0x04, 0x89, 0xe3, 0xe3, + 0x09, 0x5b, 0x19, 0x0c, 0x32, 0x08, 0x56, 0x35, 0x6c, 0x40, 0x08, 0x41, 0x01, 0x6c, 0x40, 0x0c, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0xa8, 0x83, 0x2d, 0x43, 0x13, 0xd4, 0xc1, 0x96, 0x41, + 0x0a, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, + 0x0d, 0xa0, 0xde, 0x1c, 0xc4, 0x4f, 0xa8, 0x04, 0x58, 0x80, 0xc5, 0x1c, 0xc4, 0x4f, 0xa4, 0x84, + 0x4a, 0x80, 0xc5, 0x58, 0x04, 0x10, 0x08, 0x04, 0x25, 0x4a, 0x81, 0x7a, 0x73, 0x10, 0x29, 0x41, + 0x16, 0x60, 0x01, 0x16, 0x73, 0x10, 0x3f, 0x91, 0x12, 0x64, 0x01, 0x16, 0x63, 0x11, 0x40, 0x20, + 0x14, 0x94, 0x28, 0x06, 0xea, 0xcd, 0x41, 0xb0, 0x04, 0x5a, 0x80, 0x05, 0x58, 0xcc, 0x41, 0xfc, + 0x44, 0x4a, 0xa0, 0x05, 0x58, 0x8c, 0x45, 0x00, 0x81, 0x60, 0x50, 0xa2, 0x0c, 0xa8, 0x37, 0x07, + 0xc1, 0x16, 0x2d, 0x01, 0x16, 0x60, 0x31, 0x07, 0xf1, 0x13, 0x29, 0xd1, 0x12, 0x60, 0x31, 0x16, + 0x01, 0x04, 0xc2, 0x01, 0x34, 0xd1, 0x8a, 0x8f, 0x27, 0x50, 0x60, 0x40, 0x01, 0xad, 0xf8, 0x78, + 0x82, 0xf5, 0x51, 0x40, 0x2b, 0x3e, 0x9e, 0x80, 0x79, 0x14, 0xd0, 0xca, 0x20, 0xc3, 0x51, 0x58, + 0x83, 0x0c, 0x01, 0x61, 0x0d, 0x32, 0x04, 0x83, 0x35, 0x6c, 0x40, 0x70, 0x41, 0x01, 0x0c, 0x32, + 0x28, 0x48, 0x35, 0xc8, 0x10, 0x1c, 0xd5, 0x20, 0x43, 0x60, 0x54, 0x3e, 0x9e, 0xf0, 0xb1, 0xc1, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0xe0, 0x30, 0xd5, 0x20, 0x43, 0xb0, 0x54, 0x83, 0x0c, + 0x81, 0x52, 0xf9, 0x78, 0xc2, 0x18, 0xb4, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x20, + 0x41, 0xd5, 0x20, 0x43, 0xf0, 0x54, 0x83, 0x0c, 0x81, 0x53, 0xf9, 0x78, 0xc2, 0x19, 0xb8, 0xc1, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, 0x01, 0x31, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa8, + 0x83, 0x2d, 0x83, 0x12, 0xd4, 0xc1, 0x96, 0xe1, 0x09, 0xea, 0x60, 0xcb, 0x40, 0x05, 0x75, 0xb0, + 0x65, 0xc8, 0x82, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xb4, 0x1b, 0x0d, 0x20, 0xdb, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x64, 0xec, 0x08, 0x19, + 0x3b, 0x32, 0xc8, 0x10, 0x14, 0x04, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x83, + 0x0c, 0xc3, 0x51, 0x60, 0x50, 0x88, 0xbf, 0x8f, 0x27, 0x28, 0xd9, 0xb0, 0x01, 0x11, 0x08, 0x04, + 0xb0, 0x01, 0x31, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xa8, 0x83, 0x2d, 0x43, 0x10, + 0xd4, 0xc1, 0x96, 0x81, 0x08, 0xea, 0x60, 0xcb, 0x80, 0x04, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x44, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xd0, 0x0a, 0x1d, 0xb4, 0x32, 0xc8, 0x10, + 0x18, 0x05, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x50, 0x00, 0x3e, 0x9e, 0x90, 0x5c, 0x83, + 0x0c, 0x44, 0x72, 0x60, 0x60, 0x88, 0xff, 0xb0, 0x01, 0x31, 0x04, 0x05, 0xe0, 0xe3, 0x09, 0xcc, + 0x35, 0xc8, 0x70, 0x30, 0x09, 0x06, 0x89, 0xf8, 0x0f, 0x1b, 0x10, 0x43, 0x50, 0x00, 0x1b, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa8, 0x83, 0x2d, 0x03, 0x12, + 0xd4, 0xc1, 0x96, 0x81, 0x09, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x44, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd0, 0x0a, 0x21, 0xb4, 0x32, 0xc8, 0x10, + 0x1c, 0x06, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x4a, 0x50, 0x00, 0x83, 0x0c, 0x43, 0x72, 0x60, + 0x50, 0x88, 0xbf, 0x8f, 0x27, 0x30, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x60, 0x30, + 0x09, 0x06, 0x88, 0xf8, 0xfb, 0x78, 0xc2, 0xa3, 0x0d, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, + 0xc9, 0xb3, 0x60, 0xb0, 0x88, 0xbf, 0x8f, 0x27, 0x48, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, + 0x01, 0x31, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xa8, 0x83, 0x2d, 0x43, 0x10, + 0xd4, 0xc1, 0x96, 0x81, 0x08, 0xea, 0x60, 0xcb, 0x80, 0x04, 0x75, 0xb0, 0x65, 0x60, 0x82, 0x3a, + 0xd8, 0x32, 0x40, 0x41, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xb4, 0x1b, 0x0d, 0x20, 0xdb, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x54, 0xec, 0x88, 0x8f, + 0x27, 0x18, 0x14, 0x05, 0x3b, 0x42, 0xc9, 0x8e, 0xf8, 0x78, 0x82, 0x72, 0x51, 0xb0, 0x23, 0x83, + 0x0c, 0x46, 0x82, 0x20, 0x11, 0x88, 0xff, 0x20, 0x83, 0xb1, 0x28, 0x48, 0x04, 0xe2, 0x8f, 0xc1, + 0x00, 0xfe, 0xc3, 0x06, 0xc4, 0x13, 0x10, 0x80, 0x8f, 0x27, 0x3c, 0x1e, 0x49, 0x3b, 0x42, 0xc9, + 0x8e, 0x0c, 0x32, 0x38, 0xd1, 0x83, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0xce, 0x14, 0x21, 0x11, 0x88, + 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa8, 0x83, 0x2d, 0x43, 0x11, 0xd4, 0xc1, 0x96, 0x61, + 0x09, 0xea, 0x60, 0xcb, 0xe0, 0x04, 0x75, 0xb0, 0x65, 0xa0, 0x82, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe4, 0x1b, 0x0d, 0xa0, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x64, 0xf8, 0x8a, 0x8f, + 0x27, 0x1c, 0x14, 0x05, 0xbe, 0xe2, 0xe3, 0x09, 0xc9, 0x44, 0x81, 0xaf, 0x10, 0x43, 0x2b, 0x3e, + 0x9e, 0xd0, 0x64, 0x14, 0xd0, 0x8a, 0x8f, 0x27, 0x3c, 0x18, 0x05, 0xb4, 0x32, 0xc8, 0x80, 0x38, + 0x0d, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x30, 0xd0, 0x83, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, + 0xc8, 0xb0, 0x4c, 0x12, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x71, 0x05, 0x05, + 0xe0, 0xe3, 0x09, 0x57, 0x19, 0x90, 0x46, 0x2b, 0xe4, 0xd0, 0x0a, 0x35, 0xb4, 0x32, 0xc8, 0x40, + 0x69, 0x18, 0x0e, 0x81, 0xf8, 0x0f, 0x32, 0x60, 0x9c, 0x86, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, + 0x3f, 0xc8, 0x70, 0x7d, 0x1d, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xc1, 0x04, + 0x05, 0xe0, 0xe3, 0x09, 0x63, 0xe0, 0x06, 0x64, 0x06, 0xb4, 0x42, 0x1a, 0xad, 0x50, 0x46, 0x2b, + 0x83, 0x0c, 0x60, 0x60, 0x06, 0x63, 0x80, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0x64, 0x80, 0x06, 0x65, + 0x80, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x30, 0x06, 0x6b, 0x80, 0x06, 0x78, 0x04, + 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0xa8, 0x83, 0x2d, 0x83, 0x14, 0xd4, 0xc1, 0x96, 0xc1, + 0x0a, 0xea, 0x60, 0xcb, 0xf0, 0x05, 0x75, 0xb0, 0x65, 0x18, 0x83, 0xa0, 0x0e, 0xb6, 0x0c, 0x6c, + 0x10, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x44, 0x1b, 0x0d, 0xa0, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x74, 0xd0, 0x8a, 0x8f, 0x27, 0x20, 0x15, 0x05, 0xb4, 0xe2, 0xe3, 0x09, + 0x0a, 0x45, 0x01, 0xad, 0xf8, 0x78, 0x02, 0x33, 0x51, 0x40, 0x2b, 0xf4, 0xd0, 0x8a, 0x8f, 0x27, + 0x40, 0x1c, 0x05, 0xb4, 0xe2, 0xe3, 0x09, 0xd2, 0x46, 0x01, 0xad, 0xf8, 0x78, 0x02, 0xa5, 0x51, + 0x40, 0x2b, 0x83, 0x0c, 0xce, 0x24, 0x21, 0x12, 0x88, 0xff, 0x20, 0x83, 0x53, 0x51, 0x88, 0x04, + 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0x83, 0x0c, 0x0f, 0x76, 0x61, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0x40, 0x9b, 0x86, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x7c, 0x41, + 0x01, 0xf8, 0x78, 0xc2, 0xd7, 0x06, 0x24, 0x06, 0xb4, 0x42, 0x13, 0xad, 0x90, 0x44, 0x2b, 0x14, + 0xd1, 0xca, 0x20, 0x83, 0x37, 0x06, 0x61, 0x80, 0x45, 0x20, 0xfe, 0x83, 0x0c, 0x5e, 0x19, 0x8c, + 0x01, 0x1a, 0x81, 0xf8, 0x63, 0x30, 0x80, 0xff, 0x20, 0xc3, 0x87, 0x06, 0x66, 0x80, 0x48, 0x20, + 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x00, 0x06, 0x6b, 0x90, 0x06, 0xa8, 0x04, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x14, 0x14, 0x80, 0x8f, 0x27, 0xbc, 0x81, 0x1e, 0x90, 0x1c, 0xd0, + 0x0a, 0x8d, 0x01, 0xad, 0x90, 0x18, 0xd0, 0x0a, 0x85, 0x01, 0xad, 0x0c, 0x32, 0xb8, 0xc1, 0x1c, + 0xc0, 0x01, 0x16, 0x81, 0xf8, 0x0f, 0x32, 0xb8, 0x41, 0x1d, 0xc8, 0x01, 0x1a, 0x81, 0xf8, 0x63, + 0x30, 0x80, 0xff, 0x20, 0xc3, 0x1b, 0xe0, 0x41, 0x1d, 0x20, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0xc0, 0xc1, 0x1e, 0xe0, 0x01, 0x2a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, + 0x01, 0x05, 0x05, 0xe0, 0xe3, 0x09, 0x7f, 0x70, 0x0a, 0x24, 0x0a, 0xb4, 0x42, 0x73, 0x40, 0x2b, + 0x24, 0x07, 0xb4, 0x42, 0x71, 0x40, 0x2b, 0x83, 0x0c, 0x7e, 0x30, 0x0a, 0x7f, 0x80, 0x45, 0x20, + 0xfe, 0x83, 0x0c, 0x7e, 0x50, 0x0a, 0xa1, 0x80, 0x46, 0x20, 0xfe, 0x18, 0x0c, 0xe0, 0x3f, 0xc8, + 0xf0, 0x07, 0xa8, 0x40, 0x0a, 0x88, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xa0, 0xb0, + 0x0a, 0xa7, 0x80, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x40, 0x41, 0x01, 0x6c, + 0x40, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa8, 0x83, 0x2d, 0x43, 0x13, + 0xd4, 0xc1, 0x96, 0x21, 0x0b, 0xea, 0x60, 0xcb, 0xe0, 0x05, 0x75, 0xb0, 0x65, 0x50, 0x83, 0xa0, + 0x0e, 0xb6, 0x0c, 0x6f, 0x10, 0xd4, 0xc1, 0x96, 0x61, 0x0f, 0x82, 0x3a, 0xd8, 0x32, 0x80, 0x42, + 0x50, 0x07, 0x5b, 0x06, 0x56, 0x08, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xb4, 0x1b, 0x0d, 0x20, 0xdb, 0x58, 0x42, 0x00, 0x50, 0x62, 0x34, 0x80, 0x6c, 0x73, 0x08, 0x29, + 0x01, 0x16, 0x00, 0x00, 0x54, 0xec, 0x88, 0x8f, 0x27, 0x18, 0x13, 0x05, 0x3b, 0x32, 0xc8, 0x10, + 0x1c, 0x06, 0x06, 0x84, 0xf8, 0x0f, 0x32, 0x04, 0x89, 0x81, 0x42, 0x10, 0xfe, 0x63, 0x08, 0xc1, + 0xc6, 0x41, 0x40, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa8, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x81, 0x22, 0x00, 0x00, 0x00, 0x00, + 0x34, 0xf8, 0x8a, 0x8f, 0x27, 0x10, 0x10, 0x05, 0xbe, 0xe2, 0xe3, 0x09, 0xc6, 0x43, 0x81, 0xaf, + 0x8c, 0x21, 0x14, 0xd7, 0x18, 0x02, 0x81, 0x8c, 0x21, 0x0c, 0x08, 0x06, 0x82, 0xf8, 0x8f, 0x21, + 0x14, 0xcb, 0x18, 0x02, 0xb2, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0x63, 0x80, 0x88, 0xff, + 0x18, 0x02, 0x03, 0x06, 0x63, 0x08, 0x4f, 0x84, 0x49, 0x20, 0xfe, 0x63, 0x08, 0x91, 0x84, 0x49, + 0x20, 0xfe, 0x18, 0x0c, 0xe1, 0x8f, 0x81, 0x21, 0xfe, 0x63, 0x08, 0xd1, 0x19, 0x20, 0x73, 0x88, + 0x3f, 0x46, 0x86, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x06, 0x84, 0xf8, 0x63, 0x13, 0x80, 0x3f, 0x06, + 0x07, 0xf8, 0x73, 0x00, 0x61, 0x20, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x34, 0x28, 0xa8, 0xc2, 0x22, 0xda, 0x68, 0x00, + 0x25, 0xca, 0x60, 0x34, 0x80, 0x6c, 0x73, 0x08, 0x61, 0x21, 0x16, 0x34, 0x28, 0x01, 0xda, 0x8d, + 0x06, 0x50, 0x6f, 0x2c, 0x02, 0x00, 0x80, 0x80, 0x6c, 0x73, 0x08, 0x62, 0xc1, 0x12, 0xd4, 0x1b, + 0x8b, 0x00, 0x02, 0x20, 0x20, 0xdb, 0x1c, 0x02, 0x4b, 0x88, 0xc5, 0x1c, 0x82, 0x58, 0x84, 0x05, + 0x0d, 0x0a, 0x89, 0x6c, 0x73, 0x08, 0x62, 0x91, 0x12, 0x73, 0x08, 0x29, 0x21, 0x16, 0xd4, 0x1b, + 0x8b, 0x00, 0x84, 0x60, 0x18, 0x8b, 0x08, 0x8a, 0xa2, 0x18, 0x8b, 0x10, 0x0c, 0xc3, 0x18, 0x8b, + 0x18, 0x8e, 0xe3, 0x20, 0xda, 0x58, 0x04, 0x08, 0x82, 0x20, 0xfe, 0x81, 0x20, 0x08, 0xe2, 0xbf, + 0x00, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x90, 0x61, 0x8c, 0x00, 0x04, 0x41, + 0x10, 0x04, 0x05, 0x00, 0x74, 0xd1, 0x8a, 0x8f, 0x27, 0x60, 0x64, 0x40, 0x01, 0xad, 0xf8, 0x78, + 0x82, 0x06, 0x06, 0x14, 0xd0, 0x8a, 0x8f, 0x27, 0x70, 0x1b, 0x05, 0x06, 0xe2, 0xe3, 0x09, 0x1e, + 0x47, 0x81, 0x61, 0x0c, 0x32, 0x14, 0x9d, 0x36, 0xc7, 0x10, 0x08, 0xda, 0x20, 0x43, 0xa0, 0x65, + 0x83, 0x0c, 0x0a, 0x18, 0x64, 0x73, 0x0c, 0xc1, 0x31, 0x07, 0x83, 0x0c, 0x41, 0xa7, 0x21, 0x11, + 0x88, 0xff, 0x20, 0x03, 0x43, 0x06, 0xdb, 0x1c, 0x43, 0xb0, 0x84, 0xc1, 0x20, 0x43, 0x10, 0x06, + 0x60, 0x30, 0xc8, 0x10, 0x9d, 0x41, 0x37, 0xc7, 0x10, 0x30, 0x7a, 0x30, 0xc8, 0x10, 0x90, 0x41, + 0x18, 0x20, 0x11, 0x88, 0x3f, 0x22, 0x41, 0xf8, 0xfb, 0x78, 0xc2, 0x1b, 0x84, 0x01, 0x05, 0x86, + 0x31, 0xc8, 0x80, 0xb9, 0x81, 0x18, 0xcc, 0x31, 0x04, 0x42, 0x28, 0x0c, 0x32, 0x04, 0x6b, 0x80, + 0x06, 0x28, 0x05, 0xe2, 0x3f, 0xc8, 0xa0, 0xc9, 0x41, 0x19, 0xcc, 0x31, 0x04, 0xc6, 0x1b, 0x0c, + 0x32, 0x04, 0x6f, 0xe0, 0x06, 0x18, 0x30, 0xe2, 0x8f, 0x45, 0x10, 0xfe, 0x18, 0x1d, 0xe2, 0x8f, + 0x84, 0x25, 0xfe, 0x28, 0x04, 0xe1, 0x3f, 0xc8, 0xf0, 0xe8, 0x01, 0x1b, 0x0c, 0x32, 0x14, 0x7b, + 0xd0, 0x06, 0x83, 0x0c, 0x03, 0x1f, 0xb8, 0xc1, 0x20, 0xc3, 0x19, 0xa4, 0x81, 0x1b, 0x0c, 0x32, + 0xa0, 0x81, 0x1a, 0xb8, 0xc1, 0x20, 0x43, 0x1a, 0xac, 0x81, 0x1b, 0xa0, 0x31, 0x88, 0x3f, 0x16, + 0x82, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x16, 0x88, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0xc6, 0xc1, 0x1c, + 0x88, 0x3f, 0x06, 0x82, 0xf8, 0x8f, 0x18, 0x1c, 0x40, 0x08, 0x82, 0x85, 0x7f, 0xd4, 0x41, 0x38, + 0xd0, 0x41, 0xc0, 0x41, 0x40, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xa8, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xb4, 0x1b, 0x0d, 0xa0, + 0xc4, 0x68, 0x00, 0xd9, 0xe6, 0x10, 0x52, 0x02, 0x2c, 0x68, 0x50, 0x02, 0x64, 0x18, 0x23, 0x00, + 0x41, 0x10, 0xc4, 0x3f, 0xa2, 0x8d, 0x06, 0x50, 0x6f, 0x04, 0x60, 0x0e, 0x22, 0x25, 0xc0, 0x02, + 0x2c, 0x58, 0x82, 0x06, 0x45, 0x00, 0x00, 0x00, 0xb4, 0xec, 0x88, 0x8f, 0x27, 0x30, 0x19, 0x05, + 0x3b, 0x32, 0xc8, 0x10, 0x30, 0x0a, 0x06, 0x84, 0xf8, 0x8f, 0x21, 0x04, 0xdf, 0x18, 0x02, 0x01, + 0x06, 0x63, 0x08, 0x47, 0x83, 0x42, 0x20, 0xfe, 0x48, 0x04, 0xe1, 0x8f, 0x4f, 0x40, 0xfe, 0x46, + 0x80, 0xbf, 0x19, 0xe0, 0x3f, 0xc7, 0x10, 0x0d, 0x67, 0x30, 0xc8, 0x10, 0x48, 0xd1, 0x20, 0x43, + 0xf3, 0x44, 0x73, 0x0c, 0x41, 0x61, 0xcd, 0x31, 0x04, 0x85, 0x84, 0x44, 0x20, 0xfe, 0xc3, 0x06, + 0x44, 0x17, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xa8, + 0x83, 0x2d, 0xc3, 0x14, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x81, 0x22, 0x20, 0xc3, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xd1, 0xa0, 0x90, 0x0a, + 0x0a, 0x00, 0x00, 0x00, 0x74, 0xf8, 0x8a, 0x8f, 0x27, 0x20, 0x14, 0x05, 0xbe, 0xe2, 0xe3, 0x09, + 0xca, 0x44, 0x81, 0xaf, 0x8c, 0x21, 0x14, 0xdb, 0x18, 0x02, 0xb1, 0x8c, 0x21, 0x0c, 0x0b, 0x06, + 0x82, 0xf8, 0x8f, 0x21, 0x14, 0xce, 0x18, 0x02, 0xe2, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, + 0x63, 0x80, 0x88, 0xff, 0x18, 0x02, 0x43, 0x06, 0x63, 0x08, 0x0f, 0x85, 0x49, 0x20, 0xfe, 0x63, + 0x08, 0x51, 0x85, 0x49, 0x20, 0xfe, 0x18, 0x0c, 0xe1, 0x8f, 0x81, 0x21, 0xfe, 0x63, 0x08, 0xd1, + 0x1a, 0x20, 0x73, 0x88, 0x3f, 0x46, 0x86, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x06, 0x84, 0xf8, 0x63, + 0x13, 0x80, 0x3f, 0x06, 0x07, 0xf8, 0xe3, 0x17, 0x90, 0x3f, 0x06, 0x91, 0xf8, 0x0f, 0x1b, 0x10, + 0x64, 0x10, 0x14, 0x00, 0x0a, 0x8b, 0xf8, 0xfb, 0x78, 0x42, 0x19, 0xd0, 0xc1, 0xb0, 0x01, 0x11, + 0x08, 0x03, 0x80, 0x04, 0x22, 0xfe, 0x3e, 0x9e, 0x70, 0x06, 0x75, 0x30, 0x6c, 0x40, 0x04, 0x02, + 0x01, 0x60, 0x83, 0x89, 0x3f, 0x72, 0x95, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x26, 0x81, 0xf8, 0xfb, + 0x78, 0x02, 0x1b, 0xe4, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x80, 0x60, 0x20, 0x06, 0xe2, 0x8f, + 0xd3, 0x25, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x4e, 0x20, 0xfe, 0x3e, 0x9e, 0x10, 0x07, 0x7a, 0x30, + 0x6c, 0x40, 0x04, 0xc2, 0x00, 0xa0, 0xb7, 0x89, 0x3f, 0x8e, 0x01, 0x1a, 0x88, 0x3f, 0x0a, 0x41, + 0xf8, 0xe3, 0x14, 0x88, 0xbf, 0x8f, 0x27, 0xd8, 0x81, 0x28, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, + 0x88, 0x06, 0x63, 0x20, 0xfe, 0xd8, 0xb1, 0x81, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x62, 0x81, 0xf8, + 0xfb, 0x78, 0xc2, 0x1e, 0x94, 0xc2, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x80, 0x61, 0x70, 0x06, 0xe2, + 0x8f, 0x6e, 0x20, 0x07, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0xd8, 0x05, 0xe2, 0xef, 0xe3, 0x09, 0xa0, + 0xc0, 0x07, 0xc3, 0x06, 0x44, 0x20, 0x0c, 0x00, 0xd6, 0x81, 0x1d, 0x88, 0x3f, 0xba, 0x41, 0x1b, + 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0xa3, 0x18, 0x04, 0xe2, 0xef, 0xe3, 0x09, 0xa5, 0x00, 0x0a, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x2f, 0xc8, + 0x83, 0x2d, 0x43, 0x18, 0x04, 0x7a, 0xb0, 0x65, 0x20, 0x83, 0x60, 0x0f, 0xb6, 0x0c, 0x6a, 0x10, + 0xe4, 0xc1, 0x96, 0x01, 0x0e, 0x02, 0x3d, 0xd8, 0x32, 0xd8, 0x41, 0xb0, 0x07, 0x5b, 0x06, 0x3e, + 0x08, 0xf2, 0x60, 0xcb, 0x20, 0x0a, 0x81, 0x1e, 0x6c, 0x19, 0x50, 0x21, 0xd8, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xd4, 0x1b, 0x8b, 0x18, 0x86, 0xe1, 0x18, 0x8b, + 0x10, 0x0c, 0xc1, 0x18, 0x8b, 0x10, 0x04, 0xc1, 0x18, 0x8b, 0x18, 0x8e, 0xe1, 0x18, 0x8b, 0x08, + 0x8a, 0xa0, 0x18, 0x8b, 0x08, 0x82, 0xa0, 0x18, 0x8b, 0x00, 0x08, 0x80, 0x18, 0x8b, 0x00, 0x00, + 0x80, 0x20, 0xda, 0x68, 0x00, 0xf5, 0xc6, 0x22, 0x00, 0x21, 0x18, 0xc6, 0x22, 0x00, 0x82, 0x20, + 0xc6, 0x22, 0x82, 0xa2, 0x28, 0xc6, 0x22, 0x04, 0xc3, 0x30, 0xc6, 0x22, 0x86, 0xe3, 0x38, 0x88, + 0x36, 0x16, 0x01, 0x82, 0x20, 0x88, 0x7f, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, 0xe2, + 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x63, 0x11, 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, + 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x20, 0x08, 0x82, 0xf8, 0x47, 0x89, 0x11, 0x80, 0xd1, + 0x00, 0xea, 0xcd, 0x41, 0xbc, 0x85, 0x4a, 0xc0, 0x05, 0x5c, 0xcc, 0x41, 0xbc, 0x45, 0x4a, 0xa8, + 0x04, 0x5c, 0x8c, 0x45, 0x00, 0x81, 0x40, 0x90, 0x61, 0x8c, 0x00, 0x04, 0x41, 0x10, 0x04, 0x85, + 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0xa3, 0xde, 0x08, 0x00, 0x00, 0x00, 0xa4, 0xd1, 0x8a, 0x8f, + 0x27, 0x6c, 0x67, 0x40, 0x01, 0xad, 0xf8, 0x78, 0x42, 0x67, 0x06, 0x14, 0xd0, 0x8a, 0x8f, 0x27, + 0x7c, 0x65, 0x40, 0x01, 0xad, 0x0c, 0x32, 0x04, 0xc3, 0x37, 0xc8, 0x40, 0x18, 0x1f, 0x0a, 0x81, + 0xf8, 0x0f, 0x32, 0x10, 0x06, 0x18, 0x0c, 0x32, 0x1c, 0x09, 0x18, 0xa0, 0x10, 0x88, 0x3f, 0x12, + 0x41, 0xf8, 0x0f, 0x32, 0x28, 0x8c, 0x18, 0x20, 0x12, 0x88, 0xff, 0x20, 0x83, 0xc2, 0x8c, 0x01, + 0x06, 0x86, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x26, 0x85, 0xf8, 0x23, 0xc1, 0x88, 0x3f, 0x0a, 0x41, + 0xf8, 0x0f, 0x32, 0x48, 0x14, 0x1a, 0x20, 0x14, 0x88, 0xff, 0x20, 0x83, 0x44, 0xa5, 0x01, 0x06, + 0x8e, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x46, 0x85, 0xf8, 0x23, 0x41, 0x89, 0x3f, 0x0a, 0x41, 0xf8, + 0xa3, 0x83, 0x88, 0x3f, 0x1e, 0x91, 0xf8, 0xa3, 0x10, 0x84, 0xff, 0x20, 0x03, 0x15, 0x07, 0x70, + 0x30, 0xc8, 0x00, 0xc9, 0x41, 0x1c, 0x0c, 0x32, 0x38, 0x73, 0x20, 0x07, 0x83, 0x0c, 0x0a, 0x1d, + 0xcc, 0xc1, 0x20, 0x03, 0x52, 0x07, 0x74, 0x30, 0xc8, 0x60, 0xd8, 0x41, 0x1d, 0x0c, 0x32, 0x94, + 0xc1, 0x19, 0xd4, 0xc1, 0x20, 0x83, 0x19, 0xa0, 0x41, 0x1d, 0x0c, 0x32, 0x9c, 0x41, 0x1a, 0xd4, + 0xc1, 0x20, 0x03, 0x1a, 0xa8, 0x41, 0x1d, 0xa0, 0x32, 0x88, 0x3f, 0x26, 0x82, 0xf8, 0x63, 0x20, + 0x80, 0x3f, 0x16, 0x8c, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x3e, 0x89, 0xf8, 0x23, 0x73, 0x88, 0x3f, + 0x06, 0x02, 0xf8, 0xa3, 0xf2, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0xe3, 0xe4, 0x88, 0x3f, 0x42, 0x8c, + 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x42, 0x94, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x5e, 0x93, 0xf8, 0x63, + 0x25, 0x89, 0x3f, 0x06, 0x02, 0xf8, 0x63, 0x85, 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0x23, 0x94, 0x0a, + 0xe2, 0x8f, 0x4c, 0x2a, 0x88, 0x3f, 0x22, 0xab, 0x20, 0xfe, 0x48, 0xac, 0x82, 0xf8, 0x0f, 0x32, + 0x10, 0x43, 0x2a, 0x0c, 0x32, 0x04, 0x43, 0x2a, 0x0c, 0x32, 0x04, 0x43, 0x2a, 0x60, 0x60, 0x0a, + 0xe2, 0x3f, 0x62, 0x70, 0x00, 0x21, 0x08, 0x16, 0xfe, 0x51, 0x07, 0xf8, 0xa0, 0x0a, 0x01, 0xaa, + 0x42, 0x40, 0xfe, 0x73, 0x0c, 0xb9, 0x10, 0xc8, 0xc3, 0x20, 0x43, 0xa0, 0x0b, 0xab, 0x80, 0x01, + 0x23, 0xfe, 0xc3, 0x06, 0x44, 0x39, 0x04, 0x05, 0x80, 0x02, 0x23, 0xfe, 0x3e, 0x9e, 0x60, 0x0e, + 0xf3, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x20, 0xd1, 0x88, 0xbf, 0x8f, 0x27, 0xa0, 0x83, 0x3c, + 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x68, 0x38, 0xe2, 0xef, 0xe3, 0x09, 0xea, 0x10, 0x0f, 0xc3, + 0x06, 0x44, 0x20, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xa8, + 0x83, 0x2d, 0x03, 0x2b, 0x04, 0x75, 0xb0, 0x65, 0x78, 0x85, 0xa0, 0x0e, 0xb6, 0x0c, 0xb2, 0x10, + 0xd4, 0xc1, 0x96, 0xa1, 0x16, 0x82, 0x3a, 0x00, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x30, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xe3, 0x09, 0x44, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0x3e, 0x9e, 0x60, 0x54, 0x14, 0x24, 0xc6, 0x88, 0x01, 0x42, 0x06, 0x21, 0x08, + 0x06, 0x8a, 0x4b, 0x18, 0xc4, 0x10, 0x0c, 0x1b, 0x10, 0x48, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, + 0x08, 0x46, 0x61, 0xcb, 0x50, 0x04, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xe3, 0x09, 0x44, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0x3e, 0x9e, 0x60, 0x54, 0x14, 0x24, 0xc6, 0x88, 0x01, 0x42, 0x06, 0x21, 0x08, + 0x06, 0x0a, 0x4b, 0x18, 0xc4, 0x10, 0x0c, 0x1b, 0x10, 0x48, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, + 0x08, 0x46, 0x61, 0xcb, 0x50, 0x04, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xe3, 0x09, 0x44, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0x3e, 0x9e, 0x60, 0x54, 0x14, 0x24, 0xc6, 0x88, 0x01, 0x42, 0x06, 0x21, 0x08, + 0x06, 0x8c, 0x4a, 0x18, 0xc4, 0x10, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, + 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x0c, 0x51, 0x00, 0x3e, 0x9e, 0xc0, 0x70, 0xc3, 0x06, + 0x44, 0x40, 0x0c, 0x80, 0x8f, 0x27, 0x34, 0xdc, 0xb0, 0x01, 0x11, 0x10, 0x04, 0xe0, 0xe3, 0x09, + 0x8e, 0x36, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, + 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x58, 0x82, 0x3b, 0xd8, 0x32, 0x34, 0xc1, 0x1d, 0x6c, 0x19, 0x9e, + 0xe0, 0x0e, 0xb6, 0x0c, 0x51, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xd4, 0x18, 0x0d, 0x00, 0x44, 0x00, 0x8a, 0x8f, 0x27, 0x14, 0x12, 0x05, 0x03, 0x42, 0x46, 0x82, + 0xf8, 0x78, 0xc2, 0x61, 0x51, 0x90, 0x18, 0x84, 0x18, 0x8a, 0x8f, 0x27, 0x24, 0x19, 0x05, 0x86, + 0xe1, 0xe3, 0x09, 0x8b, 0x46, 0x81, 0x81, 0xf8, 0x78, 0x42, 0x93, 0x51, 0x60, 0x18, 0xb3, 0x0d, + 0xce, 0x01, 0xcc, 0x36, 0x04, 0x46, 0x30, 0xdb, 0x10, 0x14, 0xc2, 0x6c, 0x43, 0x40, 0x0c, 0x23, + 0x06, 0x49, 0x19, 0x84, 0x20, 0x18, 0x38, 0x34, 0x11, 0x3d, 0x0e, 0x13, 0x6c, 0x40, 0x0c, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, + 0x08, 0x46, 0x61, 0xcb, 0x50, 0x04, 0xa4, 0xb0, 0x65, 0x30, 0x82, 0x3b, 0xd8, 0x32, 0x20, 0xc1, + 0x1d, 0x6c, 0x19, 0x94, 0xe0, 0x0e, 0xb6, 0x0c, 0x4c, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf4, 0x18, 0x0d, 0x00, 0x44, 0x00, 0x8a, 0x8f, 0x27, 0x14, 0x12, 0x05, + 0x03, 0x42, 0x46, 0x82, 0xf8, 0x78, 0xc2, 0x61, 0x51, 0x90, 0x18, 0x84, 0x0c, 0x8a, 0x8f, 0x27, + 0x24, 0x18, 0x05, 0x03, 0x32, 0xdb, 0xa0, 0x0c, 0xc0, 0x6c, 0x43, 0x20, 0x04, 0x23, 0x06, 0x09, + 0x19, 0x84, 0x20, 0x18, 0x40, 0x2c, 0xb1, 0x24, 0x88, 0x11, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, + 0x08, 0x46, 0x61, 0xcb, 0x50, 0x04, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xf4, 0x18, 0x0d, 0x00, 0x44, 0x00, 0x8a, 0x8f, 0x27, 0x14, 0x12, 0x05, 0x03, 0x42, 0x46, 0x82, + 0xf8, 0x78, 0xc2, 0x61, 0x51, 0x90, 0x18, 0x84, 0x0c, 0x8a, 0x8f, 0x27, 0x24, 0x18, 0x05, 0x03, + 0x32, 0xdb, 0xa0, 0x0c, 0xc0, 0x6c, 0x43, 0x20, 0x04, 0x23, 0x06, 0x09, 0x19, 0x84, 0x20, 0x18, + 0x40, 0x2a, 0xb1, 0x24, 0x88, 0x11, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, 0x08, 0x46, 0x61, 0xcb, + 0x50, 0x04, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xe3, 0x09, 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, + 0x9e, 0x60, 0x54, 0x14, 0x24, 0x86, 0x8f, 0x27, 0x20, 0x16, 0x05, 0x09, 0x32, 0x62, 0x90, 0x98, + 0x41, 0x08, 0x82, 0x41, 0x44, 0x12, 0x88, 0x51, 0x0c, 0xc1, 0xb0, 0x01, 0xa1, 0x04, 0x05, 0xb0, + 0x01, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, + 0x80, 0xc2, 0x96, 0x61, 0x08, 0x4c, 0x61, 0xcb, 0x50, 0x04, 0xa7, 0xb0, 0x65, 0x38, 0x02, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xe3, 0x09, 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, + 0x9e, 0x60, 0x54, 0x14, 0x24, 0x86, 0x8f, 0x27, 0x20, 0x16, 0x05, 0x09, 0x32, 0x62, 0x90, 0x98, + 0x41, 0x08, 0x82, 0x41, 0x24, 0x12, 0x88, 0x51, 0x0c, 0xc1, 0xb0, 0x01, 0xa1, 0x04, 0x05, 0xb0, + 0x01, 0x31, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, + 0x80, 0xc2, 0x96, 0x61, 0x08, 0x4c, 0x61, 0xcb, 0x50, 0x04, 0xa7, 0xb0, 0x65, 0x38, 0x02, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xe3, 0x09, 0x44, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, + 0x9e, 0x60, 0x54, 0x14, 0x24, 0x86, 0x8f, 0x27, 0x20, 0x16, 0x05, 0x09, 0x32, 0x62, 0x90, 0x98, + 0x41, 0x08, 0x82, 0x81, 0x04, 0x12, 0x88, 0x51, 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, + 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0xb0, 0x01, 0xe1, 0x10, 0x05, 0xe0, 0xe3, 0x09, + 0x8e, 0x37, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x78, 0xc2, 0xe3, 0x0d, 0x1b, 0x10, 0x01, 0x41, + 0x00, 0x3e, 0x9e, 0x00, 0x71, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, + 0x08, 0x4c, 0x61, 0xcb, 0x50, 0x04, 0xa7, 0xb0, 0x65, 0x38, 0x02, 0x54, 0xd8, 0x32, 0x34, 0xc1, + 0x1d, 0x6c, 0x19, 0x9e, 0xe0, 0x0e, 0xb6, 0x0c, 0x51, 0x70, 0x07, 0x5b, 0x86, 0x29, 0xb8, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x18, 0x0d, 0x00, + 0x44, 0x00, 0x8a, 0x8f, 0x27, 0x14, 0x12, 0x05, 0x03, 0x42, 0x46, 0xa2, 0xf8, 0x78, 0xc2, 0x61, + 0x51, 0x90, 0x18, 0x3e, 0x9e, 0x90, 0x5c, 0x14, 0x24, 0x08, 0x29, 0x86, 0xe2, 0xe3, 0x09, 0xcb, + 0x46, 0x81, 0x61, 0xf8, 0x78, 0x42, 0xc3, 0x51, 0x60, 0x20, 0x3e, 0x9e, 0xf0, 0x6c, 0x14, 0x18, + 0xc6, 0x6c, 0x03, 0x74, 0x00, 0xb3, 0x0d, 0x81, 0x11, 0xcc, 0x36, 0x04, 0x85, 0x30, 0xdb, 0x10, + 0x10, 0xc3, 0x88, 0x81, 0x72, 0x06, 0x21, 0x08, 0x06, 0x93, 0x4a, 0x4c, 0x11, 0xe4, 0x30, 0xc1, + 0x06, 0xc4, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, + 0x80, 0xc2, 0x96, 0x61, 0x08, 0x4c, 0x61, 0xcb, 0x50, 0x04, 0xa7, 0xb0, 0x65, 0x38, 0x02, 0x54, + 0xd8, 0x32, 0x20, 0xc1, 0x1d, 0x6c, 0x19, 0x94, 0xe0, 0x0e, 0xb6, 0x0c, 0x4c, 0x70, 0x07, 0x5b, + 0x06, 0x27, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xf4, 0x18, 0x0d, 0x00, 0x44, 0x00, 0x8a, 0x8f, 0x27, 0x14, 0x12, 0x05, 0x03, 0x42, 0x46, 0xa2, + 0xf8, 0x78, 0xc2, 0x61, 0x51, 0x90, 0x18, 0x3e, 0x9e, 0x90, 0x5c, 0x14, 0x24, 0x08, 0x29, 0x83, + 0xe2, 0xe3, 0x09, 0x8b, 0x46, 0xc1, 0x80, 0xcc, 0x36, 0x30, 0x03, 0x30, 0xdb, 0x10, 0x08, 0xc1, + 0x88, 0x81, 0x62, 0x06, 0x21, 0x08, 0x06, 0x94, 0x48, 0x34, 0x8b, 0x82, 0x18, 0xc1, 0x06, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, + 0x80, 0xc2, 0x96, 0x61, 0x08, 0x4c, 0x61, 0xcb, 0x50, 0x04, 0xa7, 0xb0, 0x65, 0x38, 0x02, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x18, 0x0d, 0x00, + 0x44, 0x00, 0x8a, 0x8f, 0x27, 0x14, 0x12, 0x05, 0x03, 0x42, 0x46, 0xa2, 0xf8, 0x78, 0xc2, 0x61, + 0x51, 0x90, 0x18, 0x3e, 0x9e, 0x90, 0x5c, 0x14, 0x24, 0x08, 0x29, 0x83, 0xe2, 0xe3, 0x09, 0x8b, + 0x46, 0xc1, 0x80, 0xcc, 0x36, 0x30, 0x03, 0x30, 0xdb, 0x10, 0x08, 0xc1, 0x88, 0x81, 0x62, 0x06, + 0x21, 0x08, 0x06, 0x14, 0x48, 0x34, 0x8b, 0x82, 0x18, 0xc1, 0x06, 0xc4, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf8, 0x83, 0x2d, 0x83, 0x10, 0x80, 0xc2, 0x96, 0x61, + 0x08, 0x4c, 0x61, 0xcb, 0x50, 0x04, 0xa7, 0xb0, 0x65, 0x38, 0x02, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, + 0x3e, 0x9e, 0x40, 0x44, 0x14, 0x0c, 0x48, 0x06, 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x1c, 0x36, + 0x20, 0x10, 0x81, 0x00, 0x7c, 0x3c, 0x01, 0xb9, 0x86, 0x0d, 0x88, 0x40, 0x18, 0x80, 0x0d, 0x88, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x22, 0x48, 0x85, 0x2d, 0xc3, 0x11, + 0xa4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0xff, 0xff, + 0x83, 0x02, 0x01, 0x00, 0x3e, 0x9e, 0x40, 0x44, 0x14, 0x0c, 0x48, 0x06, 0x09, 0xb8, 0xa0, 0xd0, + 0x13, 0x0a, 0x3c, 0x42, 0x42, 0x0d, 0x12, 0x10, 0x70, 0x41, 0xa2, 0xc3, 0x06, 0xc4, 0x52, 0x14, + 0x80, 0x8f, 0x27, 0x2c, 0xda, 0xb0, 0x01, 0x11, 0x14, 0x03, 0xe0, 0xe3, 0x09, 0x8c, 0x36, 0x6c, + 0x40, 0x04, 0x03, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0x48, + 0x85, 0x2d, 0x83, 0x12, 0xa4, 0xc2, 0x96, 0x81, 0x09, 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0x01, 0x05, + 0x21, 0xf0, 0xf1, 0x84, 0x80, 0xa2, 0x00, 0x50, 0x7c, 0x3c, 0x61, 0xb8, 0x28, 0x18, 0x90, 0x0c, + 0x12, 0x70, 0x01, 0x18, 0xe0, 0x05, 0x8a, 0x52, 0x63, 0x20, 0x3e, 0x9e, 0xe0, 0x78, 0x14, 0x18, + 0xc6, 0x88, 0x01, 0x82, 0x06, 0x21, 0x08, 0x06, 0x56, 0x3f, 0x24, 0xc4, 0x10, 0x8c, 0x26, 0x04, + 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x14, 0x51, + 0x00, 0x3e, 0x9e, 0x40, 0x95, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xe0, 0xe3, 0x09, 0x55, 0x19, + 0x0c, 0x1b, 0x10, 0x01, 0x41, 0x00, 0x3e, 0x9e, 0x60, 0x8d, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, + 0xb0, 0x01, 0x31, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0x03, 0x11, + 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, 0xa0, 0x04, 0xb0, 0xb0, 0x65, 0x60, 0x82, 0x58, + 0xd8, 0x32, 0x48, 0xc1, 0x1d, 0x6c, 0x19, 0xa8, 0xe0, 0x0e, 0xb6, 0x0c, 0x56, 0x70, 0x07, 0x5b, + 0x06, 0x2c, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0x01, 0x05, 0x21, 0xf0, 0xf1, 0x84, + 0xa0, 0xa2, 0x00, 0x50, 0x7c, 0x3c, 0x61, 0xc0, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0x18, + 0xe0, 0x05, 0x8a, 0x92, 0x63, 0x20, 0x3e, 0x9e, 0xf0, 0x7c, 0x14, 0x18, 0xc6, 0x88, 0x41, 0x92, + 0x06, 0x21, 0x08, 0x06, 0x18, 0x3f, 0x24, 0xc4, 0x10, 0x40, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, + 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0xc3, 0x06, 0x04, 0x45, 0x14, 0x80, 0x8f, 0x27, + 0x50, 0x66, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x78, 0x42, 0x65, 0x06, 0xc3, 0x06, 0x44, + 0x40, 0x10, 0x80, 0x8f, 0x27, 0x58, 0x64, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0x6c, 0x40, 0x0c, + 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0x03, 0x11, 0xb4, 0xc2, 0x96, 0xc1, + 0x08, 0x5c, 0x61, 0xcb, 0xa0, 0x04, 0xb0, 0xb0, 0x65, 0x60, 0x82, 0x58, 0xd8, 0x32, 0x48, 0xc1, + 0x1d, 0x6c, 0x19, 0xa8, 0xe0, 0x0e, 0xb6, 0x0c, 0x56, 0x70, 0x07, 0x5b, 0x06, 0x2c, 0xb8, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0x01, 0x05, 0x21, 0xf0, 0xf1, 0x84, 0xc0, 0xa2, 0x00, 0x50, + 0x7c, 0x3c, 0x61, 0xc8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x81, 0x18, 0xe0, 0x05, 0x8a, 0xd2, + 0x63, 0x20, 0x3e, 0x9e, 0x00, 0x81, 0x01, 0x05, 0x86, 0x41, 0x91, 0x81, 0xf8, 0x78, 0x82, 0x34, + 0x06, 0x14, 0x18, 0x06, 0x4d, 0x06, 0xe2, 0xe3, 0x09, 0x94, 0x19, 0x50, 0x60, 0x18, 0x23, 0x06, + 0x8c, 0x1a, 0x84, 0x20, 0x18, 0x68, 0x21, 0xf1, 0x28, 0xc9, 0x61, 0x10, 0x43, 0x30, 0x9a, 0x10, + 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x68, 0x44, + 0x01, 0xf8, 0x78, 0x82, 0xd6, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0x80, 0x8f, 0x27, 0x6c, 0x6d, + 0x30, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x78, 0x02, 0xb7, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, + 0xc0, 0x06, 0xc4, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0x03, 0x11, + 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, 0xa0, 0x04, 0xb0, 0xb0, 0x65, 0x60, 0x82, 0x58, + 0xd8, 0x32, 0x34, 0x01, 0x2c, 0x6c, 0x19, 0x9e, 0x20, 0x16, 0xb6, 0x0c, 0x50, 0x00, 0x0b, 0x5b, + 0x06, 0x29, 0x88, 0x85, 0x2d, 0x03, 0x16, 0xdc, 0xc1, 0x96, 0x41, 0x0b, 0xee, 0x60, 0xcb, 0xc0, + 0x05, 0x77, 0xb0, 0x65, 0xf0, 0x82, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0x01, 0x05, 0x21, 0xf0, 0xf1, 0x84, + 0xe0, 0xa2, 0x00, 0x50, 0x7c, 0x3c, 0x61, 0xd0, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0xc1, 0x18, + 0xe0, 0x05, 0x8a, 0x12, 0x64, 0x20, 0x3e, 0x9e, 0x10, 0x85, 0x01, 0x05, 0x86, 0x41, 0x92, 0x81, + 0xf8, 0x78, 0xc2, 0x44, 0x06, 0x14, 0x18, 0x06, 0x51, 0x06, 0xe2, 0xe3, 0x09, 0xd5, 0x19, 0x50, + 0x60, 0x18, 0x23, 0x06, 0xcd, 0x1a, 0x84, 0x20, 0x18, 0x70, 0x20, 0xf1, 0x28, 0xc9, 0x61, 0x10, + 0x43, 0x60, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, + 0x0c, 0x1b, 0x10, 0x1a, 0x51, 0x00, 0x3e, 0x9e, 0xa0, 0xb9, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, + 0xe0, 0xe3, 0x09, 0x9b, 0x1b, 0x0c, 0x1b, 0x10, 0x01, 0x41, 0x00, 0x3e, 0x9e, 0xc0, 0xb1, 0xc1, + 0xb0, 0x01, 0x11, 0x10, 0x03, 0xb0, 0x01, 0x31, 0x10, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, + 0x85, 0x2d, 0x03, 0x11, 0xb4, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, 0xa0, 0x04, 0xb0, 0xb0, + 0x65, 0x60, 0x82, 0x58, 0xd8, 0x32, 0x34, 0x01, 0x2c, 0x6c, 0x19, 0x9e, 0x20, 0x16, 0xb6, 0x0c, + 0x50, 0x00, 0x0b, 0x5b, 0x06, 0x29, 0x88, 0x85, 0x2d, 0x03, 0x16, 0xdc, 0xc1, 0x96, 0x41, 0x0b, + 0xee, 0x60, 0xcb, 0xc0, 0x05, 0x77, 0xb0, 0x65, 0xf0, 0x82, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0x01, 0x05, + 0x21, 0xf0, 0xf1, 0x84, 0x60, 0xa2, 0x00, 0x40, 0x7c, 0x3c, 0x61, 0xb8, 0x28, 0x18, 0x90, 0x0c, + 0x12, 0x70, 0x41, 0xa2, 0xc4, 0x18, 0x8a, 0x8f, 0x27, 0x34, 0x1d, 0x05, 0x86, 0xe1, 0xe3, 0x09, + 0x8f, 0x47, 0x81, 0x81, 0x8c, 0x18, 0x24, 0x69, 0x10, 0x82, 0x60, 0x80, 0xd9, 0x83, 0x62, 0x14, + 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, + 0x6c, 0x40, 0x54, 0x44, 0x01, 0xf8, 0x78, 0x42, 0x65, 0x06, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0x80, + 0x8f, 0x27, 0x58, 0x66, 0x30, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x78, 0xc2, 0x45, 0x06, 0xc3, + 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x06, 0xc4, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, + 0x85, 0x2d, 0x03, 0x11, 0xc8, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, 0x90, 0x04, 0x79, 0xb0, + 0x65, 0x58, 0x02, 0x3d, 0xd8, 0x32, 0x34, 0xc1, 0x1e, 0x6c, 0x19, 0xa6, 0xe0, 0x0e, 0xb6, 0x0c, + 0x55, 0x70, 0x07, 0x5b, 0x86, 0x2b, 0xb8, 0x83, 0x2d, 0x43, 0x16, 0xdc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x64, 0x00, 0x4a, 0x1a, + 0x83, 0xf0, 0x01, 0x05, 0x21, 0xf0, 0xf1, 0x84, 0x80, 0xa2, 0x00, 0x40, 0x7c, 0x3c, 0x61, 0xc0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xd4, 0x18, 0x8a, 0x8f, 0x27, 0x38, 0x1e, 0x05, + 0x86, 0xe1, 0xe3, 0x09, 0xd0, 0x47, 0x81, 0x81, 0x8c, 0x18, 0x28, 0x6c, 0x10, 0x82, 0x60, 0xd0, + 0xd5, 0x83, 0x62, 0x14, 0x43, 0x10, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, + 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x15, 0x51, 0x00, 0x3e, 0x9e, 0x50, 0x9d, 0xc1, 0xb0, + 0x01, 0x11, 0x10, 0x03, 0xe0, 0xe3, 0x09, 0xd6, 0x19, 0x0c, 0x1b, 0x10, 0x01, 0x41, 0x00, 0x3e, + 0x9e, 0x70, 0x95, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xb0, 0x01, 0x31, 0x0d, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0x03, 0x11, 0xc8, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, + 0x90, 0x04, 0x79, 0xb0, 0x65, 0x58, 0x02, 0x3d, 0xd8, 0x32, 0x34, 0xc1, 0x1e, 0x6c, 0x19, 0xa6, + 0xe0, 0x0e, 0xb6, 0x0c, 0x55, 0x70, 0x07, 0x5b, 0x86, 0x2b, 0xb8, 0x83, 0x2d, 0x43, 0x16, 0xdc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0x01, 0x05, 0x21, 0xf0, 0xf1, 0x84, 0xa0, 0xa2, 0x00, 0x40, + 0x7c, 0x3c, 0x61, 0xc8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xe4, 0x18, 0x8a, 0x8f, + 0x27, 0x3c, 0x1f, 0x05, 0x86, 0xe1, 0xe3, 0x09, 0x11, 0x18, 0x50, 0x60, 0x20, 0x24, 0x19, 0x8a, + 0x8f, 0x27, 0x4c, 0x64, 0x40, 0x81, 0x61, 0xf8, 0x78, 0x42, 0x55, 0x06, 0x14, 0x18, 0x08, 0x59, + 0x86, 0xe2, 0xe3, 0x09, 0x57, 0x1a, 0x50, 0x60, 0x18, 0x3e, 0x9e, 0x90, 0xa9, 0x01, 0x05, 0x06, + 0x32, 0x62, 0xf0, 0xb4, 0x41, 0x08, 0x82, 0x81, 0xe7, 0x0f, 0x14, 0xf4, 0x34, 0x8b, 0x82, 0x18, + 0xc5, 0x10, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, + 0x0c, 0x1b, 0x10, 0x1f, 0x51, 0x00, 0x3e, 0x9e, 0xf0, 0xc9, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x03, + 0xe0, 0xe3, 0x09, 0x60, 0x20, 0x07, 0xc3, 0x06, 0x44, 0x40, 0x10, 0x80, 0x8f, 0x27, 0x84, 0x01, + 0x1c, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0x03, 0x11, 0xc8, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, + 0x90, 0x04, 0x79, 0xb0, 0x65, 0x58, 0x02, 0x3d, 0xd8, 0x32, 0x34, 0xc1, 0x1e, 0x6c, 0x19, 0x9c, + 0x20, 0x0f, 0xb6, 0x0c, 0x50, 0xa0, 0x07, 0x5b, 0x06, 0x29, 0xd8, 0x83, 0x2d, 0xc3, 0x14, 0xe4, + 0xc1, 0x96, 0xa1, 0x0a, 0xf4, 0x60, 0xcb, 0x70, 0x05, 0x7b, 0xb0, 0x65, 0xe8, 0x82, 0x3b, 0xd8, + 0x32, 0x7c, 0xc1, 0x1d, 0x6c, 0x19, 0xc2, 0x20, 0xb8, 0x83, 0x2d, 0xc3, 0x18, 0x04, 0x77, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, + 0x83, 0xf0, 0x01, 0x05, 0x21, 0xf0, 0xf1, 0x84, 0xc0, 0xa2, 0x00, 0x40, 0x7c, 0x3c, 0x61, 0xd0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xf4, 0x18, 0x8a, 0x8f, 0x27, 0x40, 0x60, 0x40, + 0x81, 0x61, 0xf8, 0x78, 0x82, 0x14, 0x06, 0x14, 0x18, 0x08, 0x4d, 0x86, 0xe2, 0xe3, 0x09, 0x54, + 0x19, 0x50, 0x60, 0x18, 0x3e, 0x9e, 0x60, 0x99, 0x01, 0x05, 0x06, 0x42, 0x97, 0xa1, 0xf8, 0x78, + 0x02, 0xa6, 0x06, 0x14, 0x18, 0x86, 0x8f, 0x27, 0x68, 0x6b, 0x40, 0x81, 0x81, 0x8c, 0x18, 0x40, + 0x6e, 0x10, 0x82, 0x60, 0xf0, 0xf5, 0x03, 0x05, 0x3d, 0xcd, 0xa2, 0x20, 0x46, 0x31, 0x04, 0xdb, + 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0xb0, 0x01, + 0xf1, 0x11, 0x05, 0xe0, 0xe3, 0x09, 0xdf, 0x1c, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x3e, 0x9e, + 0x00, 0x06, 0x73, 0x30, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x78, 0x42, 0x18, 0xc4, 0xc1, 0xb0, + 0x01, 0x11, 0x10, 0x03, 0xb0, 0x01, 0x31, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, + 0x85, 0x2d, 0x03, 0x11, 0xc8, 0xc2, 0x96, 0xc1, 0x08, 0x5c, 0x61, 0xcb, 0x90, 0x04, 0x79, 0xb0, + 0x65, 0x58, 0x02, 0x3d, 0xd8, 0x32, 0x34, 0xc1, 0x1e, 0x6c, 0x19, 0x9c, 0x20, 0x0f, 0xb6, 0x0c, + 0x50, 0xa0, 0x07, 0x5b, 0x06, 0x29, 0xd8, 0x83, 0x2d, 0xc3, 0x14, 0xe4, 0xc1, 0x96, 0xa1, 0x0a, + 0xf4, 0x60, 0xcb, 0x70, 0x05, 0x7b, 0xb0, 0x65, 0xe8, 0x82, 0x3b, 0xd8, 0x32, 0x7c, 0xc1, 0x1d, + 0x6c, 0x19, 0xc2, 0x20, 0xb8, 0x83, 0x2d, 0xc3, 0x18, 0x04, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x11, 0x80, 0x92, 0xc4, 0x20, + 0x7c, 0xc0, 0x41, 0x08, 0x2e, 0x0a, 0x00, 0x85, 0x8c, 0x04, 0xf1, 0xf1, 0x84, 0xe3, 0xa2, 0x20, + 0x31, 0x46, 0x0c, 0x8e, 0x37, 0x08, 0x41, 0x30, 0x00, 0x03, 0x73, 0x20, 0x86, 0x60, 0x34, 0x21, + 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, 0x61, 0x10, 0x46, 0x13, 0x88, 0x61, 0xd8, 0x80, 0x68, 0x88, + 0x02, 0xf0, 0xf1, 0x84, 0xc6, 0x1b, 0x36, 0x20, 0x02, 0x62, 0x00, 0x7c, 0x3c, 0xc1, 0xf1, 0x86, + 0x0d, 0x88, 0x80, 0x20, 0x00, 0x1f, 0x4f, 0x78, 0xb8, 0x61, 0x03, 0x22, 0x20, 0x06, 0x60, 0x03, + 0x62, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, + 0xb4, 0xc2, 0x96, 0x81, 0x08, 0x46, 0x61, 0xcb, 0x60, 0x04, 0xa4, 0xb0, 0x65, 0x60, 0x82, 0x3b, + 0xd8, 0x32, 0x38, 0xc1, 0x1d, 0x6c, 0x19, 0xa0, 0xe0, 0x0e, 0xb6, 0x0c, 0x52, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x00, 0x54, 0x00, 0x4a, 0x16, + 0x83, 0xf0, 0x01, 0x07, 0x21, 0x18, 0x28, 0x00, 0x10, 0x3a, 0x12, 0xc5, 0xc7, 0x13, 0x10, 0x8c, + 0x82, 0xc4, 0xf0, 0xf1, 0x04, 0x25, 0xa3, 0x20, 0x41, 0x46, 0x0c, 0x10, 0x32, 0x08, 0x41, 0x30, + 0x08, 0x83, 0x73, 0x30, 0x8a, 0x21, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, + 0x84, 0xd1, 0x04, 0x62, 0x18, 0x36, 0x20, 0x20, 0xa2, 0x00, 0x7c, 0x3c, 0x01, 0x0a, 0x83, 0x61, + 0x03, 0x22, 0x20, 0x06, 0xc0, 0xc7, 0x13, 0xa2, 0x30, 0x18, 0x36, 0x20, 0x02, 0x82, 0x00, 0x7c, + 0x3c, 0x41, 0xfa, 0x86, 0x0d, 0x88, 0x80, 0x18, 0x80, 0x0d, 0x88, 0x01, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, 0xc8, 0xc2, 0x96, 0x81, 0x08, 0x4c, 0x61, 0xcb, + 0x60, 0x04, 0xa7, 0xb0, 0x65, 0x40, 0x02, 0x54, 0xd8, 0x32, 0x38, 0xc1, 0x1d, 0x6c, 0x19, 0xa0, + 0xe0, 0x0e, 0xb6, 0x0c, 0x52, 0x70, 0x07, 0x5b, 0x06, 0x2a, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x15, + 0x80, 0x92, 0xc5, 0x20, 0x7c, 0xc0, 0x41, 0x08, 0x30, 0x0a, 0x00, 0x85, 0x8e, 0x04, 0xf1, 0xf1, + 0x04, 0x04, 0xa3, 0x20, 0x31, 0x46, 0x0c, 0x10, 0x32, 0x08, 0x41, 0x30, 0x08, 0x83, 0x71, 0x20, + 0x86, 0x20, 0x19, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0xd1, 0x04, 0x62, + 0x18, 0x36, 0x20, 0x1a, 0xa2, 0x00, 0x7c, 0x3c, 0xa1, 0xf9, 0x86, 0x0d, 0x88, 0x80, 0x18, 0x00, + 0x1f, 0x4f, 0x70, 0xbe, 0x61, 0x03, 0x22, 0x20, 0x08, 0xc0, 0xc7, 0x13, 0x9e, 0x6e, 0xd8, 0x80, + 0x08, 0x88, 0x01, 0xd8, 0x80, 0x18, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, + 0x85, 0x2d, 0xc3, 0x10, 0xb4, 0xc2, 0x96, 0x81, 0x08, 0x46, 0x61, 0xcb, 0x60, 0x04, 0xa4, 0xb0, + 0x65, 0x60, 0x82, 0x3b, 0xd8, 0x32, 0x38, 0xc1, 0x1d, 0x6c, 0x19, 0xa0, 0xe0, 0x0e, 0xb6, 0x0c, + 0x52, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x00, + 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0x01, 0x07, 0x21, 0x18, 0x28, 0x00, 0x10, 0x42, 0x12, 0xc5, + 0xc7, 0x13, 0x92, 0x8c, 0x82, 0xc4, 0xf0, 0xf1, 0x84, 0x45, 0xa3, 0x20, 0x41, 0x46, 0x0c, 0x12, + 0x33, 0x08, 0x41, 0x30, 0x18, 0x03, 0x72, 0x30, 0x8a, 0x21, 0x60, 0x46, 0x13, 0x02, 0x60, 0x34, + 0x41, 0x08, 0x46, 0x13, 0x06, 0x61, 0x34, 0x81, 0x18, 0x86, 0x0d, 0x08, 0x88, 0x28, 0x00, 0x1f, + 0x4f, 0x80, 0xc4, 0x60, 0xd8, 0x80, 0x08, 0x88, 0x01, 0xf0, 0xf1, 0x84, 0x48, 0x0c, 0x86, 0x0d, + 0x88, 0x80, 0x20, 0x00, 0x1f, 0x4f, 0x90, 0xc0, 0x60, 0xd8, 0x80, 0x08, 0x88, 0x01, 0xd8, 0x80, + 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, + 0xc8, 0xc2, 0x96, 0x81, 0x08, 0x4c, 0x61, 0xcb, 0x60, 0x04, 0xa7, 0xb0, 0x65, 0x40, 0x02, 0x54, + 0xd8, 0x32, 0x38, 0xc1, 0x1d, 0x6c, 0x19, 0xa0, 0xe0, 0x0e, 0xb6, 0x0c, 0x52, 0x70, 0x07, 0x5b, + 0x06, 0x2a, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x64, 0x1b, 0x0d, 0x18, 0x01, 0x18, 0x4b, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x00, 0x4a, 0x1e, + 0x83, 0xf0, 0x01, 0x07, 0x21, 0xd0, 0x28, 0x00, 0x14, 0x1f, 0x4f, 0x08, 0x30, 0x0a, 0x70, 0x24, + 0x03, 0x5b, 0xcc, 0x31, 0x28, 0x4c, 0x37, 0xc8, 0x10, 0x2c, 0xca, 0x0d, 0x01, 0x8e, 0x18, 0x18, + 0x40, 0x08, 0x82, 0xc1, 0x1d, 0x9c, 0x41, 0xb0, 0x0c, 0x1b, 0x10, 0x4f, 0x40, 0x00, 0x1b, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, + 0xb4, 0xc2, 0x96, 0xa1, 0x08, 0x68, 0x61, 0xcb, 0xb0, 0x04, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0xb2, 0x8d, 0x06, 0x8c, 0x00, 0x8c, 0x25, 0x04, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0x01, 0x07, 0x21, 0x30, 0x28, 0x00, + 0x10, 0x1f, 0x4f, 0x08, 0x32, 0x1f, 0x4f, 0x10, 0x2e, 0x0a, 0x64, 0x23, 0x83, 0x44, 0x5c, 0xe0, + 0xe0, 0x88, 0x81, 0x01, 0x84, 0x20, 0x18, 0xc4, 0x81, 0x1a, 0x04, 0x65, 0x40, 0x06, 0x8e, 0x64, + 0x60, 0x8b, 0x39, 0x86, 0x47, 0x1a, 0x83, 0x41, 0x86, 0x00, 0x7a, 0x6e, 0x08, 0x70, 0xc4, 0xc0, + 0x00, 0x42, 0x10, 0x0c, 0xee, 0xa0, 0x0d, 0x02, 0x68, 0xd8, 0x80, 0xa8, 0x82, 0x02, 0xf0, 0xf1, + 0x84, 0xaa, 0x0c, 0x86, 0x0d, 0x88, 0x00, 0x21, 0x80, 0x0d, 0x88, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, 0xc8, 0xc2, 0x96, 0xc1, 0x08, 0x68, 0x61, 0xcb, + 0xa0, 0x04, 0xb4, 0xb0, 0x65, 0x80, 0x82, 0x54, 0xd8, 0x32, 0x48, 0x41, 0x2a, 0x00, 0x00, 0x00, + 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x84, 0x1b, 0x4b, 0x08, 0x02, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x4a, 0x12, 0x83, 0xf0, 0x01, 0x07, 0x21, 0xb8, 0x28, 0x00, 0x14, 0x1f, 0x4f, 0x08, + 0x2a, 0x0a, 0x70, 0x64, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xf2, 0xe0, 0x0b, 0x8e, 0x0c, 0x6c, + 0x31, 0x6c, 0x40, 0x28, 0x01, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, 0xb4, 0xc2, 0x96, 0xa1, 0x08, 0x68, 0x61, 0xcb, + 0x80, 0x04, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x92, + 0x95, 0x00, 0xe1, 0xc6, 0x12, 0x82, 0x00, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0x01, 0x07, + 0x21, 0x28, 0x28, 0x00, 0x10, 0x1f, 0x4f, 0x08, 0x2e, 0x1f, 0x4f, 0x10, 0x2a, 0x0a, 0x64, 0x63, + 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe6, 0xa0, 0x0c, 0x82, 0x24, 0x83, 0x44, 0x50, 0x81, 0x23, + 0x23, 0x06, 0x06, 0x10, 0x82, 0x60, 0x90, 0x07, 0x65, 0x10, 0x2c, 0x19, 0xd8, 0x62, 0xd8, 0x80, + 0x80, 0x82, 0x02, 0xf0, 0xf1, 0x04, 0xe8, 0x1b, 0x36, 0x20, 0x82, 0x82, 0x00, 0x36, 0x20, 0x06, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x58, 0x85, 0x2d, 0xc3, 0x10, 0xc8, 0xc2, 0x96, 0xc1, + 0x08, 0x68, 0x61, 0xcb, 0x90, 0x04, 0xb4, 0xb0, 0x65, 0x60, 0x82, 0x54, 0xd8, 0x32, 0x38, 0x41, + 0x2a, 0x00, 0x00, 0x00, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x40, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x80, + 0x32, 0x28, 0xa4, 0x82, 0x22, 0xdb, 0x08, 0xc0, 0x58, 0xc2, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, + 0xff, 0xff, 0xff, 0x3f, 0xd0, 0xa0, 0x30, 0x03, 0x28, 0x51, 0x03, 0x34, 0x28, 0x3c, 0x00, 0x00, + 0x33, 0x11, 0xa5, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x70, 0x00, 0x82, 0x60, 0x40, 0xac, + 0x85, 0x12, 0xf8, 0x78, 0x82, 0xb3, 0xd1, 0x43, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb4, 0x32, 0xc7, 0x10, 0x40, 0x8c, 0x8f, 0x27, 0x14, 0xdf, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x38, 0x3e, 0x9e, 0x70, 0x78, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x8f, 0x27, 0x20, + 0xcf, 0xb0, 0x01, 0x11, 0x50, 0x03, 0xe0, 0xe3, 0x09, 0xc9, 0x33, 0x6c, 0x40, 0x04, 0x0f, 0x01, + 0xf8, 0x78, 0x82, 0xd2, 0x0d, 0x1b, 0x10, 0xc1, 0x33, 0x00, 0x3e, 0x9e, 0xb0, 0x38, 0xc3, 0x06, + 0x44, 0xe0, 0x0c, 0x00, 0x69, 0x80, 0x32, 0x62, 0x60, 0xc4, 0x01, 0x08, 0x82, 0x41, 0xa1, 0x0e, + 0x41, 0x43, 0x42, 0x62, 0x10, 0x91, 0x18, 0x3e, 0x9e, 0xf0, 0x40, 0x94, 0x18, 0xca, 0xb0, 0x01, + 0xb1, 0x11, 0x04, 0xe0, 0xe3, 0x09, 0x5b, 0x1b, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x3e, 0x9e, + 0xc0, 0xb5, 0x01, 0x11, 0xbb, 0x31, 0x6c, 0x40, 0x08, 0x01, 0x01, 0xf8, 0x78, 0x82, 0xe7, 0x06, + 0xc3, 0x06, 0x44, 0x50, 0x10, 0xc0, 0x88, 0x81, 0x01, 0x07, 0x20, 0x08, 0x06, 0x84, 0x5f, 0x78, + 0xd5, 0x06, 0xc4, 0x00, 0x15, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xa8, 0x83, 0x2d, 0x03, 0x11, + 0xd4, 0xc1, 0x96, 0x01, 0x09, 0xea, 0x60, 0xcb, 0xb0, 0x04, 0x77, 0xb0, 0x65, 0x68, 0x82, 0x54, + 0xd8, 0x32, 0x3c, 0x41, 0x2a, 0x6c, 0x19, 0xa2, 0x20, 0x15, 0xb6, 0x0c, 0x53, 0x90, 0x0a, 0x5b, + 0x06, 0x2a, 0xb0, 0x85, 0x2d, 0x83, 0x15, 0xa4, 0xc2, 0x96, 0xe1, 0x0a, 0x76, 0x61, 0xcb, 0x90, + 0x05, 0xbc, 0xb0, 0x65, 0xd0, 0x82, 0x54, 0xd8, 0x32, 0x70, 0x41, 0x2a, 0x6c, 0x19, 0xbc, 0xe0, + 0x0e, 0xb6, 0x0c, 0x5f, 0x70, 0x07, 0x5b, 0x86, 0x30, 0x08, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x83, 0x42, 0x2a, 0x28, 0xb2, 0x8d, 0x00, 0x90, 0x61, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa2, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x70, 0x00, + 0x82, 0x60, 0x40, 0x9c, 0x45, 0x14, 0xf8, 0x78, 0x82, 0x72, 0xd1, 0x42, 0x2b, 0xc3, 0x06, 0xc4, + 0x10, 0x14, 0x00, 0x09, 0xb4, 0x32, 0xc7, 0x10, 0x30, 0x89, 0x8f, 0x27, 0x14, 0xdb, 0xb0, 0x01, + 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x2c, 0x3e, 0x9e, 0x70, 0x68, 0xc3, 0x06, 0x44, 0x20, 0x14, + 0x80, 0x8f, 0x27, 0x20, 0xcc, 0xb0, 0x01, 0x11, 0x40, 0x03, 0xe0, 0xe3, 0x09, 0x09, 0x33, 0x6c, + 0x40, 0x04, 0x0c, 0x01, 0x10, 0x05, 0x28, 0x23, 0x06, 0x46, 0x1c, 0x80, 0x20, 0x18, 0x14, 0xe2, + 0x10, 0x2c, 0x44, 0x18, 0xca, 0x70, 0x44, 0xd0, 0x10, 0xfe, 0x91, 0x01, 0x2f, 0x86, 0x0d, 0x08, + 0x2a, 0x08, 0x80, 0x11, 0x03, 0x03, 0x0e, 0x40, 0x10, 0x0c, 0x88, 0xb9, 0xf0, 0x9c, 0x0d, 0x88, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xa8, 0x83, 0x2d, 0x03, 0x11, + 0xd4, 0xc1, 0x96, 0x01, 0x09, 0xea, 0x60, 0xcb, 0xb0, 0x04, 0x77, 0xb0, 0x65, 0x68, 0x82, 0x54, + 0xd8, 0x32, 0x3c, 0x41, 0x2a, 0x6c, 0x19, 0xa0, 0xc0, 0x16, 0xb6, 0x0c, 0x52, 0xd0, 0x0b, 0x5b, + 0x86, 0x2a, 0xf8, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xd0, 0x00, 0x32, 0x8c, 0x00, 0xd0, 0xa0, 0x0c, 0x0a, 0xa9, 0xa0, 0xc8, 0x36, 0x02, + 0x30, 0x96, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x34, 0x28, 0xcc, + 0x00, 0x4a, 0xd4, 0x00, 0x0d, 0x0a, 0x0f, 0x00, 0x33, 0x11, 0xa5, 0x90, 0xa4, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x70, 0x00, 0x82, 0x60, 0x40, 0xac, 0xc5, 0x12, 0xf8, 0x78, 0x82, 0xb3, 0xd1, 0x43, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb4, 0x32, 0xc7, 0x10, 0x34, 0x8c, 0x8f, 0x27, + 0x14, 0xdf, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x38, 0x3e, 0x9e, 0x70, 0x78, 0xc3, + 0x06, 0x44, 0x20, 0x14, 0x80, 0x8f, 0x27, 0x20, 0xcf, 0xb0, 0x01, 0x11, 0x54, 0x03, 0xe0, 0xe3, + 0x09, 0xc9, 0x33, 0x6c, 0x40, 0x04, 0x0f, 0x01, 0xf8, 0x78, 0x82, 0xd2, 0x0d, 0x1b, 0x10, 0xc1, + 0x33, 0x00, 0x3e, 0x9e, 0xb0, 0x38, 0xc3, 0x06, 0x44, 0xe0, 0x0c, 0x00, 0x69, 0x80, 0x32, 0x62, + 0x60, 0xc4, 0x01, 0x08, 0x82, 0x41, 0xa1, 0x0e, 0x41, 0x43, 0x42, 0x62, 0x10, 0x91, 0x18, 0x3e, + 0x9e, 0xf0, 0x40, 0x94, 0x18, 0xca, 0xb0, 0x01, 0xc1, 0x11, 0x04, 0xe0, 0xe3, 0x09, 0x5c, 0x1b, + 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x3e, 0x9e, 0xd0, 0xb5, 0x01, 0x11, 0xbb, 0x31, 0x6c, 0x40, + 0x08, 0x01, 0x01, 0xf8, 0x78, 0xc2, 0xe7, 0x06, 0xc3, 0x06, 0x44, 0x50, 0x10, 0xc0, 0x88, 0x81, + 0x01, 0x07, 0x20, 0x08, 0x06, 0x84, 0x5f, 0x7c, 0xd5, 0x06, 0xc4, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x21, 0xa8, 0x83, 0x2d, 0x03, 0x11, 0xd4, 0xc1, 0x96, 0x01, 0x09, 0xea, 0x60, 0xcb, + 0xb0, 0x04, 0x77, 0xb0, 0x65, 0x68, 0x82, 0x54, 0xd8, 0x32, 0x3c, 0x41, 0x2a, 0x6c, 0x19, 0xa2, + 0x20, 0x15, 0xb6, 0x0c, 0x53, 0x90, 0x0a, 0x5b, 0x06, 0x2a, 0xb0, 0x85, 0x2d, 0x83, 0x15, 0xa4, + 0xc2, 0x96, 0xe1, 0x0a, 0x76, 0x61, 0xcb, 0x90, 0x05, 0xbc, 0xb0, 0x65, 0xd0, 0x82, 0x54, 0xd8, + 0x32, 0x70, 0x41, 0x2a, 0x6c, 0x19, 0xbc, 0xe0, 0x0e, 0xb6, 0x0c, 0x5f, 0x70, 0x07, 0x5b, 0x86, + 0x30, 0x08, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, 0x18, 0x01, 0xa0, + 0x41, 0x19, 0x14, 0x52, 0x41, 0x91, 0x6d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa2, 0x90, + 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x70, 0x00, 0x82, 0x60, 0x40, 0x98, 0x05, 0x14, 0xf8, 0x78, + 0x42, 0x62, 0x91, 0x42, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb4, 0x32, 0xc7, 0x10, + 0x24, 0x88, 0x8f, 0x27, 0x14, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x28, 0x3e, + 0x9e, 0x70, 0x64, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x8f, 0x27, 0x20, 0xcb, 0xb0, 0x01, 0x11, + 0x40, 0x03, 0xe0, 0xe3, 0x09, 0xc9, 0x32, 0x6c, 0x40, 0x04, 0x0b, 0x01, 0xd0, 0x04, 0x28, 0x23, + 0x06, 0x46, 0x1c, 0x80, 0x20, 0x18, 0x14, 0xe1, 0x10, 0x2c, 0x44, 0x18, 0xca, 0x70, 0x44, 0x10, + 0x11, 0xfe, 0x91, 0x01, 0x2f, 0x86, 0x0d, 0x08, 0x2a, 0x08, 0x80, 0x11, 0x03, 0x03, 0x0e, 0x40, + 0x10, 0x0c, 0x08, 0xb9, 0xe8, 0x9c, 0x0d, 0x88, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x21, 0xa8, 0x83, 0x2d, 0x03, 0x11, 0xd4, 0xc1, 0x96, 0x01, 0x09, 0xea, 0x60, 0xcb, + 0xb0, 0x04, 0x77, 0xb0, 0x65, 0x68, 0x82, 0x54, 0xd8, 0x32, 0x3c, 0x41, 0x2a, 0x6c, 0x19, 0xa0, + 0xc0, 0x16, 0xb6, 0x0c, 0x52, 0xd0, 0x0b, 0x5b, 0x86, 0x2a, 0xf8, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x50, 0x62, + 0x04, 0x60, 0x34, 0xa0, 0x0c, 0xa8, 0x37, 0x07, 0x21, 0x16, 0x2a, 0x31, 0x16, 0x64, 0x31, 0x16, + 0x01, 0x04, 0xc4, 0x40, 0x86, 0xd1, 0x00, 0xa2, 0xcd, 0x41, 0x9c, 0xc5, 0x59, 0x9c, 0x05, 0x58, + 0x50, 0xa2, 0x14, 0xa8, 0x37, 0x07, 0x91, 0x16, 0x63, 0x31, 0x16, 0x64, 0x31, 0x07, 0x21, 0x16, + 0x69, 0x31, 0x16, 0x64, 0x31, 0x16, 0x01, 0x04, 0xc5, 0x40, 0x89, 0x62, 0xa0, 0xde, 0x1c, 0x44, + 0x5b, 0x8c, 0xc5, 0x58, 0x90, 0xc5, 0x1c, 0x84, 0x58, 0xb4, 0xc5, 0x58, 0x90, 0xc5, 0x58, 0x04, + 0x10, 0x18, 0x03, 0x19, 0xc6, 0x08, 0x40, 0x10, 0x04, 0xf1, 0x8f, 0x68, 0x73, 0x10, 0x67, 0x71, + 0x16, 0x67, 0x11, 0x17, 0xd4, 0x9b, 0x83, 0x68, 0x89, 0xb1, 0x18, 0x0b, 0xb2, 0x98, 0x83, 0x10, + 0x8b, 0x96, 0x18, 0x0b, 0xb2, 0x18, 0x8b, 0x00, 0x82, 0x63, 0x00, 0x00, 0x3e, 0x9e, 0x90, 0x99, + 0x01, 0x05, 0x00, 0x92, 0xda, 0x20, 0x7c, 0x47, 0x41, 0x08, 0x28, 0xa0, 0x15, 0x1f, 0x4f, 0x10, + 0xd4, 0x80, 0x02, 0x5a, 0xf1, 0xf1, 0x04, 0x22, 0x0d, 0x28, 0xa0, 0x95, 0x39, 0x86, 0xe2, 0xf3, + 0x06, 0x19, 0x02, 0x62, 0x1b, 0x64, 0x08, 0x86, 0x6d, 0xd8, 0x80, 0x18, 0x83, 0xa0, 0x00, 0x06, + 0x19, 0x34, 0x04, 0x1b, 0x64, 0x08, 0x0e, 0x6c, 0x90, 0x21, 0x30, 0x30, 0x1f, 0x4f, 0x30, 0x03, + 0x3a, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x3c, 0x06, 0x1b, 0x64, 0x08, 0x16, 0x6c, + 0x90, 0x21, 0x50, 0x30, 0x1f, 0x4f, 0x50, 0x83, 0x3a, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, + 0x19, 0x30, 0xe8, 0x1a, 0x64, 0x08, 0x9e, 0x6b, 0x90, 0x21, 0x70, 0x2e, 0x1f, 0x4f, 0x70, 0x03, + 0x3b, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x36, 0x20, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x03, 0x11, 0xd4, 0xc1, 0x96, 0xc1, 0x08, 0xea, 0x60, 0xcb, + 0x80, 0x04, 0x75, 0xb0, 0x65, 0x60, 0x82, 0x3a, 0xd8, 0x32, 0x44, 0x41, 0x1d, 0x6c, 0x19, 0xac, + 0xa0, 0x0e, 0xb6, 0x0c, 0x5b, 0x50, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x81, 0x8f, 0x27, 0x0c, 0x10, 0x05, 0x00, 0x92, 0xc4, 0x20, + 0x7c, 0xc7, 0x41, 0x08, 0x32, 0x0a, 0x12, 0x63, 0xd8, 0x80, 0x30, 0x82, 0x01, 0xd8, 0x80, 0x18, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x03, 0x11, 0x88, 0xc3, 0x96, 0xa1, + 0x08, 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x81, 0x8f, 0x27, 0x0c, 0x10, 0x05, 0x00, 0x92, 0xc4, 0x20, 0x7c, 0xc7, 0x41, 0x08, + 0x34, 0x0a, 0x78, 0x25, 0x83, 0x44, 0x0c, 0x1b, 0x10, 0x47, 0x30, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x03, 0x11, 0x8c, 0xc3, 0x96, 0xc1, + 0x08, 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, + 0x0d, 0xa0, 0xde, 0x1c, 0x04, 0x58, 0xa8, 0x44, 0x58, 0x84, 0xc5, 0x1c, 0x04, 0x58, 0xa4, 0x84, + 0x4a, 0x84, 0xc5, 0x58, 0x04, 0x10, 0x08, 0x04, 0x25, 0x4a, 0x81, 0x7a, 0x73, 0x10, 0x29, 0x51, + 0x16, 0x61, 0x11, 0x16, 0x73, 0x10, 0x60, 0x91, 0x12, 0x65, 0x11, 0x16, 0x63, 0x11, 0x40, 0x20, + 0x14, 0x94, 0x28, 0x06, 0xea, 0xcd, 0x41, 0xb0, 0x44, 0x5a, 0x84, 0x45, 0x58, 0xcc, 0x41, 0x80, + 0x45, 0x4a, 0xa4, 0x45, 0x58, 0x8c, 0x45, 0x00, 0x81, 0x60, 0x10, 0xaf, 0x04, 0x00, 0x00, 0x00, + 0x3e, 0x9e, 0x10, 0x79, 0x14, 0x00, 0x48, 0x4a, 0x83, 0xf0, 0x1d, 0x05, 0x21, 0xa0, 0x89, 0x56, + 0x7c, 0x3c, 0x81, 0x12, 0x03, 0x0a, 0x68, 0xc5, 0xc7, 0x13, 0xac, 0x30, 0xa0, 0x80, 0x56, 0x7c, + 0x3c, 0x01, 0x03, 0x03, 0x0a, 0x68, 0x65, 0x90, 0xe1, 0x28, 0xae, 0x41, 0x86, 0x80, 0xb8, 0x06, + 0x19, 0x82, 0xe1, 0x1a, 0x36, 0x20, 0x96, 0xa0, 0x00, 0x06, 0x19, 0x14, 0xc4, 0x1a, 0x64, 0x08, + 0x0e, 0x6b, 0x90, 0x21, 0x30, 0x2c, 0x1f, 0x4f, 0x70, 0xdc, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x02, + 0x18, 0x64, 0x70, 0x18, 0x6b, 0x90, 0x21, 0x58, 0xac, 0x41, 0x86, 0x40, 0xb1, 0x7c, 0x3c, 0x41, + 0x7a, 0x83, 0x61, 0x03, 0x22, 0x10, 0x0a, 0xc0, 0xc7, 0x13, 0x26, 0x35, 0x18, 0x36, 0x20, 0x02, + 0x4c, 0x00, 0x36, 0x20, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, + 0x87, 0x2d, 0x83, 0x12, 0xd4, 0xc1, 0x96, 0xc1, 0x09, 0xea, 0x60, 0xcb, 0x30, 0x05, 0x75, 0xb0, + 0x65, 0xc0, 0x82, 0x3a, 0xd8, 0x32, 0x68, 0x01, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xc4, 0x2b, 0x01, 0x00, 0x3e, 0x9e, 0x40, 0x44, 0x14, 0x00, 0x48, 0x16, + 0x83, 0xf0, 0x1d, 0x05, 0x21, 0x48, 0x83, 0x07, 0x3e, 0x9e, 0x20, 0x3c, 0xc3, 0x06, 0x44, 0x20, + 0x14, 0x80, 0x8f, 0x27, 0x0c, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x83, 0x11, 0x8c, 0xc3, 0x96, 0x01, + 0x09, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc4, 0x2b, 0x01, 0x00, + 0x3e, 0x9e, 0x40, 0x44, 0x14, 0x00, 0x48, 0x16, 0x83, 0xf0, 0x1d, 0x05, 0x21, 0xf0, 0xf1, 0x84, + 0x40, 0x19, 0x36, 0x20, 0x82, 0x63, 0x00, 0x7c, 0x3c, 0x41, 0x60, 0x86, 0x0d, 0x88, 0xe0, 0x10, + 0x80, 0x0d, 0x88, 0x01, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x00, 0x87, 0x2d, 0x43, 0x11, + 0x88, 0xc3, 0x96, 0xe1, 0x08, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xc4, 0x2b, 0x01, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1b, 0x06, 0x71, 0xf8, + 0x85, 0x35, 0x00, 0x00, 0x29, 0xf0, 0xc2, 0xc7, 0x13, 0x0a, 0x89, 0x02, 0x00, 0x49, 0x63, 0x10, + 0xbe, 0xa3, 0x20, 0x04, 0x3e, 0x9e, 0x10, 0x34, 0xc3, 0x06, 0x44, 0x60, 0x04, 0x80, 0x8f, 0x27, + 0x08, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0x00, 0x87, 0x2d, 0x83, 0x11, 0x94, 0xc3, 0x96, 0x01, 0x09, 0xc8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, + 0x89, 0x9d, 0x3d, 0x38, 0x86, 0x00, 0x00, 0x84, 0x60, 0xc8, 0xc0, 0xb0, 0x1c, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, + 0x20, 0x04, 0x42, 0x30, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, + 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, + 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0xcd, 0x21, 0xb1, + 0xe3, 0x06, 0x49, 0x11, 0x08, 0x80, 0x10, 0x08, 0xc1, 0x30, 0x9a, 0x10, 0x04, 0xa3, 0x09, 0x02, + 0x90, 0x81, 0x61, 0xa7, 0x23, 0x90, 0x60, 0x40, 0x38, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0b, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0c, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0e, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0d, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xc6, 0x11, 0x38, 0xe0, 0x1d, 0x81, + 0x04, 0x85, 0x12, 0x58, 0x30, 0x2a, 0x81, 0x06, 0xe4, 0x12, 0x78, 0x80, 0x38, 0x81, 0x08, 0xf4, + 0x13, 0x98, 0xb0, 0x48, 0x81, 0x0a, 0xba, 0x14, 0xb8, 0xf0, 0x4f, 0x81, 0x0c, 0x98, 0x15, 0xd8, + 0x70, 0x5b, 0x81, 0x0e, 0xdf, 0x15, 0xf8, 0x50, 0x68, 0x81, 0x10, 0xc6, 0x16, 0x18, 0xf1, 0x7a, + 0x81, 0x12, 0xc5, 0x17, 0x38, 0x51, 0x7e, 0x81, 0x14, 0xca, 0x18, 0x58, 0x31, 0x8f, 0x81, 0x16, + 0xd9, 0x19, 0x78, 0x31, 0xaf, 0x81, 0x19, 0x87, 0x1b, 0xb8, 0xb1, 0xb9, 0x81, 0x1d, 0xbf, 0x1b, + 0xf8, 0x41, 0xbe, 0x81, 0x21, 0xff, 0x1b, 0x38, 0xa2, 0xc9, 0x81, 0x25, 0xb2, 0x1c, 0x78, 0xa2, + 0xcc, 0x81, 0x29, 0xf2, 0x1c, 0xb8, 0xb2, 0xd9, 0x81, 0x2d, 0xba, 0x1d, 0xf8, 0x92, 0xdd, 0x81, + 0x30, 0xee, 0x1d, 0x18, 0x83, 0xe8, 0x81, 0x33, 0xb7, 0x1e, 0x58, 0x63, 0xee, 0x81, 0x37, 0x9f, + 0x1f, 0x98, 0x83, 0xfd, 0x81, 0x3b, 0x89, 0x20, 0xd8, 0xa3, 0x0b, 0x82, 0x3f, 0xfd, 0x20, 0x18, + 0x04, 0x1c, 0x82, 0x43, 0xe5, 0x21, 0x58, 0x14, 0x29, 0x82, 0x47, 0xb6, 0x22, 0x98, 0x34, 0x2e, + 0x82, 0x4a, 0x80, 0x23, 0xb8, 0xd4, 0x3a, 0x82, 0x4c, 0xc6, 0x23, 0xd8, 0xe4, 0x3e, 0x82, 0x4f, + 0xc0, 0x24, 0x18, 0x75, 0x4f, 0x82, 0x52, 0xca, 0x25, 0x38, 0x15, 0x68, 0x82, 0x54, 0xd3, 0x26, + 0x58, 0x25, 0x6e, 0x82, 0x56, 0xf2, 0x26, 0x78, 0x45, 0x7b, 0x82, 0x58, 0xca, 0x27, 0x98, 0xf5, + 0x7d, 0x82, 0x5a, 0xf9, 0x27, 0xb8, 0xf5, 0x7f, 0x82, 0x5c, 0x85, 0x28, 0xd8, 0xb5, 0x88, 0x82, + 0x5e, 0x91, 0x28, 0xf8, 0x85, 0x89, 0x82, 0x60, 0x9f, 0x28, 0x18, 0x66, 0x8a, 0x82, 0x62, 0xad, + 0x28, 0x38, 0x46, 0x8b, 0x82, 0x64, 0xbf, 0x28, 0x58, 0x56, 0x8c, 0x82, 0x66, 0xcb, 0x28, 0x78, + 0x16, 0x8d, 0x82, 0x68, 0xd7, 0x28, 0x98, 0xd6, 0x8d, 0x82, 0x6a, 0xe3, 0x28, 0xb8, 0x96, 0x8e, + 0x82, 0x6c, 0xef, 0x28, 0xd8, 0x56, 0x8f, 0x82, 0x6e, 0xfb, 0x28, 0xf8, 0x16, 0x98, 0x82, 0x70, + 0x87, 0x29, 0x18, 0xd7, 0x98, 0x82, 0x72, 0x93, 0x29, 0x38, 0x97, 0x99, 0x82, 0x74, 0x9f, 0x29, + 0x58, 0x57, 0x9a, 0x82, 0x76, 0xab, 0x29, 0x78, 0x17, 0x9b, 0x82, 0x78, 0xb7, 0x29, 0x98, 0xd7, + 0x9b, 0x82, 0x7a, 0xc3, 0x29, 0xb8, 0x97, 0x9c, 0x82, 0x7c, 0xcf, 0x29, 0xd8, 0x57, 0x9d, 0x82, + 0x7e, 0xdb, 0x29, 0xf8, 0x17, 0x9e, 0x82, 0x80, 0x01, 0xe7, 0x29, 0x18, 0x18, 0xd0, 0x9e, 0x82, + 0x82, 0x01, 0xf3, 0x29, 0x38, 0x18, 0x90, 0x9f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x0c, 0x00, 0x00, 0x4f, 0x03, 0x00, 0x00, 0x12, 0x03, 0x94, 0x70, 0x3a, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x79, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x0f, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x92, 0x0f, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x26, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x41, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x5c, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x77, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x8e, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x92, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xad, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc7, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe1, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xfb, 0x10, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x19, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x37, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x55, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x5c, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x73, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x91, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x94, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xaf, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xcb, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xca, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xe7, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x03, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xfe, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x1b, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x33, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x2a, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x4b, 0x12, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x58, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x65, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x8e, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x80, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc6, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xc6, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x9c, 0x12, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xb9, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x3a, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x3a, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xd5, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x72, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x72, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xf0, 0x12, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xa8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x0a, 0x13, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xde, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x25, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x16, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x41, 0x13, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x50, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x5e, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8a, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x8a, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x7a, 0x13, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa9, 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc2, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xc2, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x95, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xab, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xf4, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc1, 0x13, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x27, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x27, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xe2, 0x13, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x70, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x09, 0x14, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x9a, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xbe, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xbe, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x2f, 0x14, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xe7, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x11, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x11, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x5b, 0x14, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5f, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x5f, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x7c, 0x14, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xa8, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xa3, 0x14, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xd2, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf6, 0x06, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xf6, 0x06, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xc9, 0x14, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x49, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xf5, 0x14, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x95, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x95, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x14, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd4, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xd4, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x33, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf6, 0x07, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x19, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x19, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x58, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x64, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x64, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x7d, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8c, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa2, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xaf, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc7, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xd2, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe6, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xef, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x05, 0x16, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x2c, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x27, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4a, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x66, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x45, 0x16, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x60, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x99, 0x09, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x77, 0x16, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xae, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x97, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb5, 0x16, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xe8, 0x09, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdb, 0x16, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x0c, 0x0a, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xff, 0x16, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2e, 0x0a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x29, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x56, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x4b, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6d, 0x17, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x96, 0x0a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x88, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa4, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc9, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc0, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe3, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdd, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xfe, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xfa, 0x17, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x19, 0x0b, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1d, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3a, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x41, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x65, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x7e, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x8a, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xaf, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc4, 0x0b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xcb, 0x18, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xde, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe8, 0x18, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xf9, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x05, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x14, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x23, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x30, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x41, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5d, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x66, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7a, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x81, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x97, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x9c, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb5, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd3, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xd4, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xef, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0c, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x09, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x29, 0x1a, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x47, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x40, 0x0d, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x62, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x59, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x7e, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x73, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x9a, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xb7, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xa8, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xd3, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf0, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xdd, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x0d, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x14, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x47, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x64, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x49, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x81, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x64, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9f, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x80, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xbd, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x9c, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd9, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xb6, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf6, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x13, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xec, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x31, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x24, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x24, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x3e, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x3e, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x6a, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x17, 0x07, 0x00, 0x00, 0x12, 0x03, 0x94, 0xaf, + 0x78, 0x00, 0x00, 0x00, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6c, 0x76, + 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x2e, 0x70, 0x30, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x30, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, + 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, + 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, + 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, + 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, + 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, + 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, + 0x6e, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, + 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, + 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, + 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, + 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, + 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, + 0x78, 0x2e, 0x69, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, + 0x31, 0x36, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, + 0x64, 0x75, 0x63, 0x65, 0x2e, 0x66, 0x61, 0x64, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x6c, + 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x33, 0x32, 0x6c, 0x6c, + 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x31, 0x39, 0x2e, + 0x31, 0x2e, 0x33, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x2d, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x6d, 0x69, 0x6b, + 0x65, 0x2f, 0x43, 0x6c, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x4c, 0x75, 0x69, 0x73, 0x61, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x2f, 0x73, 0x72, 0x63, + 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, + 0x63, 0x6b, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x62, 0x75, 0x69, 0x6c, + 0x74, 0x69, 0x6e, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, + 0x2e, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2e, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x2e, 0x6c, 0x6c, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, + 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, + 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, + 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, + 0x72, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, + 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, + 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, + 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, + 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x78, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, + 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, + 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.linux.x86_64.inl b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.linux.x86_64.inl new file mode 100644 index 000000000..61bc47178 --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.linux.x86_64.inl @@ -0,0 +1,2064 @@ + +static const unsigned char luisa_fallback_backend_device_builtin_module[32964] = { + 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, + 0x4a, 0x59, 0xbe, 0x66, 0xdd, 0xfb, 0xb5, 0x7f, 0x0b, 0x51, 0x80, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x21, 0x0c, 0x00, 0x00, 0xc6, 0x15, 0x00, 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x1c, 0x45, 0x02, + 0x42, 0x92, 0x0b, 0x42, 0xe4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x72, 0x88, + 0x48, 0x70, 0xc4, 0x21, 0x23, 0x44, 0x12, 0x87, 0x8c, 0x10, 0x41, 0x92, 0x02, 0x64, 0xc8, 0x08, + 0xb1, 0x14, 0x20, 0x43, 0x46, 0x88, 0x20, 0xc9, 0x01, 0x32, 0x72, 0x84, 0x58, 0x0e, 0x90, 0x91, + 0x23, 0x44, 0x90, 0xa1, 0x82, 0xa2, 0x02, 0x19, 0xc3, 0x07, 0xcb, 0x15, 0x19, 0x72, 0x8c, 0x8c, + 0x25, 0x10, 0x1d, 0x3a, 0x74, 0xc8, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, + 0x22, 0x66, 0x04, 0x10, 0xb2, 0x42, 0x82, 0xc9, 0x11, 0x52, 0x42, 0x82, 0xc9, 0x91, 0x71, 0xc2, + 0x50, 0x48, 0x0a, 0x09, 0x26, 0x47, 0xc6, 0x05, 0x42, 0x72, 0x26, 0x08, 0x52, 0x81, 0x46, 0x00, + 0x0a, 0x11, 0x00, 0x00, 0x00, 0x73, 0x04, 0xa0, 0x50, 0x86, 0xc0, 0x00, 0x50, 0x86, 0x00, 0x00, + 0x30, 0x03, 0x50, 0x04, 0x03, 0xc0, 0x08, 0x83, 0xc1, 0x1c, 0x01, 0x18, 0x94, 0x02, 0x01, 0x18, + 0x24, 0x12, 0xc3, 0x08, 0x82, 0x61, 0x84, 0xc5, 0xa2, 0x14, 0x0c, 0xc0, 0x20, 0x91, 0x28, 0x47, + 0x00, 0x30, 0x48, 0x24, 0x16, 0x8b, 0x72, 0x04, 0x00, 0x83, 0x44, 0x62, 0x30, 0x28, 0x06, 0x02, + 0x30, 0x48, 0x24, 0x12, 0xc5, 0x60, 0x00, 0x06, 0x89, 0x44, 0xa2, 0x20, 0x01, 0xc0, 0x20, 0x91, + 0x48, 0x2c, 0x16, 0xe5, 0x08, 0x00, 0x06, 0x89, 0x44, 0x02, 0x70, 0x8c, 0x34, 0x45, 0x94, 0x30, + 0xf9, 0x14, 0xd2, 0x4c, 0x38, 0x22, 0x12, 0x89, 0x44, 0xe2, 0x16, 0x69, 0x8a, 0x28, 0x61, 0xf2, + 0x91, 0x66, 0xc2, 0x11, 0x91, 0x48, 0x24, 0x12, 0xa5, 0x08, 0x00, 0x12, 0x00, 0x40, 0x29, 0x18, + 0x80, 0x84, 0xc1, 0x50, 0x8c, 0x00, 0x20, 0x01, 0x30, 0x00, 0x8a, 0xc1, 0x00, 0x24, 0x0c, 0x06, + 0x43, 0x39, 0x02, 0x80, 0x04, 0x00, 0x00, 0x00, 0x94, 0x84, 0x01, 0x48, 0x18, 0x0c, 0x06, 0x83, + 0xc1, 0x50, 0x90, 0x00, 0x20, 0x01, 0x00, 0x00, 0x0c, 0x80, 0xa2, 0x30, 0x00, 0x09, 0x83, 0xc1, + 0x60, 0x30, 0x18, 0x0c, 0xe5, 0x60, 0x00, 0x12, 0x06, 0x83, 0xc1, 0x50, 0x18, 0x06, 0x20, 0x61, + 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x28, 0x0d, 0x03, 0x90, 0x30, 0x18, 0x0c, 0x06, 0x83, + 0xc1, 0x60, 0x30, 0x18, 0x0a, 0xc1, 0x00, 0x24, 0x12, 0xa5, 0x60, 0x00, 0x12, 0x89, 0x44, 0x31, + 0x02, 0x80, 0x04, 0x20, 0x01, 0x28, 0x06, 0x03, 0x90, 0x48, 0x24, 0x12, 0xa5, 0x08, 0x00, 0x12, + 0x09, 0x40, 0x21, 0x02, 0x80, 0x04, 0xa0, 0x18, 0x01, 0x00, 0xc0, 0x90, 0x00, 0x94, 0x22, 0x00, + 0x00, 0x24, 0x00, 0x85, 0x08, 0x00, 0x12, 0x89, 0x39, 0x82, 0xa0, 0x10, 0x01, 0x40, 0x42, 0x55, + 0x86, 0x04, 0x20, 0x51, 0x86, 0x01, 0x60, 0x50, 0x06, 0x03, 0xc0, 0x50, 0x88, 0x04, 0x20, 0x91, + 0x28, 0xc4, 0x00, 0x30, 0x18, 0x14, 0xc2, 0x00, 0x30, 0x18, 0xca, 0x90, 0x48, 0x24, 0xe6, 0x08, + 0xa0, 0x32, 0xcc, 0x66, 0xb3, 0x61, 0x04, 0xc2, 0x28, 0x83, 0xc1, 0x50, 0x1b, 0x46, 0x10, 0xe6, + 0xa0, 0x0c, 0xb7, 0xdb, 0x6d, 0x20, 0x60, 0x8e, 0x00, 0x19, 0x46, 0x10, 0x92, 0x61, 0x04, 0x22, + 0x19, 0x46, 0x18, 0x8c, 0x61, 0x84, 0x21, 0xb9, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x0d, 0x69, + 0x86, 0x85, 0x90, 0x24, 0x76, 0x71, 0x26, 0x44, 0x00, 0x06, 0x00, 0xc0, 0x2d, 0xd2, 0x14, 0x51, + 0xc2, 0xe4, 0x03, 0x8d, 0xd3, 0x20, 0xc2, 0x90, 0x48, 0x24, 0x0e, 0x92, 0xa6, 0x88, 0x12, 0x26, + 0xdf, 0x63, 0x82, 0x88, 0x20, 0x56, 0x00, 0x43, 0x43, 0xad, 0x06, 0xcc, 0x80, 0xc4, 0x41, 0xd2, + 0x14, 0x51, 0xc2, 0xe4, 0x7b, 0x4c, 0x10, 0x11, 0x44, 0x88, 0x4c, 0x08, 0x31, 0x18, 0x0c, 0x06, + 0x43, 0x22, 0x21, 0xbc, 0x49, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x8f, 0x09, 0x22, 0x82, 0x58, 0x01, + 0x2c, 0x44, 0x26, 0x24, 0x04, 0x87, 0xc9, 0x60, 0x38, 0x4a, 0x9a, 0x22, 0x4a, 0x98, 0x7c, 0x4d, + 0x10, 0x88, 0x45, 0x6c, 0xa4, 0x09, 0x68, 0x04, 0x02, 0x19, 0x45, 0x9d, 0x4e, 0x97, 0x00, 0x18, + 0x21, 0xa1, 0x32, 0xc2, 0x40, 0x05, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, + 0x1b, 0xf6, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, 0x00, 0xfc, 0x00, 0x80, + 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x86, 0x20, 0x0c, 0x04, 0x22, 0x1c, 0xe0, + 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, + 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, + 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, + 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, + 0xa0, 0x07, 0x74, 0x00, 0xe0, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, + 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, + 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, + 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, + 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, + 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, + 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, + 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, + 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, + 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, + 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, + 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, + 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0x00, 0x1f, 0xf0, 0xc0, 0x0e, + 0xda, 0xc0, 0x0e, 0xe8, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, + 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x83, 0x71, + 0x68, 0x87, 0x77, 0xb0, 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, + 0x07, 0x7c, 0x98, 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, 0xc0, 0x07, 0x36, 0x58, 0x83, + 0x79, 0x98, 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, + 0xc0, 0x07, 0x3c, 0xb8, 0x03, 0x80, 0xa0, 0x87, 0x7a, 0x70, 0x87, 0x72, 0x68, 0x83, 0x71, 0x80, + 0x87, 0x7a, 0x00, 0xce, 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, 0xe4, 0x21, 0x1d, 0xc6, 0x01, 0x20, 0xea, + 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, + 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x03, 0x22, 0x04, 0xc0, + 0x02, 0x90, 0x02, 0x50, 0x6d, 0x40, 0x06, 0x01, 0x58, 0x00, 0x52, 0x00, 0xaa, 0x0d, 0x08, 0x31, + 0x00, 0x0b, 0x40, 0x0a, 0x00, 0x1d, 0x6c, 0x78, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x53, + 0x00, 0xfc, 0x00, 0xf8, 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, 0x85, 0x61, 0x03, 0x61, 0x04, 0x00, + 0x1f, 0x6c, 0x20, 0x0e, 0x01, 0x58, 0x36, 0x20, 0x88, 0x00, 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, + 0x61, 0x4f, 0x92, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x01, 0x30, 0x05, 0xc0, 0x0f, 0x00, 0x38, + 0x00, 0xfe, 0x00, 0x90, 0x80, 0x3e, 0x08, 0x6c, 0x21, 0x08, 0xc2, 0x40, 0x20, 0xc2, 0x01, 0x1e, + 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x88, 0x76, 0x48, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x73, 0x08, 0x07, 0x76, 0x68, + 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, 0x07, + 0x7a, 0x40, 0x07, 0x00, 0x0e, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, + 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, + 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, + 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, + 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, + 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, + 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, + 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, + 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, + 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, + 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, + 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, + 0x73, 0x28, 0x07, 0x7a, 0x68, 0x83, 0x71, 0x80, 0x87, 0x7a, 0x00, 0xf0, 0x01, 0x0f, 0xec, 0xa0, + 0x0d, 0xec, 0x80, 0x0e, 0x00, 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, + 0xcc, 0xa1, 0x1c, 0xc2, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0x80, 0x35, 0x18, 0x87, + 0x76, 0x78, 0x07, 0x7b, 0x60, 0x83, 0x35, 0x18, 0x07, 0x7c, 0xc0, 0x03, 0x36, 0x58, 0x03, 0x73, + 0xc0, 0x87, 0x79, 0x90, 0x07, 0x36, 0x58, 0x83, 0x76, 0x68, 0x07, 0x7c, 0x60, 0x83, 0x35, 0x98, + 0x87, 0x79, 0x28, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x90, 0x03, 0x36, 0x58, 0x03, + 0x7c, 0xc0, 0x83, 0x3b, 0x00, 0x08, 0x7a, 0xa8, 0x07, 0x77, 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, + 0xa8, 0x07, 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, + 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, + 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x14, 0x0a, 0x10, 0xdc, + 0xc2, 0x09, 0x6d, 0x80, 0x93, 0xe5, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, 0x90, + 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, + 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, + 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, + 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, + 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x80, 0x03, 0x80, 0x70, 0x87, 0x77, + 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, + 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, + 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, + 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, + 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, + 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, + 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, + 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, + 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, + 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, + 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, + 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, + 0x1e, 0x00, 0x7c, 0xc0, 0x03, 0x3b, 0x68, 0x03, 0x3b, 0xa0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, + 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, + 0x72, 0x98, 0x07, 0x60, 0x0d, 0xc6, 0xa1, 0x1d, 0xde, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xc6, 0x01, + 0x1f, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1c, 0xf0, 0x61, 0x1e, 0xe4, 0x81, 0x0d, 0xd6, 0xa0, 0x1d, + 0xda, 0x01, 0x1f, 0xd8, 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xca, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, + 0xa1, 0x1c, 0xe4, 0x80, 0x0d, 0xd6, 0x00, 0x1f, 0xf0, 0xe0, 0x0e, 0x00, 0x82, 0x1e, 0xea, 0xc1, + 0x1d, 0xca, 0xa1, 0x0d, 0xc6, 0x01, 0x1e, 0xea, 0x01, 0x38, 0x87, 0x72, 0x70, 0x87, 0x72, 0x90, + 0x87, 0x74, 0x18, 0x07, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, + 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, + 0x1c, 0x80, 0x0d, 0x2f, 0xc2, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x48, 0x44, 0x38, 0xc0, 0x03, + 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, 0x43, 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, 0x39, + 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, + 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, + 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, + 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, + 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, + 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, + 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, + 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xd0, 0x83, + 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, + 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, + 0xeb, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, 0xf2, + 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, + 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, 0xb4, + 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, 0xf8, 0x80, 0x07, 0x76, 0xd0, 0x06, 0x76, 0x40, 0x07, 0x00, + 0x41, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xd0, 0x06, 0xe6, 0x50, 0x0e, 0xe1, 0x40, + 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xc0, 0x1a, 0x8c, 0x43, 0x3b, 0xbc, 0x83, 0x3d, 0xb0, + 0xc1, 0x1a, 0x8c, 0x03, 0x3e, 0xe0, 0x01, 0x1b, 0xac, 0x81, 0x39, 0xe0, 0xc3, 0x3c, 0xc8, 0x03, + 0x1b, 0xac, 0x41, 0x3b, 0xb4, 0x03, 0x3e, 0xb0, 0xc1, 0x1a, 0xcc, 0xc3, 0x3c, 0x94, 0x03, 0x1b, + 0xac, 0xc1, 0x3c, 0xcc, 0x43, 0x39, 0xc8, 0x01, 0x1b, 0xac, 0x01, 0x3e, 0xe0, 0xc1, 0x1d, 0x00, + 0x04, 0x3d, 0xd4, 0x83, 0x3b, 0x94, 0x43, 0x1b, 0x8c, 0x03, 0x3c, 0xd4, 0x03, 0x70, 0x0e, 0xe5, + 0xe0, 0x0e, 0xe5, 0x20, 0x0f, 0xe9, 0x30, 0x0e, 0x00, 0x51, 0x0f, 0xee, 0x30, 0x0f, 0xe1, 0x60, + 0x0e, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, + 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x1b, 0x88, 0x26, 0x00, 0x48, 0x61, 0x03, 0xe1, 0x08, 0x00, + 0x29, 0x6c, 0x20, 0x9e, 0x01, 0x20, 0x85, 0x0d, 0x04, 0x44, 0x00, 0xa4, 0xb0, 0x21, 0x4e, 0xa2, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x01, 0x30, 0x05, 0x40, 0x0a, 0xc2, 0x40, 0x20, 0xc2, 0x01, + 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, + 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, + 0x72, 0x00, 0x88, 0x76, 0x48, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x73, 0x08, 0x07, 0x76, + 0x68, 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, + 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x0e, 0xe8, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, + 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, + 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, + 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, + 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, + 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, + 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, + 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, + 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, + 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, + 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, + 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, + 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0x00, 0x1f, 0xf0, + 0xc0, 0x0e, 0xda, 0xc0, 0x0e, 0xe8, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, + 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, + 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, 0x3c, 0x60, 0x83, + 0x35, 0x30, 0x07, 0x7c, 0x98, 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, 0xc0, 0x07, 0x36, + 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x07, 0x39, 0x60, + 0x83, 0x35, 0xc0, 0x07, 0x3c, 0xb8, 0x03, 0x80, 0xa0, 0x87, 0x7a, 0x70, 0x87, 0x72, 0x68, 0x83, + 0x71, 0x80, 0x87, 0x7a, 0x00, 0xce, 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, 0xe4, 0x21, 0x1d, 0xc6, 0x01, + 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, + 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x03, 0x22, + 0x0d, 0xc0, 0x02, 0x90, 0x02, 0x50, 0x6d, 0x20, 0xa6, 0x02, 0x20, 0x85, 0x0d, 0x0a, 0x65, 0x00, + 0xa4, 0x60, 0x0c, 0x54, 0x10, 0x40, 0x1b, 0x94, 0xca, 0x00, 0x48, 0xc1, 0x18, 0xaa, 0x20, 0x80, + 0x36, 0x20, 0x16, 0x01, 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0xe1, 0xb8, 0x06, 0x80, 0x14, 0x82, + 0x5b, 0x38, 0xa1, 0x0d, 0x07, 0x46, 0x00, 0xa4, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0x40, 0xb2, 0x02, + 0x58, 0x00, 0x52, 0x00, 0xe8, 0x60, 0xc3, 0xa1, 0x15, 0x00, 0x29, 0x04, 0xb7, 0x70, 0x42, 0x1b, + 0x90, 0x8d, 0x00, 0x16, 0x80, 0x14, 0x80, 0x6a, 0x03, 0xc2, 0x15, 0xc0, 0x02, 0x90, 0x02, 0x50, + 0x6d, 0x40, 0x3a, 0x03, 0x58, 0x00, 0x52, 0x00, 0xe8, 0x60, 0xc3, 0xe1, 0x19, 0x00, 0x29, 0x04, + 0xb7, 0x70, 0x42, 0x1b, 0x8e, 0xef, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x70, 0x80, 0x01, + 0x02, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0x01, 0x09, 0x83, 0x03, 0x58, 0x00, 0x52, 0x00, 0xe8, + 0x60, 0xc3, 0x21, 0x06, 0x09, 0x40, 0x0a, 0xc1, 0x2d, 0x9c, 0xd0, 0x86, 0x63, 0x0c, 0x14, 0x80, + 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x07, 0x19, 0x2c, 0x00, 0x29, 0x04, 0xb7, 0x70, 0x42, 0x1b, + 0x8e, 0x32, 0x60, 0x00, 0x52, 0x08, 0x6e, 0xe1, 0x84, 0x36, 0xec, 0x89, 0x19, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x08, 0x80, 0x29, 0x00, 0x7e, 0x00, 0xc0, 0x01, 0xf0, 0x07, 0x80, 0x04, 0xf4, + 0x41, 0x60, 0x0b, 0x53, 0x10, 0x06, 0x02, 0x11, 0x0e, 0xf0, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf8, + 0xd0, 0x06, 0xe6, 0x50, 0x0f, 0xee, 0x30, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb4, 0x43, 0x3a, 0xb8, + 0x43, 0x1b, 0xb0, 0x43, 0x39, 0x9c, 0x43, 0x38, 0xb0, 0x43, 0x1b, 0xd8, 0x43, 0x39, 0x8c, 0x03, + 0x3d, 0xbc, 0x83, 0x3c, 0xb4, 0xc1, 0x3d, 0xa4, 0x03, 0x39, 0xd0, 0x03, 0x3a, 0x00, 0x70, 0x00, + 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, + 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, + 0x3b, 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, + 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, + 0xef, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, + 0x20, 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, + 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x01, 0x3d, 0xc8, + 0x43, 0x38, 0xc0, 0x03, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, + 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, + 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, + 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, + 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04, 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, + 0x8c, 0x03, 0x3c, 0xd4, 0x03, 0x80, 0x0f, 0x78, 0x60, 0x07, 0x6d, 0x60, 0x07, 0x74, 0x00, 0x10, + 0xf4, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xe5, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xe5, 0x10, 0x0e, 0xf4, + 0x50, 0x0f, 0xf2, 0x50, 0x0e, 0xf3, 0x00, 0xac, 0xc1, 0x38, 0xb4, 0xc3, 0x3b, 0xd8, 0x03, 0x1b, + 0xac, 0xc1, 0x38, 0xe0, 0x03, 0x1e, 0xb0, 0xc1, 0x1a, 0x98, 0x03, 0x3e, 0xcc, 0x83, 0x3c, 0xb0, + 0xc1, 0x1a, 0xb4, 0x43, 0x3b, 0xe0, 0x03, 0x1b, 0xac, 0xc1, 0x3c, 0xcc, 0x43, 0x39, 0xb0, 0xc1, + 0x1a, 0xcc, 0xc3, 0x3c, 0x94, 0x83, 0x1c, 0xb0, 0xc1, 0x1a, 0xe0, 0x03, 0x1e, 0xdc, 0x01, 0x40, + 0xd0, 0x43, 0x3d, 0xb8, 0x43, 0x39, 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, 0xe7, 0x50, 0x0e, + 0xee, 0x50, 0x0e, 0xf2, 0x90, 0x0e, 0xe3, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, + 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, + 0xc8, 0x43, 0x3d, 0x94, 0x03, 0xb0, 0x61, 0x4f, 0xce, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, + 0x00, 0x4c, 0x01, 0xf0, 0x03, 0x00, 0x0e, 0x80, 0x3f, 0x00, 0x24, 0xa0, 0x0f, 0x02, 0x5b, 0x18, + 0x83, 0x20, 0x0c, 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, + 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, + 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, 0x74, 0x70, 0x87, 0x36, 0x60, + 0x87, 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, + 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, 0xe0, 0x00, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, + 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, + 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, + 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, + 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, + 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, + 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, + 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, + 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, + 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, + 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, + 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x18, 0x07, 0x78, + 0xa8, 0x07, 0x00, 0x1f, 0xf0, 0xc0, 0x0e, 0xda, 0xc0, 0x0e, 0xe8, 0x00, 0x20, 0xe8, 0x21, 0x1c, + 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, + 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, 0x07, 0x36, 0x58, 0x83, 0x71, + 0xc0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x7c, 0x98, 0x07, 0x79, 0x60, 0x83, 0x35, 0x68, + 0x87, 0x76, 0xc0, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x60, 0x83, 0x35, 0x98, 0x87, + 0x79, 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, 0xc0, 0x07, 0x3c, 0xb8, 0x03, 0x80, 0xa0, 0x87, 0x7a, + 0x70, 0x87, 0x72, 0x68, 0x83, 0x71, 0x80, 0x87, 0x7a, 0x00, 0xce, 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, + 0xe4, 0x21, 0x1d, 0xc6, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, + 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, + 0x28, 0x07, 0x60, 0x83, 0x81, 0x06, 0x03, 0x40, 0x0a, 0x80, 0x18, 0x6c, 0xc8, 0x93, 0x34, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, 0x00, 0xfc, 0x00, 0x80, 0x03, 0x40, 0x02, 0xfa, + 0x20, 0xb0, 0x85, 0x21, 0x08, 0x03, 0x81, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, + 0x68, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, + 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, + 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, + 0x1e, 0xde, 0x41, 0x1e, 0xda, 0xe0, 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x38, 0x00, + 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, + 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, + 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, + 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, + 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, + 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, + 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, + 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, + 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, + 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, + 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, + 0x28, 0x07, 0x00, 0x0f, 0x00, 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, + 0xc6, 0x01, 0x1e, 0xea, 0x01, 0xc0, 0x07, 0x3c, 0xb0, 0x83, 0x36, 0xb0, 0x03, 0x3a, 0x00, 0x08, + 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, + 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00, 0xd6, 0x60, 0x1c, 0xda, 0xe1, 0x1d, 0xec, 0x81, 0x0d, + 0xd6, 0x60, 0x1c, 0xf0, 0x01, 0x0f, 0xd8, 0x60, 0x0d, 0xcc, 0x01, 0x1f, 0xe6, 0x41, 0x1e, 0xd8, + 0x60, 0x0d, 0xda, 0xa1, 0x1d, 0xf0, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xd8, 0x60, + 0x0d, 0xe6, 0x61, 0x1e, 0xca, 0x41, 0x0e, 0xd8, 0x60, 0x0d, 0xf0, 0x01, 0x0f, 0xee, 0x00, 0x20, + 0xe8, 0xa1, 0x1e, 0xdc, 0xa1, 0x1c, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x73, 0x28, 0x07, + 0x77, 0x28, 0x07, 0x79, 0x48, 0x87, 0x71, 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, + 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, + 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0xd8, 0x60, 0xa8, 0x41, 0x00, 0x2c, 0x00, 0x29, 0x6c, 0x38, 0xd6, + 0x40, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x10, 0xb1, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xc0, 0x29, 0x00, 0x7e, 0x00, 0xfc, 0x01, 0x20, 0x01, 0x75, 0x00, 0xf4, 0x41, 0x60, 0x0b, 0xc0, + 0x06, 0xa2, 0x0d, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xa4, 0x0d, 0x8c, 0x1b, 0x18, 0x00, 0x29, + 0x00, 0x67, 0x60, 0x0c, 0x54, 0x10, 0x40, 0x1b, 0x98, 0x37, 0x30, 0x00, 0x52, 0x00, 0xce, 0xc0, + 0x18, 0xaa, 0x20, 0x80, 0x36, 0x10, 0x70, 0x20, 0x00, 0x67, 0xb0, 0xc1, 0x88, 0x03, 0x01, 0x20, + 0x05, 0xe0, 0x0c, 0x00, 0x49, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, + 0x88, 0x09, 0x43, 0x61, 0x1c, 0x13, 0x86, 0x40, 0x40, 0x26, 0x0c, 0x89, 0x22, 0x4c, 0x20, 0x16, + 0x61, 0x20, 0x26, 0x14, 0x4c, 0xe3, 0x3c, 0xd0, 0x04, 0x22, 0x12, 0x06, 0x62, 0x02, 0x11, 0x09, + 0x83, 0x34, 0x81, 0x58, 0x84, 0x41, 0x9a, 0x60, 0x30, 0x8d, 0xf3, 0x40, 0xd3, 0x84, 0x83, 0x69, + 0x9c, 0x07, 0x9a, 0xa8, 0x09, 0x07, 0xd3, 0x38, 0x0f, 0x34, 0x55, 0x13, 0x8a, 0x48, 0x70, 0x24, + 0x6b, 0x42, 0xc1, 0x34, 0xce, 0x85, 0x4d, 0x30, 0x22, 0xc1, 0x91, 0xb0, 0x6c, 0x82, 0xc1, 0x34, + 0xce, 0x85, 0x69, 0x13, 0x8e, 0x48, 0x70, 0xa4, 0x8d, 0xeb, 0x26, 0x24, 0x4c, 0xe3, 0x5c, 0x98, + 0xe6, 0x7d, 0x60, 0x30, 0x01, 0x89, 0x04, 0x47, 0xda, 0x38, 0x2f, 0x0c, 0x26, 0x28, 0x4c, 0xe3, + 0x5c, 0x98, 0xe6, 0x7d, 0x60, 0x20, 0x06, 0x13, 0x0e, 0xa6, 0x71, 0x2e, 0x4c, 0xf3, 0x26, 0x30, + 0x4c, 0xe3, 0x5c, 0x98, 0xe6, 0x7d, 0x60, 0x20, 0x06, 0x63, 0x40, 0x06, 0x13, 0x1a, 0xa6, 0x71, + 0x2e, 0x4c, 0xf3, 0x3e, 0x30, 0x10, 0x83, 0x31, 0x20, 0x83, 0x32, 0x98, 0x40, 0x30, 0x8d, 0xf3, + 0x4c, 0x30, 0x22, 0xc1, 0x91, 0xa0, 0x6c, 0x42, 0x61, 0x06, 0x82, 0xf3, 0x58, 0x13, 0x08, 0x33, + 0x10, 0x1c, 0x62, 0x82, 0xb1, 0x08, 0xc3, 0x05, 0x65, 0x13, 0x06, 0xa6, 0x71, 0x26, 0x14, 0x8b, + 0x30, 0x3c, 0xd6, 0x04, 0xe2, 0x0c, 0x04, 0x47, 0x9a, 0x40, 0x9c, 0x81, 0xe0, 0x3c, 0x13, 0x88, + 0x33, 0x10, 0x1c, 0x34, 0x98, 0x30, 0xa4, 0x81, 0x1a, 0x38, 0x13, 0x88, 0x34, 0x50, 0xd4, 0x60, + 0x0d, 0x26, 0x10, 0x69, 0xa0, 0x06, 0xce, 0x33, 0xa1, 0x48, 0x03, 0x45, 0x0d, 0xd6, 0xe0, 0x9a, + 0x10, 0xb0, 0xc1, 0x84, 0xa2, 0x0d, 0x1a, 0xe7, 0x81, 0x26, 0x18, 0x6d, 0xd0, 0x38, 0x0f, 0x34, + 0x4d, 0x38, 0xda, 0xa0, 0x71, 0x1e, 0x68, 0x72, 0x83, 0x09, 0x47, 0x1b, 0x34, 0xce, 0x03, 0x4d, + 0x6f, 0x30, 0xa1, 0x68, 0x83, 0xc6, 0xb9, 0xb0, 0x09, 0x46, 0x1b, 0x34, 0xce, 0x85, 0x69, 0x13, + 0x92, 0x36, 0x68, 0x9c, 0x0b, 0xd3, 0xbc, 0x0f, 0x0c, 0x26, 0x28, 0x6d, 0xd0, 0x38, 0x17, 0xa6, + 0x79, 0x1f, 0x18, 0x88, 0xc1, 0x84, 0xa3, 0x0d, 0x1a, 0xe7, 0xc2, 0x34, 0x6f, 0x02, 0xd3, 0x06, + 0x8d, 0x73, 0x61, 0x9a, 0xf7, 0x81, 0x81, 0x18, 0x8c, 0x01, 0x19, 0x4c, 0x68, 0xda, 0xa0, 0x71, + 0x2e, 0x4c, 0xf3, 0x3e, 0x30, 0x10, 0x83, 0x31, 0x20, 0x83, 0x32, 0x98, 0x40, 0xb4, 0x41, 0xe3, + 0x3c, 0x13, 0x84, 0x36, 0x80, 0x83, 0x09, 0x43, 0x1b, 0x34, 0x71, 0x00, 0x13, 0x28, 0x7c, 0xc0, + 0x03, 0x3b, 0xf8, 0x05, 0x3b, 0xa0, 0x83, 0x36, 0xa8, 0x07, 0x77, 0x58, 0x07, 0x77, 0x78, 0x87, + 0x7b, 0x70, 0x87, 0x36, 0x60, 0x87, 0x74, 0x70, 0x87, 0x7a, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, + 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x72, 0x70, 0x07, 0x70, 0xa0, 0x07, 0x73, + 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf0, 0x20, 0x07, 0x77, 0x10, 0x07, 0x7a, 0x30, + 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x00, 0x0f, 0x72, 0x70, 0x07, 0x72, 0xa0, 0x07, + 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, + 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, + 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07, + 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xb3, + 0x10, 0x07, 0x72, 0x80, 0x07, 0x1a, 0x21, 0x4c, 0x0e, 0xf5, 0xe1, 0x55, 0x9d, 0x97, 0xe5, 0xf3, + 0x57, 0x3b, 0xbd, 0x2e, 0xbf, 0x86, 0xec, 0xf4, 0xdb, 0x0d, 0x95, 0xbf, 0xd5, 0xe5, 0x31, 0x7d, + 0xfe, 0x62, 0xd6, 0xd3, 0xf3, 0xf0, 0xf0, 0xdd, 0x86, 0xd7, 0xe9, 0xe5, 0xd7, 0x5c, 0x3e, 0x7e, + 0x89, 0xc3, 0xe3, 0x75, 0xd9, 0x4d, 0x9e, 0xbf, 0xcc, 0x61, 0x36, 0x5b, 0x1c, 0x1e, 0xaf, 0x5f, + 0xe6, 0x30, 0x9b, 0x2d, 0x0e, 0x8f, 0xd7, 0x5f, 0x71, 0x3d, 0xcd, 0xa6, 0xa7, 0xdd, 0x2f, 0x73, + 0x98, 0xcd, 0x16, 0x87, 0xc7, 0xeb, 0x2f, 0xb9, 0x6c, 0x4f, 0x8f, 0xcb, 0xdf, 0x30, 0x3c, 0xfd, + 0xbd, 0xcb, 0xc3, 0x70, 0x78, 0x59, 0x3e, 0x77, 0xb1, 0xd3, 0xee, 0x3a, 0xde, 0x85, 0xc7, 0xd9, + 0xbe, 0x36, 0x9a, 0x8b, 0xcd, 0x1e, 0x52, 0x01, 0x99, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xcc, 0x22, 0x80, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0xf5, 0x06, 0x14, 0x01, 0x04, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x43, 0xaa, 0x51, 0xc8, 0x04, + 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf1, + 0x42, 0x26, 0x00, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, + 0x90, 0xaa, 0x1e, 0x32, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x20, 0x03, 0x86, 0x54, 0x2e, 0x91, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x3a, 0x8b, 0x4c, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x68, 0x60, 0x05, 0x00, 0x24, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x70, 0x03, 0x2b, 0x00, 0x20, + 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x05, 0x1f, 0x58, + 0x01, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, + 0x14, 0xe1, 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0x91, 0x09, 0x27, 0x00, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x54, 0x38, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xbc, 0xc2, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xc2, 0x17, 0x4e, 0x00, 0x80, 0x24, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xcd, 0x70, 0x02, 0x00, + 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xe0, 0x46, + 0x3b, 0x00, 0x20, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0xa5, 0x3a, 0xda, 0x01, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, + 0x01, 0x43, 0x2a, 0xf2, 0xd1, 0x0e, 0x00, 0x48, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf9, 0x8f, 0x55, 0x00, 0x40, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x86, 0xac, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x6a, 0x64, 0x15, 0x00, 0x90, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x02, 0x25, 0x4c, 0x00, + 0x80, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x2e, + 0x75, 0x0a, 0x10, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, + 0xa9, 0xea, 0x29, 0x13, 0x00, 0x20, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x32, 0x60, 0x48, 0xe5, 0x52, 0x9e, 0x02, 0x04, 0x80, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x90, 0x01, 0x43, 0x2a, 0xb6, 0xd2, 0x04, 0x00, 0x48, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x99, 0xd6, 0xd7, 0x00, 0x01, 0x60, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0xaa, 0xbc, 0x36, 0x01, 0x00, 0x12, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x20, 0x06, 0x06, + 0x0e, 0x10, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, + 0xc0, 0x4c, 0x13, 0x00, 0x20, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, + 0x60, 0x48, 0xa5, 0x67, 0xdf, 0x03, 0x04, 0x80, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x01, 0x43, 0xaa, 0x5c, 0xcb, 0x04, 0x00, 0x48, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc9, 0x9b, 0xf7, 0x00, 0x01, 0x60, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xe6, 0x30, 0x01, 0x00, 0x92, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x68, 0xd7, 0x41, 0x40, + 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x2a, 0xbd, + 0x4c, 0x00, 0x80, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, + 0x95, 0xef, 0x79, 0x10, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x06, 0x0c, 0xa9, 0xf8, 0x4f, 0x13, 0x00, 0x20, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0x65, 0x83, 0xc1, 0x17, 0x01, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0xaa, 0x0e, 0x83, 0x4d, 0x00, 0x80, 0x04, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x2c, 0x06, 0x60, 0x20, + 0x01, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x0a, + 0x1e, 0x03, 0x4d, 0x00, 0x80, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, + 0x80, 0x21, 0x95, 0x4a, 0x06, 0xdf, 0x04, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x90, 0x01, 0x43, 0xaa, 0xb4, 0x0c, 0x32, 0x01, 0x00, 0x92, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xa2, 0x19, 0x78, 0x13, 0x10, 0x00, 0x0c, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0xc0, 0x33, 0xa0, 0x0a, + 0x00, 0x48, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xd1, + 0x67, 0x40, 0x15, 0x00, 0x90, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, + 0x30, 0xa4, 0x42, 0xd1, 0xe0, 0xb3, 0x00, 0x20, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0x75, 0xa6, 0x01, 0x19, 0x5c, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x5a, 0xd5, 0xa0, 0x0c, 0x30, 0x00, 0x48, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xc1, 0x6b, 0xa0, + 0x06, 0x19, 0x10, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, + 0xa9, 0x74, 0x36, 0x20, 0x03, 0x0d, 0x00, 0x92, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x20, 0x03, 0x86, 0x54, 0x7e, 0x1b, 0xa4, 0xc1, 0x06, 0x04, 0x80, 0x04, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x43, 0xaa, 0xf3, 0x0d, 0xd4, 0x80, 0x03, 0x80, 0x64, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x0c, 0x07, 0x6f, + 0xd0, 0x01, 0x01, 0x40, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, + 0x0a, 0x94, 0x83, 0xcf, 0x02, 0x80, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0xd5, 0x2f, 0x07, 0x64, 0x90, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x6a, 0xa4, 0x83, 0x32, 0xc0, 0x00, 0x20, 0x79, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x85, 0xd6, 0x81, 0x1a, 0x78, + 0x40, 0x00, 0x54, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x92, + 0xed, 0x80, 0x0c, 0x34, 0x00, 0x48, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x0c, 0x18, 0x52, 0xd9, 0x77, 0x90, 0x06, 0x1f, 0x10, 0x00, 0x16, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0x7e, 0x3c, 0x50, 0x03, 0x0e, 0x00, 0x92, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xa9, 0x1e, 0xbc, 0x01, 0x18, + 0x00, 0x01, 0x70, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0x0a, + 0xdf, 0x83, 0xce, 0x02, 0x80, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, + 0x80, 0x21, 0x55, 0xcd, 0x07, 0x62, 0x10, 0x06, 0x40, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0xba, 0xfb, 0xa0, 0xb3, 0x00, 0x20, 0x69, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x45, 0xfb, 0x81, 0x18, 0x88, 0x01, + 0x10, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0xec, + 0x3f, 0x18, 0x83, 0x31, 0x00, 0x80, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0x55, 0x0e, 0x0a, 0x68, 0x20, 0x06, 0x40, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x0a, 0x45, 0x61, 0x0c, 0xc6, 0x00, 0x00, 0x92, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xe4, 0x28, 0xa0, + 0x01, 0x19, 0x00, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, + 0x90, 0x8a, 0x25, 0x85, 0x31, 0x28, 0x03, 0x00, 0x48, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xbd, 0xa5, 0x30, 0x06, 0x65, 0x00, 0x00, 0x89, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xd9, 0x14, 0x3a, 0x33, 0x00, + 0x80, 0x64, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0x7b, + 0x0a, 0x9d, 0x19, 0x00, 0x40, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0x8a, 0x45, 0x05, 0x30, 0x38, 0x03, 0x00, 0x48, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xb1, 0xa9, 0xe0, 0x15, 0x40, 0x00, 0x74, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, 0xa4, 0x52, 0x55, 0x81, 0x3b, 0x03, 0x00, + 0x48, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x99, 0xab, + 0xa0, 0x15, 0x40, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x30, + 0xa4, 0x02, 0x59, 0x21, 0x43, 0x03, 0x00, 0x48, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe5, 0xac, 0x50, 0xa1, 0x01, 0x00, 0x24, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xdc, 0x56, 0xf0, 0xcc, 0x00, 0x00, 0x92, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xac, 0x2b, 0x70, + 0x66, 0x00, 0x00, 0xc9, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0x2a, 0xf4, 0x15, 0xc8, 0xc0, 0x0c, 0x00, 0x20, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0xc5, 0xc2, 0x82, 0x18, 0x98, 0x01, 0x00, 0x24, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xdc, 0x58, 0x40, 0x83, 0x34, 0x00, + 0x80, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x65, + 0xcb, 0x02, 0x18, 0xa4, 0x01, 0x00, 0x24, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0x2a, 0x7b, 0x16, 0xc0, 0x60, 0x0d, 0x00, 0x20, 0x09, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xd9, 0xb4, 0x90, 0xb1, 0x01, 0x00, + 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xb7, + 0x16, 0x34, 0x36, 0x00, 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x32, 0x60, 0x48, 0x95, 0xda, 0x82, 0xd6, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xc6, 0x5b, 0xd8, 0xda, 0x00, 0x00, 0x12, 0x31, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x7f, 0x0b, 0x9b, + 0x1b, 0x00, 0x40, 0x32, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, + 0xa4, 0xca, 0x71, 0x21, 0x0c, 0xde, 0x00, 0x00, 0x12, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x9e, 0x0b, 0x62, 0xf0, 0x06, 0x00, 0x90, 0x90, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x78, 0x5d, 0x10, 0x03, + 0x38, 0x00, 0x80, 0x84, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0xe5, 0xef, 0xc2, 0x18, 0xc0, 0x01, 0x00, 0x24, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xb0, 0x17, 0xc6, 0x20, 0x0e, 0x00, 0x20, 0x29, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x91, 0xbe, 0xa0, 0xb1, + 0x01, 0x00, 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0x2a, 0xdf, 0x17, 0x36, 0x36, 0x00, 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0x95, 0xff, 0xc2, 0xd6, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x68, 0x70, 0xe0, 0xda, 0x00, 0x00, + 0x12, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x1c, + 0x0e, 0x9c, 0x1b, 0x00, 0x40, 0x32, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x19, 0x30, 0xa4, 0x62, 0xc5, 0x41, 0x63, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xe6, 0x38, 0x6c, 0x6c, 0x00, 0x00, 0x89, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x2a, 0x24, 0x87, 0xad, + 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, + 0x52, 0xf1, 0xe4, 0xc0, 0xb5, 0x01, 0x00, 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xbc, 0x1c, 0x38, 0x37, 0x00, 0x80, 0x64, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x45, 0x9b, 0x83, 0xc6, 0x06, 0x00, + 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xdc, + 0x73, 0xd8, 0xd8, 0x00, 0x00, 0x12, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0x55, 0x8a, 0x0e, 0x5b, 0x1b, 0x00, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x22, 0xd3, 0x81, 0x6b, 0x03, 0x00, 0x48, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xa0, 0x3a, 0x64, + 0x6c, 0x00, 0x00, 0x89, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, + 0x90, 0x2a, 0x57, 0x07, 0x8d, 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xcd, 0xeb, 0xa0, 0xb5, 0x01, 0x00, 0x24, 0x62, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x96, 0x1d, 0xb6, 0x36, 0x00, + 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x85, + 0xb6, 0x83, 0xc6, 0x06, 0x00, 0x90, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0x44, 0x77, 0xd8, 0xd8, 0x00, 0x00, 0x12, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0xef, 0x0e, 0x5b, 0x1b, 0x00, 0x40, 0x22, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xc2, 0xdf, 0x81, + 0x6b, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0x34, 0x3c, 0x68, 0x6c, 0x00, 0x00, 0x89, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0x8d, 0x87, 0x8d, 0x0d, 0x00, 0x20, 0x11, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xa5, 0xf2, 0xb0, 0xb5, 0x01, + 0x00, 0x24, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, + 0x72, 0x1e, 0xb8, 0x36, 0x00, 0x80, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0x05, 0xd2, 0x03, 0xe7, 0x06, 0x00, 0x90, 0x8c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x78, 0x7a, 0xd0, 0xd8, 0x00, 0x00, 0x12, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x5d, 0x0f, + 0x1b, 0x1b, 0x00, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, + 0x30, 0xa4, 0x8a, 0xed, 0x61, 0x6b, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xec, 0x3d, 0x70, 0x6d, 0x00, 0x00, 0x89, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xc5, 0x07, 0xce, 0x0d, + 0x00, 0x20, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0x91, 0xf9, 0xd0, 0xc8, 0x01, 0x10, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x01, 0x43, 0xaa, 0x38, 0x1f, 0x1a, 0x3a, 0x00, 0x02, 0xc0, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xe7, 0x43, 0x67, 0x07, 0x40, 0x00, + 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0x76, 0x7d, + 0x78, 0xf0, 0x00, 0x08, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, + 0x00, 0x89, 0x0d, 0x02, 0x45, 0xdf, 0x2a, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x20, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x4a, + 0x94, 0x40, 0x21, 0x14, 0x44, 0x11, 0x94, 0x03, 0x0d, 0x46, 0x00, 0x0a, 0xa1, 0x20, 0x0a, 0xa4, + 0x60, 0x0a, 0xa3, 0x80, 0x0a, 0xa5, 0x70, 0x0a, 0xac, 0x10, 0x03, 0x0a, 0x32, 0xa0, 0xc4, 0x8a, + 0xac, 0xd0, 0x0a, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, + 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, + 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, + 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, + 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, + 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, + 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, + 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, + 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, + 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, + 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, + 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, + 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, + 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, + 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, + 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, + 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, + 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, + 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, + 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, + 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, + 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, + 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, + 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, + 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, + 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, + 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, + 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, + 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, + 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, + 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, + 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xcb, 0xe7, 0x0e, 0xef, 0x30, + 0x0f, 0xe1, 0xe0, 0x0e, 0xe9, 0x40, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x30, 0xc3, 0x01, 0x03, 0x73, + 0xa8, 0x07, 0x77, 0x18, 0x87, 0x5f, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, 0xa0, 0x87, 0x74, 0xd0, + 0x87, 0x72, 0x98, 0x81, 0x84, 0x41, 0x39, 0xe0, 0xc3, 0x38, 0xb0, 0x43, 0x3d, 0x90, 0x43, 0x39, + 0xcc, 0x40, 0xc4, 0xa0, 0x1d, 0xca, 0xa1, 0x1d, 0xe0, 0x41, 0x1e, 0xde, 0xc1, 0x1c, 0x66, 0x24, + 0x63, 0x30, 0x0e, 0xe1, 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0xe9, 0x40, 0x0f, 0xe5, 0x30, 0x43, 0x21, + 0x83, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x98, 0xb1, + 0x94, 0x01, 0x3c, 0x8c, 0xc3, 0x3c, 0x94, 0xc3, 0x38, 0xd0, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0xcc, + 0xc3, 0x8c, 0xc5, 0x0c, 0x48, 0x21, 0x15, 0x42, 0x61, 0x1e, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, + 0x52, 0x81, 0x14, 0x66, 0x4c, 0x67, 0x30, 0x0e, 0xef, 0x20, 0x0f, 0xef, 0xe0, 0x06, 0xef, 0x50, + 0x0f, 0xf4, 0x30, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, + 0xe5, 0x30, 0xa3, 0x40, 0x83, 0x76, 0x68, 0x07, 0x79, 0x08, 0x87, 0x19, 0x4e, 0x1a, 0xa0, 0x43, + 0x39, 0x84, 0x03, 0x3c, 0x84, 0x03, 0x3b, 0xb0, 0xc3, 0x3b, 0x8c, 0xc3, 0x3c, 0xa4, 0x03, 0x3d, + 0x94, 0x03, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x72, 0x1e, 0x48, 0x20, + 0x43, 0x88, 0x0c, 0x19, 0x09, 0x72, 0x32, 0x48, 0x20, 0x23, 0x81, 0x8c, 0x91, 0x91, 0xd1, 0x44, + 0xa0, 0x10, 0x28, 0x64, 0x3c, 0x31, 0x32, 0x42, 0x8e, 0x90, 0x21, 0xa3, 0xa8, 0x51, 0xe3, 0x02, + 0x4a, 0x92, 0x1c, 0xdd, 0xf3, 0x14, 0xcb, 0xb5, 0x24, 0xca, 0xa0, 0x5c, 0xd2, 0x52, 0x48, 0xce, + 0xe4, 0x38, 0xc4, 0x04, 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x49, + 0x43, 0x20, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x50, 0x49, 0x45, 0x20, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x75, 0x77, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x62, 0x72, 0x65, 0x77, 0x20, + 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x39, + 0x2e, 0x31, 0x2e, 0x33, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x68, 0x61, 0x72, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x2b, 0x2b, 0x20, 0x54, 0x42, + 0x41, 0x41, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x36, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x33, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x5a, 0x54, + 0x53, 0x35, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x69, 0x6e, 0x74, 0x5f, 0x5a, 0x54, 0x53, 0x35, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x37, 0x42, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x41, 0x72, 0x72, 0x61, 0x79, 0x56, 0x69, 0x65, 0x77, 0x5f, 0x5a, 0x54, 0x53, 0x31, + 0x32, 0x42, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x6f, 0x74, 0x5f, 0x5a, 0x54, + 0x53, 0x36, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x5a, 0x54, + 0x53, 0x31, 0x32, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x48, 0x69, 0x74, 0x5f, + 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x5f, 0x5a, 0x54, + 0x53, 0x4e, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x52, 0x61, 0x79, 0x55, 0x74, 0x5f, 0x45, + 0x5f, 0x5a, 0x54, 0x53, 0x39, 0x45, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x48, 0x69, 0x74, 0x5f, 0x5a, + 0x54, 0x53, 0x39, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x5a, 0x54, 0x53, 0x31, 0x33, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x00, 0xe6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0x90, 0xa0, + 0xc4, 0x08, 0x42, 0x92, 0x12, 0x23, 0x08, 0x89, 0x4a, 0x8c, 0x20, 0x24, 0x2b, 0x31, 0x82, 0x90, + 0xb0, 0xc4, 0x08, 0xc2, 0xd0, 0x12, 0x23, 0x08, 0x83, 0x4b, 0x8c, 0x20, 0x0c, 0x2f, 0x31, 0x82, + 0x30, 0xc0, 0xc4, 0x08, 0xc2, 0x10, 0x13, 0x23, 0x08, 0x83, 0x4c, 0x8c, 0x20, 0x0c, 0x33, 0x31, + 0x82, 0x30, 0xd0, 0xc4, 0x08, 0xc2, 0x50, 0x13, 0x23, 0x08, 0x83, 0x4d, 0x8c, 0x20, 0x0c, 0x37, + 0x31, 0x82, 0x30, 0xe0, 0xc4, 0x08, 0xc2, 0x90, 0x13, 0x23, 0x08, 0x83, 0x4e, 0x8c, 0x20, 0x0c, + 0x3b, 0x31, 0x82, 0x30, 0xf0, 0xc4, 0x0c, 0xc3, 0x16, 0x70, 0x33, 0x0c, 0x9d, 0xe0, 0xcd, 0x30, + 0x7c, 0x83, 0x37, 0xc3, 0xf0, 0x11, 0xde, 0x0c, 0x41, 0x31, 0x43, 0x70, 0xcc, 0x30, 0x18, 0x75, + 0x00, 0x06, 0x33, 0x0c, 0x76, 0x60, 0x07, 0x60, 0x30, 0xc3, 0x80, 0xd8, 0x01, 0x18, 0xcc, 0x30, + 0xe0, 0x01, 0x1e, 0x80, 0xc1, 0x0c, 0x47, 0x82, 0x07, 0x60, 0x80, 0x07, 0x61, 0x80, 0x07, 0x62, + 0x30, 0xc3, 0xa0, 0x07, 0x78, 0x20, 0x06, 0x33, 0x0c, 0x8b, 0x1d, 0x80, 0xc1, 0x0c, 0x03, 0x63, + 0x07, 0x60, 0x30, 0x43, 0xa1, 0xf0, 0x01, 0x18, 0xf4, 0x81, 0x18, 0xcc, 0x30, 0xf8, 0x01, 0x1f, + 0x80, 0xc1, 0x0c, 0x83, 0x1f, 0xf4, 0x81, 0x18, 0xcc, 0x30, 0x38, 0x76, 0x00, 0x06, 0x33, 0x14, + 0x4d, 0x28, 0x80, 0x41, 0x28, 0x84, 0xc1, 0x0c, 0x83, 0x28, 0x84, 0x02, 0x18, 0xcc, 0x30, 0x88, + 0x42, 0x28, 0x84, 0xc1, 0x0c, 0xc7, 0x13, 0x0a, 0x60, 0x10, 0x0a, 0x61, 0x10, 0x0a, 0x62, 0x30, + 0xc3, 0x50, 0x0a, 0xa1, 0x00, 0x06, 0x33, 0x0c, 0xa5, 0x10, 0x0a, 0x61, 0x30, 0xc3, 0x50, 0x0a, + 0xa1, 0x20, 0x06, 0x33, 0x0c, 0xa1, 0x10, 0x0a, 0x60, 0x30, 0x43, 0x01, 0xf1, 0x01, 0x18, 0xf4, + 0x81, 0x18, 0xcc, 0x30, 0xa8, 0x02, 0x1f, 0x80, 0xc1, 0x0c, 0x49, 0xc4, 0x07, 0x60, 0xd0, 0x07, + 0x62, 0xc0, 0x07, 0x63, 0xc0, 0x07, 0x64, 0x30, 0xc3, 0xc0, 0x0a, 0x7c, 0x30, 0x06, 0x33, 0x0c, + 0xac, 0xd0, 0x07, 0x62, 0x30, 0x43, 0x21, 0xe1, 0x01, 0x18, 0xe0, 0x41, 0x18, 0xcc, 0x30, 0xbc, + 0x02, 0x1e, 0x80, 0xc1, 0x0c, 0xc3, 0x2b, 0xe0, 0x41, 0x18, 0xcc, 0x30, 0xb0, 0x02, 0x1f, 0x90, + 0xc1, 0x0c, 0x83, 0x1e, 0xe0, 0x01, 0x18, 0xcc, 0x30, 0xe8, 0x01, 0x1e, 0x84, 0xc1, 0x0c, 0xc3, + 0x64, 0x07, 0x60, 0x30, 0xc3, 0x50, 0x0b, 0xb5, 0x00, 0x06, 0x33, 0x24, 0x16, 0x1e, 0x80, 0x41, + 0x28, 0x84, 0x41, 0x28, 0x88, 0x41, 0x28, 0x94, 0xc1, 0x0c, 0x47, 0x65, 0x07, 0x60, 0x60, 0x07, + 0x63, 0x70, 0x0b, 0x66, 0x30, 0x43, 0x74, 0xe1, 0x01, 0x18, 0xe0, 0x41, 0x18, 0xe0, 0x81, 0x18, + 0xe0, 0x41, 0x19, 0xe0, 0xc1, 0x18, 0x84, 0xc2, 0x19, 0x84, 0x02, 0x19, 0xd8, 0x01, 0x1a, 0xcc, + 0x50, 0x50, 0xb8, 0x00, 0x06, 0xb9, 0x90, 0x06, 0x33, 0x0c, 0xba, 0x10, 0x0a, 0x6a, 0x30, 0xc3, + 0xa0, 0x0b, 0xa1, 0xb0, 0x06, 0x33, 0x14, 0x18, 0x1f, 0x80, 0x01, 0x1f, 0x88, 0xc1, 0x0c, 0x43, + 0x2f, 0xf0, 0x01, 0x18, 0xcc, 0x30, 0xe8, 0x02, 0x1e, 0x98, 0xc1, 0x0c, 0x03, 0x2e, 0xe0, 0x81, + 0x19, 0xcc, 0x30, 0x64, 0x76, 0x00, 0x06, 0x33, 0x0c, 0xe1, 0x10, 0x0e, 0x60, 0x30, 0xc3, 0xd0, + 0x0b, 0x7c, 0x20, 0x06, 0x33, 0x34, 0x9a, 0x1d, 0x80, 0x81, 0x1d, 0xa4, 0x41, 0x38, 0xb0, 0x41, + 0x38, 0xb4, 0x41, 0x28, 0xb8, 0x01, 0x1f, 0xbc, 0xc1, 0x0c, 0x03, 0x39, 0x84, 0x82, 0x1b, 0xcc, + 0x30, 0x90, 0x83, 0x1d, 0xa4, 0xc1, 0x0c, 0x03, 0x39, 0x84, 0x43, 0x1b, 0x5c, 0x2b, 0x00, 0x62, + 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, + 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, 0x62, 0x20, 0x06, + 0x62, 0x20, 0x06, 0x62, 0x60, 0x59, 0x6e, 0x40, 0x07, 0x6e, 0x40, 0x07, 0xbe, 0x40, 0x07, 0x6e, + 0xe0, 0x06, 0xa6, 0x40, 0x07, 0x74, 0xe0, 0x06, 0xa6, 0x40, 0x07, 0x74, 0xe0, 0x0b, 0x74, 0x40, + 0x07, 0x74, 0x40, 0x07, 0xa6, 0x40, 0x07, 0xf6, 0x40, 0x07, 0x74, 0x60, 0x0a, 0x74, 0x40, 0x07, + 0x74, 0x40, 0x07, 0x74, 0xe0, 0x06, 0x74, 0x60, 0x0f, 0xbe, 0x60, 0x1b, 0xa6, 0x40, 0x07, 0x74, + 0x60, 0x0a, 0x74, 0x40, 0x07, 0x74, 0xe0, 0x06, 0x74, 0x40, 0x07, 0x66, 0x41, 0x07, 0x74, 0x20, + 0x23, 0x81, 0x09, 0xca, 0x89, 0x8d, 0xcd, 0xae, 0xcd, 0x85, 0x2d, 0xcd, 0x6d, 0xad, 0x4c, 0xce, + 0xe5, 0x0d, 0x8e, 0x2e, 0xed, 0xcd, 0x6d, 0x6e, 0x14, 0x20, 0x23, 0x36, 0x36, 0xbb, 0x36, 0x97, + 0xb6, 0x37, 0xb2, 0x3a, 0xb6, 0x32, 0x17, 0x33, 0xb6, 0xb0, 0xb3, 0xb9, 0x51, 0x88, 0x37, 0x80, + 0x83, 0x38, 0x90, 0x83, 0x54, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0x46, + 0x09, 0xe6, 0x00, 0x00, 0xa9, 0x18, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, + 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, 0x39, + 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, + 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, + 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, 0x07, + 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, + 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, + 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, 0xe8, + 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, + 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, 0x0b, 0x88, 0x75, 0x18, + 0x07, 0x73, 0x48, 0x87, 0x05, 0xcf, 0x38, 0xbc, 0x83, 0x3b, 0xd8, 0x43, 0x39, 0xc8, 0xc3, 0x39, + 0x94, 0x83, 0x3b, 0x8c, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xc8, 0x03, 0x3b, 0x00, 0x00, 0x00, 0x00, + 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x03, + 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, + 0x64, 0x2c, 0x88, 0x4f, 0x27, 0x1c, 0x15, 0x05, 0x0b, 0x42, 0xc8, 0x82, 0x0c, 0x32, 0x04, 0x87, + 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xb0, + 0x83, 0x2d, 0xc3, 0x10, 0xd8, 0xc1, 0x96, 0x21, 0x09, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, 0xdd, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, + 0x64, 0x2c, 0x88, 0x4f, 0x27, 0x1c, 0x15, 0x05, 0x0b, 0x42, 0xc8, 0x82, 0x0c, 0x32, 0x04, 0x87, + 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x4d, 0x40, 0x00, 0x3e, 0x9d, 0xe0, 0x74, 0x3e, 0x9d, 0xe0, 0x78, 0x14, 0x2d, 0x08, + 0x2d, 0x0b, 0x42, 0xc4, 0x82, 0x0c, 0x32, 0x04, 0x11, 0x84, 0x01, 0x21, 0xfe, 0x83, 0x0c, 0xc3, + 0x14, 0x61, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x40, 0x00, 0x1b, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xb0, 0x83, 0x2d, 0xc3, 0x10, + 0xd8, 0xc1, 0x96, 0x21, 0x09, 0xec, 0x60, 0xcb, 0xd0, 0x04, 0x76, 0xb0, 0x65, 0x70, 0x02, 0x3b, + 0xd8, 0x32, 0x50, 0x81, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0x02, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x8a, 0x4f, 0x27, 0x20, 0x15, 0x05, 0xb5, 0xe2, 0xd3, 0x09, + 0x0a, 0x45, 0x41, 0xad, 0xd0, 0x52, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, + 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, + 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x53, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xb0, 0x83, 0x2d, 0x83, 0x13, 0xd8, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x8a, 0x4f, + 0x27, 0x20, 0x15, 0x05, 0xb5, 0xe2, 0xd3, 0x09, 0x0a, 0x45, 0x41, 0xad, 0xd0, 0x52, 0x2b, 0x83, + 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, + 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, + 0x53, 0x50, 0x00, 0x3e, 0x9d, 0x40, 0x89, 0x81, 0x4f, 0x27, 0x50, 0x63, 0x40, 0x57, 0xad, 0x10, + 0x54, 0x2b, 0xf4, 0xd4, 0x0a, 0x15, 0xb5, 0x32, 0xc8, 0x10, 0x60, 0x17, 0x06, 0x85, 0xf8, 0x0f, + 0x32, 0x0c, 0x1a, 0x86, 0x81, 0x21, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x60, 0x74, 0x1a, 0x06, + 0x88, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xd1, 0x04, 0x05, 0xe0, 0xd3, 0x09, 0x62, 0xd0, + 0x06, 0x3e, 0x9d, 0x20, 0x06, 0x6e, 0x40, 0x65, 0x50, 0x2b, 0xe4, 0xd5, 0x0a, 0x75, 0xb5, 0x42, + 0x45, 0xad, 0x0c, 0x32, 0x04, 0x66, 0x50, 0x06, 0x18, 0x14, 0xe2, 0x3f, 0xc8, 0x30, 0xa0, 0x81, + 0x19, 0x60, 0x60, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x18, 0x6b, 0x80, 0x06, 0x18, 0x20, + 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x44, 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xb0, 0x83, 0x2d, 0x83, 0x13, 0xd8, 0xc1, 0x96, 0x61, + 0x0a, 0xec, 0x60, 0xcb, 0xd0, 0x05, 0x76, 0xb0, 0x65, 0x10, 0x83, 0xc0, 0x0e, 0xb6, 0x0c, 0x6c, + 0x10, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd4, 0x8a, 0x4f, 0x27, 0x24, 0x16, 0x05, 0xb5, 0xe2, 0xd3, 0x09, + 0x4b, 0x45, 0x41, 0xad, 0xf8, 0x74, 0x42, 0x43, 0x51, 0x50, 0x2b, 0xe4, 0xd4, 0xca, 0x20, 0x43, + 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, + 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, + 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x59, 0x50, 0x00, 0x1b, 0x10, 0x03, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xb0, 0x83, 0x2d, 0xc3, 0x11, 0xd8, 0xc1, 0x96, 0x61, + 0x0a, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd4, 0x8a, 0x4f, 0x27, 0x24, 0x16, 0x05, 0xb5, 0xe2, 0xd3, 0x09, + 0x4b, 0x45, 0x41, 0xad, 0xf8, 0x74, 0x42, 0x43, 0x51, 0x50, 0x2b, 0xe4, 0xd4, 0xca, 0x20, 0x43, + 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, + 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, + 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x59, 0x50, 0x00, 0x3e, 0x9d, 0xa0, + 0xa1, 0x81, 0x4f, 0x27, 0x68, 0x69, 0x40, 0x5d, 0xad, 0x50, 0x55, 0x2b, 0x44, 0xd5, 0x0a, 0x4d, + 0xb5, 0x42, 0x46, 0xad, 0x0c, 0x32, 0x04, 0x9f, 0x87, 0x81, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x18, + 0x7c, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x06, 0x19, 0x84, 0x01, 0x06, 0x89, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x72, 0x06, 0x63, 0x80, 0xc1, 0x22, 0xfe, 0x38, 0x04, + 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, 0x74, 0x02, 0x1b, 0xdc, 0x81, 0x4f, 0x27, 0xb0, + 0x01, 0x1e, 0xd0, 0x1b, 0xd4, 0x0a, 0x9d, 0x41, 0xad, 0x90, 0x19, 0xd4, 0x0a, 0x95, 0x41, 0xad, + 0x90, 0x51, 0x2b, 0x83, 0x0c, 0x41, 0x1c, 0xc0, 0x01, 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, 0x73, + 0x10, 0x07, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x86, 0x1d, 0xcc, 0x01, 0x06, + 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0x92, 0x07, 0x75, 0x80, 0xc1, 0x22, 0xfe, 0x38, + 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0xf8, 0x74, 0x82, 0x1f, 0x98, 0x82, 0x4f, 0x27, + 0xf8, 0xc1, 0x29, 0x50, 0x28, 0xd4, 0x0a, 0xe5, 0x41, 0xad, 0x10, 0x1e, 0xd4, 0x0a, 0xdd, 0x41, + 0xad, 0x90, 0x51, 0x2b, 0x83, 0x0c, 0xc1, 0x28, 0x88, 0x02, 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, + 0xa5, 0x30, 0x0a, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x06, 0x2a, 0x94, 0x02, + 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x43, 0xb2, 0x0a, 0xa7, 0x80, 0xc1, 0x22, 0xfe, + 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x44, 0x41, 0x01, 0x6c, 0x40, 0x0c, 0x11, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x23, 0xb0, 0x83, 0x2d, 0xc3, 0x11, 0xd8, 0xc1, 0x96, 0x61, 0x0a, 0xec, 0x60, 0xcb, + 0x90, 0x05, 0x76, 0xb0, 0x65, 0xd0, 0x02, 0x3b, 0xd8, 0x32, 0x98, 0x41, 0x60, 0x07, 0x5b, 0x06, + 0x36, 0x08, 0xec, 0x60, 0xcb, 0xd0, 0x06, 0x81, 0x1d, 0x6c, 0x19, 0xf2, 0x20, 0xb0, 0x83, 0x2d, + 0xc3, 0x1f, 0x04, 0x76, 0xb0, 0x65, 0x00, 0x85, 0xc0, 0x0e, 0xb6, 0x0c, 0xac, 0x10, 0xd8, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x1b, 0x4b, 0x00, + 0x84, 0xb1, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2c, 0x88, 0x4f, 0x27, 0x14, 0x13, 0x05, + 0x0b, 0x32, 0xc8, 0x30, 0x04, 0xc5, 0xb0, 0x01, 0x71, 0x04, 0x04, 0x30, 0xc8, 0x40, 0x08, 0x85, + 0x4f, 0x27, 0x20, 0xd7, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0xb0, 0x83, 0x2d, 0x03, 0x11, 0xd8, 0xc1, 0x96, 0xe1, 0x08, 0xec, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x28, 0x83, 0xd1, 0x00, 0xf2, + 0xcd, 0x31, 0xfc, 0x04, 0x58, 0x84, 0xc5, 0x58, 0x03, 0x10, 0x0c, 0xd4, 0x1b, 0x0d, 0x20, 0xde, + 0x1c, 0xc4, 0x4f, 0xa0, 0xc4, 0x4a, 0x84, 0x05, 0xf9, 0xe6, 0x18, 0x50, 0x22, 0x25, 0xc2, 0x62, + 0xac, 0x01, 0x08, 0x08, 0x4a, 0x94, 0x02, 0xf9, 0xe6, 0x18, 0x56, 0x02, 0x2d, 0xc2, 0x62, 0xac, + 0x01, 0x08, 0x0a, 0x00, 0xe4, 0xf4, 0x8a, 0x4f, 0x27, 0x3c, 0x1c, 0x05, 0xbd, 0xe2, 0xd3, 0x09, + 0xd1, 0x46, 0x41, 0xaf, 0x0c, 0x32, 0x14, 0x83, 0x33, 0xc8, 0x10, 0x08, 0xce, 0x20, 0x43, 0xe0, + 0x34, 0xc3, 0x06, 0x44, 0x15, 0x14, 0xc0, 0x20, 0x03, 0x62, 0x34, 0x83, 0x0c, 0x41, 0xd1, 0xf8, + 0x74, 0xc2, 0x55, 0x06, 0x83, 0x0c, 0x82, 0x14, 0x0d, 0x1b, 0x10, 0x42, 0x50, 0x00, 0x83, 0x0c, + 0x8c, 0xe2, 0x0c, 0x32, 0x04, 0x89, 0xe3, 0xd3, 0x09, 0x9b, 0x19, 0x0c, 0x32, 0x08, 0x56, 0x35, + 0x6c, 0x40, 0x08, 0x41, 0x01, 0x6c, 0x40, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0xb0, + 0x83, 0x2d, 0x43, 0x13, 0xd8, 0xc1, 0x96, 0x41, 0x0a, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, 0x0d, 0x20, 0xde, 0x1c, 0xc4, 0x4f, 0xa4, 0x04, + 0x58, 0x80, 0xc5, 0x1c, 0xc4, 0x4f, 0xa0, 0x44, 0x4a, 0x80, 0xc5, 0x58, 0x04, 0x10, 0x08, 0x04, + 0x25, 0x4a, 0x81, 0x78, 0x73, 0x10, 0x28, 0x41, 0x16, 0x60, 0x01, 0x16, 0x73, 0x10, 0x3f, 0x81, + 0x12, 0x64, 0x01, 0x16, 0x63, 0x11, 0x40, 0x20, 0x14, 0x94, 0x28, 0x06, 0xe2, 0xcd, 0x41, 0xac, + 0x04, 0x5a, 0x80, 0x05, 0x58, 0xcc, 0x41, 0xfc, 0x04, 0x4a, 0xa0, 0x05, 0x58, 0x8c, 0x45, 0x00, + 0x81, 0x60, 0x50, 0xa2, 0x0c, 0x88, 0x37, 0x07, 0xc1, 0x16, 0x2c, 0x01, 0x16, 0x60, 0x31, 0x07, + 0xf1, 0x13, 0x28, 0xc1, 0x12, 0x60, 0x31, 0x16, 0x01, 0x04, 0xc2, 0x01, 0x34, 0xd5, 0x8a, 0x4f, + 0x27, 0x50, 0x61, 0x40, 0x41, 0xad, 0xf8, 0x74, 0x82, 0x05, 0x06, 0x14, 0xd4, 0x8a, 0x4f, 0x27, + 0x60, 0x1f, 0x05, 0xb5, 0x32, 0xc8, 0x70, 0x14, 0xd6, 0x20, 0x43, 0x40, 0x58, 0x83, 0x0c, 0xc1, + 0x60, 0x0d, 0x1b, 0x10, 0x5c, 0x50, 0x00, 0x83, 0x0c, 0x0a, 0x52, 0x0d, 0x32, 0x04, 0x47, 0x35, + 0xc8, 0x10, 0x18, 0x95, 0x4f, 0x27, 0x7c, 0x6d, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x0c, 0x32, + 0x38, 0x4c, 0x35, 0xc8, 0x10, 0x2c, 0xd5, 0x20, 0x43, 0xa0, 0x54, 0x3e, 0x9d, 0x30, 0x06, 0x6e, + 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x0c, 0x32, 0x48, 0x50, 0x35, 0xc8, 0x10, 0x3c, 0xd5, 0x20, + 0x43, 0xe0, 0x54, 0x3e, 0x9d, 0x70, 0x06, 0x6f, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x6c, 0x40, + 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xb0, 0x83, 0x2d, 0x83, 0x12, + 0xd8, 0xc1, 0x96, 0xe1, 0x09, 0xec, 0x60, 0xcb, 0x40, 0x05, 0x76, 0xb0, 0x65, 0xc8, 0x02, 0x3b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, + 0xdd, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x64, 0x2c, 0x08, 0x19, 0x0b, 0x32, 0xc8, 0x10, + 0x14, 0x04, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x83, 0x0c, 0xc3, 0x51, 0x60, + 0x50, 0x88, 0xbf, 0x4f, 0x27, 0x28, 0xda, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xb0, 0x83, 0x2d, 0x43, 0x10, 0xd8, 0xc1, 0x96, 0x81, + 0x08, 0xec, 0x60, 0xcb, 0x80, 0x04, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, + 0x02, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x0a, 0x1d, 0xb5, 0x32, 0xc8, 0x10, 0x18, 0x05, 0x06, 0x83, + 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x50, 0x00, 0x3e, 0x9d, 0x90, 0x60, 0x83, 0x0c, 0x44, 0x72, 0x60, + 0x60, 0x88, 0xff, 0xb0, 0x01, 0x31, 0x04, 0x05, 0xe0, 0xd3, 0x09, 0x0c, 0x36, 0xc8, 0x70, 0x30, + 0x09, 0x06, 0x89, 0xf8, 0x0f, 0x1b, 0x10, 0x43, 0x50, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xb0, 0x83, 0x2d, 0x03, 0x12, 0xd8, 0xc1, 0x96, 0x81, + 0x09, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, + 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, + 0x0c, 0x03, 0x00, 0x00, 0x84, 0xd4, 0x0a, 0x21, 0xb5, 0x32, 0xc8, 0x10, 0x1c, 0x06, 0x06, 0x83, + 0xf8, 0x0f, 0x1b, 0x10, 0x4a, 0x50, 0x00, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0xbf, 0x4f, + 0x27, 0x30, 0xdb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x60, 0x30, 0x09, 0x06, 0x88, 0xf8, + 0xfb, 0x74, 0xc2, 0xb3, 0x0d, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, 0xc9, 0xb3, 0x60, 0xb0, + 0x88, 0xbf, 0x4f, 0x27, 0x48, 0xdb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, 0x01, 0x31, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xb0, 0x83, 0x2d, 0x43, 0x10, 0xd8, 0xc1, 0x96, 0x81, + 0x08, 0xec, 0x60, 0xcb, 0x80, 0x04, 0x76, 0xb0, 0x65, 0x60, 0x02, 0x3b, 0xd8, 0x32, 0x40, 0x81, + 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, + 0xdd, 0x08, 0xc0, 0x58, 0x42, 0x10, 0x00, 0x00, 0x54, 0x2c, 0x88, 0x4f, 0x27, 0x18, 0x15, 0x05, + 0x0b, 0x42, 0xc9, 0x82, 0xf8, 0x74, 0x82, 0x82, 0x51, 0xb0, 0x20, 0x83, 0x0c, 0x46, 0x82, 0x20, + 0x11, 0x88, 0xff, 0x20, 0x83, 0xb1, 0x28, 0x48, 0x04, 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0xc3, 0x06, + 0xc4, 0x13, 0x10, 0x80, 0x4f, 0x27, 0x3c, 0x1f, 0x49, 0x0b, 0x42, 0xc9, 0x82, 0x0c, 0x32, 0x38, + 0xd1, 0x83, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0xce, 0x14, 0x21, 0x11, 0x88, 0x3f, 0x06, 0x03, 0xf8, + 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0xb0, 0x83, 0x2d, 0x43, 0x11, 0xd8, 0xc1, 0x96, 0x61, 0x09, 0xec, 0x60, 0xcb, + 0xe0, 0x04, 0x76, 0xb0, 0x65, 0xa0, 0x02, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xd4, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0xc1, + 0x58, 0x84, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0x64, 0xf4, 0x8a, 0x4f, 0x27, 0x1c, 0x15, 0x05, + 0xbd, 0xe2, 0xd3, 0x09, 0x09, 0x45, 0x41, 0xaf, 0x10, 0x53, 0x2b, 0x3e, 0x9d, 0xd0, 0x68, 0x14, + 0xd4, 0x8a, 0x4f, 0x27, 0x3c, 0x19, 0x05, 0xb5, 0x32, 0xc8, 0x80, 0x38, 0x0d, 0x12, 0x81, 0xf8, + 0x0f, 0x32, 0x30, 0xd0, 0x83, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0xb0, 0x4c, 0x12, + 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x71, 0x05, 0x05, 0xe0, 0xd3, 0x09, 0x97, + 0x19, 0x90, 0x56, 0x2b, 0xe4, 0xd4, 0x0a, 0x35, 0xb5, 0x32, 0xc8, 0x40, 0x69, 0x18, 0x0e, 0x81, + 0xf8, 0x0f, 0x32, 0x60, 0x9c, 0x86, 0x46, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x70, 0x7d, + 0x1d, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0xc1, 0x04, 0x05, 0xe0, 0xd3, 0x09, + 0x63, 0xf0, 0x06, 0x64, 0x06, 0xb5, 0x42, 0x5a, 0xad, 0x50, 0x56, 0x2b, 0x83, 0x0c, 0x60, 0x60, + 0x06, 0x63, 0x80, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0x64, 0x80, 0x06, 0x65, 0x80, 0x46, 0x20, 0xfe, + 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x30, 0x06, 0x6b, 0x80, 0x06, 0x78, 0x04, 0xe2, 0x8f, 0x43, 0x00, + 0xfe, 0xc3, 0x06, 0x04, 0x13, 0x14, 0xc0, 0x06, 0xc4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x24, 0xb0, 0x83, 0x2d, 0x83, 0x14, 0xd8, 0xc1, 0x96, 0xc1, 0x0a, 0xec, 0x60, 0xcb, + 0xf0, 0x05, 0x76, 0xb0, 0x65, 0x18, 0x83, 0xc0, 0x0e, 0xb6, 0x0c, 0x6c, 0x10, 0xd8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, + 0x44, 0x10, 0x04, 0xc1, 0x58, 0x84, 0x20, 0x08, 0xc2, 0x58, 0xc4, 0x30, 0x0c, 0x03, 0x00, 0x00, + 0x74, 0xd4, 0x8a, 0x4f, 0x27, 0x20, 0x16, 0x05, 0xb5, 0xe2, 0xd3, 0x09, 0x4a, 0x45, 0x41, 0xad, + 0xf8, 0x74, 0x02, 0x43, 0x51, 0x50, 0x2b, 0xf4, 0xd4, 0x8a, 0x4f, 0x27, 0x40, 0x1d, 0x05, 0xb5, + 0xe2, 0xd3, 0x09, 0x12, 0x47, 0x41, 0xad, 0xf8, 0x74, 0x02, 0xb5, 0x51, 0x50, 0x2b, 0x83, 0x0c, + 0xce, 0x24, 0x21, 0x12, 0x88, 0xff, 0x20, 0x83, 0x53, 0x51, 0x88, 0x04, 0xe2, 0x8f, 0xc1, 0x00, + 0xfe, 0x83, 0x0c, 0x0f, 0x76, 0x61, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x40, 0x9b, + 0x86, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x7c, 0x41, 0x01, 0xf8, 0x74, 0xc2, + 0xe7, 0x06, 0x24, 0x06, 0xb5, 0x42, 0x53, 0xad, 0x90, 0x54, 0x2b, 0x14, 0xd5, 0xca, 0x20, 0x83, + 0x37, 0x06, 0x61, 0x80, 0x45, 0x20, 0xfe, 0x83, 0x0c, 0x5e, 0x19, 0x8c, 0x01, 0x1a, 0x81, 0xf8, + 0x63, 0x30, 0x80, 0xff, 0x20, 0xc3, 0x87, 0x06, 0x66, 0x80, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, + 0x3f, 0xc8, 0x00, 0x06, 0x6b, 0x90, 0x06, 0xa8, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, + 0x04, 0x14, 0x14, 0x80, 0x4f, 0x27, 0xbc, 0xc1, 0x1e, 0x90, 0x1c, 0xd4, 0x0a, 0x8d, 0x41, 0xad, + 0x90, 0x18, 0xd4, 0x0a, 0x85, 0x41, 0xad, 0x0c, 0x32, 0xb8, 0xc1, 0x1c, 0xc0, 0x01, 0x16, 0x81, + 0xf8, 0x0f, 0x32, 0xb8, 0x41, 0x1d, 0xc8, 0x01, 0x1a, 0x81, 0xf8, 0x63, 0x30, 0x80, 0xff, 0x20, + 0xc3, 0x1b, 0xe0, 0x41, 0x1d, 0x20, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0xc0, 0xc1, + 0x1e, 0xe0, 0x01, 0x2a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x01, 0x05, 0x05, 0xe0, + 0xd3, 0x09, 0x7f, 0x80, 0x0a, 0x24, 0x0a, 0xb5, 0x42, 0x73, 0x50, 0x2b, 0x24, 0x07, 0xb5, 0x42, + 0x71, 0x50, 0x2b, 0x83, 0x0c, 0x7e, 0x30, 0x0a, 0x7f, 0x80, 0x45, 0x20, 0xfe, 0x83, 0x0c, 0x7e, + 0x50, 0x0a, 0xa1, 0x80, 0x46, 0x20, 0xfe, 0x18, 0x0c, 0xe0, 0x3f, 0xc8, 0xf0, 0x07, 0xa8, 0x40, + 0x0a, 0x88, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xa0, 0xb0, 0x0a, 0xa7, 0x80, 0x4a, + 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x40, 0x41, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xb0, 0x83, 0x2d, 0x43, 0x13, 0xd8, 0xc1, 0x96, 0x21, + 0x0b, 0xec, 0x60, 0xcb, 0xe0, 0x05, 0x76, 0xb0, 0x65, 0x50, 0x83, 0xc0, 0x0e, 0xb6, 0x0c, 0x6f, + 0x10, 0xd8, 0xc1, 0x96, 0x61, 0x0f, 0x02, 0x3b, 0xd8, 0x32, 0x80, 0x42, 0x60, 0x07, 0x5b, 0x06, + 0x56, 0x08, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, + 0xdd, 0x58, 0x42, 0x00, 0x50, 0x62, 0x34, 0x80, 0x76, 0x73, 0x08, 0x28, 0x01, 0x16, 0x00, 0x00, + 0x54, 0x2c, 0x88, 0x4f, 0x27, 0x18, 0x14, 0x05, 0x0b, 0x32, 0xc8, 0x10, 0x1c, 0x06, 0x06, 0x84, + 0xf8, 0x0f, 0x32, 0x04, 0x89, 0x81, 0x42, 0x10, 0xfe, 0x63, 0x08, 0x01, 0xc7, 0x41, 0x40, 0x0c, + 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xb0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xd4, 0x1b, 0x0d, 0xa0, 0xdd, 0x58, 0x42, 0x20, 0x8c, 0x25, 0x08, 0x01, + 0x2d, 0x46, 0x03, 0x28, 0x31, 0x1a, 0x40, 0xbb, 0x39, 0x04, 0x94, 0x10, 0x8b, 0xb1, 0x04, 0x81, + 0x18, 0x4b, 0x08, 0x80, 0xb1, 0x04, 0x60, 0x00, 0xa4, 0xf4, 0x8a, 0x4f, 0x27, 0x2c, 0x18, 0x05, + 0xbd, 0xe2, 0xd3, 0x09, 0xcd, 0x45, 0x41, 0xaf, 0x8c, 0x21, 0x0c, 0xdf, 0x20, 0x83, 0xf0, 0x38, + 0x83, 0x0c, 0x07, 0xe4, 0xa0, 0x10, 0x88, 0xff, 0x20, 0x43, 0xf0, 0x34, 0x28, 0x04, 0xe1, 0x3f, + 0x86, 0x10, 0x94, 0x01, 0x06, 0x87, 0xf8, 0x0f, 0x32, 0x2c, 0x56, 0x35, 0xc8, 0xa0, 0x38, 0x11, + 0x0a, 0x81, 0xf8, 0x0f, 0x32, 0x40, 0xcc, 0x84, 0x44, 0x20, 0xfe, 0x83, 0x0c, 0x01, 0x46, 0x21, + 0x11, 0x84, 0xff, 0x20, 0x03, 0x05, 0x55, 0x28, 0x04, 0xe2, 0x3f, 0xc8, 0x10, 0x70, 0x1a, 0x0a, + 0x01, 0xf8, 0x8f, 0x21, 0x04, 0x72, 0x80, 0x41, 0x03, 0xfe, 0x1c, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xa8, 0xc2, 0x2a, 0x82, 0x32, 0xa0, 0xda, 0x68, 0x00, 0xed, 0xc6, 0x12, 0x86, 0x81, + 0x12, 0xa3, 0x01, 0xb4, 0x9b, 0x43, 0x20, 0x8b, 0x95, 0x18, 0x4b, 0x10, 0x04, 0x4a, 0x94, 0x01, + 0xed, 0xe6, 0x10, 0xc8, 0xe2, 0x2c, 0x68, 0x50, 0x48, 0x25, 0x40, 0xbb, 0x39, 0x04, 0xb2, 0x40, + 0x89, 0xb1, 0x84, 0x20, 0xa0, 0xc5, 0x68, 0x00, 0x25, 0x46, 0x00, 0x88, 0x37, 0x07, 0xe1, 0x16, + 0x6e, 0x81, 0x12, 0x64, 0x31, 0x16, 0x11, 0x14, 0x45, 0x31, 0x16, 0x21, 0x18, 0x86, 0x31, 0x16, + 0x31, 0x1c, 0xc7, 0x41, 0xb5, 0xb1, 0x08, 0x10, 0x04, 0x41, 0xfc, 0x03, 0x41, 0x10, 0xc4, 0x7f, + 0x01, 0x04, 0x41, 0x10, 0xff, 0x40, 0x10, 0x04, 0xf1, 0x5f, 0x20, 0xc3, 0x18, 0x01, 0x08, 0x82, + 0x20, 0x08, 0x0a, 0x00, 0x84, 0xd5, 0x8a, 0x4f, 0x27, 0x64, 0x66, 0x40, 0x41, 0xad, 0xf8, 0x74, + 0xc2, 0x26, 0x06, 0x14, 0xd4, 0x8a, 0x4f, 0x27, 0x74, 0x1c, 0x05, 0x06, 0xe2, 0xd3, 0x09, 0x5f, + 0x47, 0x81, 0x61, 0x8c, 0x21, 0x1c, 0xde, 0x18, 0x02, 0xe2, 0x0d, 0x32, 0x1c, 0x5e, 0x37, 0xc8, + 0xa0, 0x7c, 0xdc, 0x1c, 0x43, 0x70, 0xd4, 0x01, 0x0e, 0x81, 0xf8, 0x0f, 0x32, 0x2c, 0x62, 0xe0, + 0x0d, 0x32, 0x38, 0x63, 0xd0, 0xcd, 0x31, 0x04, 0x49, 0x1e, 0xe0, 0x10, 0x88, 0x3f, 0x16, 0x41, + 0xf8, 0x23, 0xb3, 0x88, 0x3f, 0x3e, 0x8b, 0xf8, 0xa3, 0x10, 0x84, 0xbf, 0x4f, 0x27, 0xbc, 0xc1, + 0x18, 0x50, 0x60, 0x18, 0x63, 0x08, 0x17, 0x19, 0x0c, 0x32, 0x60, 0x6d, 0x40, 0x06, 0x73, 0x0c, + 0xc1, 0x30, 0x0a, 0x18, 0x05, 0xe2, 0x3f, 0xc8, 0x90, 0xc1, 0x81, 0x19, 0x60, 0xd0, 0x88, 0x3f, + 0x0e, 0x41, 0xf8, 0x23, 0x76, 0x88, 0x3f, 0x26, 0x97, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x52, 0x88, + 0xf8, 0xe3, 0x71, 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0x23, 0x18, 0x34, 0xe2, 0x8f, 0x8f, 0x27, 0xfe, + 0x28, 0x04, 0xe1, 0x3f, 0xc8, 0x60, 0xc5, 0xc1, 0x1b, 0xcc, 0x31, 0x04, 0x94, 0x1f, 0x0c, 0x32, + 0x30, 0x73, 0x10, 0x07, 0x73, 0x0c, 0x81, 0x02, 0x0a, 0x83, 0x0c, 0x48, 0x1d, 0xcc, 0xc1, 0x1c, + 0x43, 0x60, 0x88, 0xc2, 0x20, 0x43, 0x1b, 0xbc, 0x01, 0x1d, 0x0c, 0x32, 0xb8, 0x01, 0x1c, 0xd0, + 0xc1, 0x20, 0xc3, 0x1b, 0xc4, 0x01, 0x1d, 0x20, 0x32, 0x88, 0x3f, 0x16, 0x82, 0xf8, 0x63, 0x20, + 0x80, 0x3f, 0x16, 0x89, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0xde, 0x41, 0x1e, 0x88, 0x3f, 0x06, 0x82, + 0xf8, 0x8f, 0x18, 0x1c, 0x40, 0x08, 0x82, 0x85, 0x7f, 0xd8, 0x01, 0x3a, 0xe8, 0x41, 0xc0, 0x41, + 0x40, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x22, 0xb0, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xb4, 0x18, 0x0d, 0xa0, 0xc4, 0x68, 0x00, 0xed, + 0xe6, 0x10, 0x50, 0x02, 0x2c, 0x68, 0x50, 0x02, 0x64, 0x18, 0x23, 0x00, 0x41, 0x10, 0xc4, 0x3f, + 0xaa, 0x8d, 0x06, 0x10, 0x6f, 0x04, 0x60, 0x0e, 0x02, 0x25, 0xc0, 0x02, 0x2c, 0x56, 0x82, 0x06, + 0x45, 0x00, 0x00, 0x00, 0xb4, 0x2c, 0x88, 0x4f, 0x27, 0x30, 0x1a, 0x05, 0x0b, 0x32, 0xc8, 0x10, + 0x30, 0x0a, 0x06, 0x84, 0xf8, 0x8f, 0x21, 0x04, 0x60, 0x30, 0x86, 0x40, 0x84, 0xc1, 0x18, 0xc2, + 0xd1, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0xe3, 0x13, 0x90, 0xbf, 0x11, 0xe0, 0x6f, 0x06, + 0xf8, 0xcf, 0x31, 0x44, 0x03, 0x1a, 0x0c, 0x32, 0x04, 0x52, 0x34, 0xc8, 0xd0, 0x3c, 0xd1, 0x1c, + 0x43, 0x50, 0x58, 0x73, 0x0c, 0x41, 0x21, 0x21, 0x11, 0x88, 0xff, 0xb0, 0x01, 0xd1, 0x05, 0x04, + 0xb0, 0x01, 0x31, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x21, 0xb0, 0x83, 0x2d, 0xc3, 0x14, + 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x34, 0x28, 0x81, 0x22, + 0xa0, 0xde, 0x68, 0x00, 0xed, 0xc6, 0x12, 0x02, 0x61, 0x2c, 0x41, 0x20, 0x68, 0x31, 0x1a, 0x40, + 0xbb, 0xb1, 0x84, 0x00, 0x20, 0xc3, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xd1, 0x6e, 0x04, 0x60, + 0x2c, 0x01, 0x10, 0xc6, 0x12, 0x84, 0x61, 0x2c, 0x41, 0x00, 0xc6, 0x12, 0x80, 0x62, 0x2c, 0x01, + 0x08, 0xc6, 0x12, 0x82, 0x81, 0x06, 0x05, 0x05, 0x24, 0xf5, 0x8a, 0x4f, 0x27, 0x4c, 0x60, 0x40, + 0x41, 0xaf, 0xf8, 0x74, 0x42, 0xf5, 0x51, 0xd0, 0x2b, 0x63, 0x08, 0xc5, 0x19, 0x8c, 0x21, 0x10, + 0xd6, 0x18, 0x42, 0x61, 0x8d, 0x21, 0x18, 0x6a, 0x30, 0x86, 0x90, 0x64, 0x63, 0x08, 0x4a, 0x36, + 0x86, 0x70, 0xb4, 0x01, 0x16, 0x83, 0xf8, 0xe3, 0x31, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, 0x40, + 0x88, 0xff, 0x20, 0x03, 0xe3, 0x75, 0x83, 0x0c, 0x4f, 0xd4, 0xa1, 0x10, 0x88, 0xff, 0x20, 0xc3, + 0x14, 0x7d, 0x48, 0x04, 0xe2, 0x3f, 0xc8, 0x10, 0x80, 0xc1, 0x87, 0x01, 0x11, 0xfe, 0x63, 0x08, + 0x41, 0x1e, 0x60, 0x30, 0x89, 0xff, 0x18, 0xc2, 0x90, 0x06, 0x18, 0x48, 0xe2, 0x8f, 0x03, 0x03, + 0xfe, 0x18, 0x08, 0xe0, 0x8f, 0x66, 0x10, 0x90, 0xff, 0x1c, 0x43, 0x1a, 0x04, 0xa0, 0x30, 0xc8, + 0x10, 0xa8, 0xc1, 0x19, 0x60, 0xa0, 0x88, 0xff, 0xb0, 0x01, 0x21, 0x07, 0x41, 0x01, 0x20, 0x31, + 0x89, 0xbf, 0x4f, 0x27, 0xcc, 0x81, 0x28, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, 0x3e, 0x9d, 0x40, + 0x07, 0xa2, 0x30, 0xc8, 0x00, 0x06, 0x72, 0xb0, 0x06, 0x83, 0x0c, 0x63, 0x50, 0x06, 0x6b, 0x80, + 0x42, 0x20, 0xfe, 0x83, 0x0c, 0x63, 0x50, 0x07, 0x6c, 0x30, 0xc8, 0x60, 0x06, 0x68, 0xc0, 0x06, + 0x28, 0x04, 0xe2, 0x8f, 0x44, 0x10, 0xfe, 0xc8, 0x04, 0xe2, 0x3f, 0x6c, 0x40, 0x24, 0x41, 0x01, + 0x20, 0x19, 0x88, 0x81, 0xf8, 0xa3, 0x19, 0xa0, 0x81, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x4a, 0x81, + 0xf8, 0xfb, 0x74, 0x42, 0x28, 0xb8, 0xc2, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xe0, 0xd3, 0x09, 0xa2, + 0xd0, 0x0a, 0x83, 0x0c, 0x6e, 0x00, 0x0a, 0x75, 0x30, 0xc8, 0x30, 0x07, 0x71, 0x50, 0x07, 0x28, + 0x04, 0xe2, 0x3f, 0xc8, 0x10, 0x80, 0xc2, 0x1f, 0x0c, 0x32, 0xd0, 0x81, 0x1d, 0xe0, 0x01, 0x16, + 0x81, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x6a, 0x81, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x50, 0x00, 0x48, + 0x07, 0x75, 0x20, 0xfe, 0x38, 0x07, 0x72, 0x20, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x60, 0x10, 0x88, + 0xbf, 0x4f, 0x27, 0xbc, 0xc2, 0x1f, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x30, 0x08, 0xf0, 0x60, 0xcb, 0x40, 0x06, 0x81, 0x1e, 0x6c, + 0x19, 0xdc, 0x20, 0xc0, 0x83, 0x2d, 0x03, 0x1d, 0x04, 0x7a, 0xb0, 0x65, 0xf0, 0x83, 0x00, 0x0f, + 0xb6, 0x0c, 0xa4, 0x10, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xc4, 0x1b, 0x8b, 0x18, 0x86, 0xe1, 0x18, 0x8b, 0x10, 0x0c, 0xc1, 0x18, 0x8b, 0x10, 0x04, 0xc1, + 0x18, 0x8b, 0x18, 0x8e, 0xe1, 0x18, 0x8b, 0x08, 0x8a, 0xa0, 0x18, 0x8b, 0x08, 0x82, 0xa0, 0x18, + 0x8b, 0x00, 0x08, 0x80, 0x18, 0x8b, 0x00, 0x00, 0x80, 0xa0, 0xda, 0x68, 0x00, 0xf1, 0xc6, 0x22, + 0x00, 0x21, 0x18, 0xc6, 0x22, 0x00, 0x82, 0x20, 0xc6, 0x22, 0x82, 0xa2, 0x28, 0xc6, 0x22, 0x04, + 0xc3, 0x30, 0xc6, 0x22, 0x86, 0xe3, 0x38, 0xa8, 0x36, 0x16, 0x01, 0x82, 0x20, 0x88, 0x7f, 0x20, + 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x63, 0x11, + 0x20, 0x08, 0x82, 0xf8, 0x2f, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x20, + 0x08, 0x82, 0xf8, 0x47, 0x89, 0x11, 0x80, 0xd1, 0x00, 0xe2, 0xcd, 0x41, 0xbc, 0x45, 0x4a, 0xc0, + 0x05, 0x5c, 0xcc, 0x41, 0xbc, 0x05, 0x4a, 0xa4, 0x04, 0x5c, 0x8c, 0x45, 0x00, 0x81, 0x40, 0x90, + 0x61, 0x8c, 0x00, 0x04, 0x41, 0x10, 0x04, 0x85, 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0x23, 0xde, + 0x08, 0x00, 0x00, 0x00, 0xa4, 0xd5, 0x8a, 0x4f, 0x27, 0x6c, 0x68, 0x40, 0x41, 0xad, 0xf8, 0x74, + 0x42, 0x77, 0x06, 0x14, 0xd4, 0x8a, 0x4f, 0x27, 0x7c, 0x66, 0x40, 0x41, 0xad, 0x0c, 0x32, 0x04, + 0xc3, 0x37, 0xc8, 0x40, 0x18, 0x1f, 0x0a, 0x81, 0xf8, 0x0f, 0x32, 0x10, 0x06, 0x18, 0x0c, 0x32, + 0x1c, 0x09, 0x18, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0x0f, 0x32, 0x28, 0x8c, 0x18, 0x20, + 0x12, 0x88, 0xff, 0x20, 0x83, 0xc2, 0x8c, 0x01, 0x06, 0x86, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x26, + 0x85, 0xf8, 0x23, 0xc1, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x0f, 0x32, 0x48, 0x14, 0x1a, 0x20, 0x14, + 0x88, 0xff, 0x20, 0x83, 0x44, 0xa5, 0x01, 0x06, 0x8e, 0xf8, 0xe3, 0x10, 0x84, 0x3f, 0x46, 0x85, + 0xf8, 0x23, 0x41, 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0xa3, 0x83, 0x88, 0x3f, 0x1e, 0x91, 0xf8, 0xa3, + 0x10, 0x84, 0xff, 0x20, 0x03, 0x15, 0x07, 0x70, 0x30, 0xc8, 0x00, 0xc9, 0x41, 0x1c, 0x0c, 0x32, + 0x38, 0x73, 0x20, 0x07, 0x83, 0x0c, 0x0a, 0x1d, 0xcc, 0xc1, 0x20, 0x03, 0x52, 0x07, 0x74, 0x30, + 0xc8, 0x60, 0xd8, 0x41, 0x1d, 0x0c, 0x32, 0x94, 0xc1, 0x19, 0xd4, 0xc1, 0x20, 0x83, 0x19, 0xa0, + 0x41, 0x1d, 0x0c, 0x32, 0x9c, 0x41, 0x1a, 0xd4, 0xc1, 0x20, 0x03, 0x1a, 0xa8, 0x41, 0x1d, 0xa0, + 0x32, 0x88, 0x3f, 0x26, 0x82, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x16, 0x8c, 0xf8, 0xa3, 0x10, 0x84, + 0x3f, 0x3e, 0x89, 0xf8, 0x23, 0x73, 0x88, 0x3f, 0x06, 0x02, 0xf8, 0xa3, 0xf2, 0x88, 0x3f, 0x0a, + 0x41, 0xf8, 0xe3, 0xe4, 0x88, 0x3f, 0x42, 0x8c, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x42, 0x94, 0xf8, + 0xa3, 0x10, 0x84, 0x3f, 0x5e, 0x93, 0xf8, 0x63, 0x25, 0x89, 0x3f, 0x06, 0x02, 0xf8, 0x63, 0x85, + 0x89, 0x3f, 0x0a, 0x41, 0xf8, 0x23, 0x94, 0x0a, 0xe2, 0x8f, 0x4c, 0x2a, 0x88, 0x3f, 0x22, 0xab, + 0x20, 0xfe, 0x48, 0xac, 0x82, 0xf8, 0x0f, 0x32, 0x10, 0x43, 0x2a, 0x0c, 0x32, 0x04, 0x43, 0x2a, + 0x0c, 0x32, 0x04, 0x43, 0x2a, 0x60, 0x60, 0x0a, 0xe2, 0x3f, 0x62, 0x70, 0x00, 0x21, 0x08, 0x16, + 0xfe, 0x61, 0x07, 0xf8, 0xa0, 0x0a, 0x01, 0xaa, 0x42, 0x40, 0xfe, 0x73, 0x0c, 0xb9, 0x10, 0xcc, + 0xc3, 0x20, 0x43, 0xa0, 0x0b, 0xab, 0x80, 0x01, 0x23, 0xfe, 0xc3, 0x06, 0x44, 0x39, 0x04, 0x05, + 0x80, 0x02, 0x23, 0xfe, 0x3e, 0x9d, 0x60, 0x0e, 0xf4, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x20, + 0xd1, 0x88, 0xbf, 0x4f, 0x27, 0xa0, 0xc3, 0x3c, 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x68, 0x38, + 0xe2, 0xef, 0xd3, 0x09, 0xea, 0x20, 0x0f, 0xc3, 0x06, 0x44, 0x20, 0x14, 0xc0, 0x06, 0xc4, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x23, 0xb0, 0x83, 0x2d, 0x03, 0x2b, 0x04, 0x76, 0xb0, 0x65, + 0x78, 0x85, 0xc0, 0x0e, 0xb6, 0x0c, 0xb2, 0x10, 0xd8, 0xc1, 0x96, 0xa1, 0x16, 0x02, 0x3b, 0x00, + 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x30, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0xc6, 0x88, 0x01, 0x72, 0x06, 0x21, 0x08, 0x06, 0x8a, 0x4b, 0x18, 0xc4, 0x10, 0x8c, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x8a, 0x50, 0x00, 0x3e, 0x9d, 0xa0, 0x68, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, + 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x44, 0x61, 0xcb, 0x50, 0x04, 0xa3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0xc6, 0x88, 0x01, 0x72, 0x06, 0x21, 0x08, 0x06, 0x0a, 0x4b, 0x18, 0xc4, 0x10, 0x8c, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x8a, 0x50, 0x00, 0x3e, 0x9d, 0xa0, 0x68, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, + 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x44, 0x61, 0xcb, 0x50, 0x04, 0xa3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0xc6, 0x88, 0x01, 0x72, 0x06, 0x21, 0x08, 0x06, 0x8d, 0x4a, 0x18, 0xc4, 0x10, 0x8c, 0x26, + 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x8a, 0x50, 0x00, 0x3e, 0x9d, 0xa0, 0x68, 0xc3, + 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, + 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x44, 0x61, 0xcb, 0x50, 0x04, 0xa3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0x06, 0x1d, 0x8b, 0xe2, 0xd3, 0x09, 0x08, 0x46, 0xc1, 0x82, 0x8c, 0x18, 0x28, 0x67, 0x10, + 0x82, 0x60, 0xe0, 0xac, 0x44, 0x72, 0x18, 0xc4, 0x10, 0x6c, 0x40, 0x0c, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x44, 0x61, 0xcb, + 0x50, 0x04, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x20, 0x3e, + 0x9d, 0x60, 0x58, 0x14, 0x24, 0x06, 0x1d, 0x83, 0xe2, 0xd3, 0x09, 0x08, 0x46, 0xc1, 0x80, 0x8c, + 0x18, 0x28, 0x67, 0x10, 0x82, 0x60, 0xf0, 0xa4, 0x44, 0x72, 0x18, 0xc4, 0x10, 0x6c, 0x40, 0x0c, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, + 0x08, 0x44, 0x61, 0xcb, 0x50, 0x04, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, + 0x50, 0x91, 0x20, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x06, 0x1d, 0x83, 0xe2, 0xd3, 0x09, 0x08, + 0x46, 0xc1, 0x80, 0x8c, 0x18, 0x28, 0x67, 0x10, 0x82, 0x60, 0xf0, 0x9c, 0x44, 0x72, 0x18, 0xc4, + 0x10, 0x6c, 0x40, 0x0c, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, + 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x44, 0x61, 0xcb, 0x50, 0x04, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0x90, 0xa0, 0x41, 0x08, 0x82, 0x01, 0x44, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0xc1, 0x08, 0x05, 0xe0, 0xd3, + 0x09, 0x0c, 0x37, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x4a, 0x61, 0xcb, + 0x50, 0x04, 0xa6, 0xb0, 0x65, 0x38, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0x90, 0xa0, 0x41, 0x08, 0x82, 0x01, 0x24, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0xc1, 0x08, 0x05, 0xe0, 0xd3, + 0x09, 0x0c, 0x37, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x4a, 0x61, 0xcb, + 0x50, 0x04, 0xa6, 0xb0, 0x65, 0x38, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0x90, 0xa0, 0x41, 0x08, 0x82, 0x41, 0x04, 0x12, 0x88, 0x51, + 0x0c, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0xc1, 0x08, 0x05, 0xe0, 0xd3, + 0x09, 0x0c, 0x37, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x4a, 0x61, 0xcb, + 0x50, 0x04, 0xa6, 0xb0, 0x65, 0x38, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x42, 0xc9, 0xa2, 0xf8, 0x74, 0x82, 0xa2, 0x51, 0xb0, 0x20, 0x23, 0x06, + 0x0b, 0x1a, 0x84, 0x20, 0x18, 0x48, 0x21, 0xb1, 0x24, 0x88, 0x41, 0x0c, 0xc1, 0x06, 0xc4, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, + 0x08, 0x4a, 0x61, 0xcb, 0x50, 0x04, 0xa6, 0xb0, 0x65, 0x38, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, + 0x80, 0xe2, 0xd3, 0x09, 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, + 0x24, 0x86, 0x4f, 0x27, 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0xa0, 0xa4, 0x41, 0x08, 0x82, 0xc1, + 0xc4, 0x0f, 0x88, 0x51, 0x0c, 0x41, 0xb2, 0x01, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0xf0, 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x4a, 0x61, 0xcb, + 0x50, 0x04, 0xa6, 0xb0, 0x65, 0x38, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x0d, 0x80, 0xe2, 0xd3, 0x09, + 0x84, 0x44, 0xc1, 0x80, 0x50, 0x91, 0x28, 0x3e, 0x9d, 0x60, 0x58, 0x14, 0x24, 0x86, 0x4f, 0x27, + 0x20, 0x17, 0x05, 0x09, 0x32, 0x62, 0xa0, 0xa8, 0x41, 0x08, 0x82, 0xc1, 0xa4, 0x0f, 0x88, 0x51, + 0x0c, 0x41, 0xb2, 0x01, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0xf0, + 0x83, 0x2d, 0x83, 0x10, 0xfc, 0xc1, 0x96, 0x61, 0x08, 0x4a, 0x61, 0xcb, 0x50, 0x04, 0xa6, 0xb0, + 0x65, 0x38, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, 0x3e, 0x9d, 0x40, 0x48, 0x14, 0x0c, 0x48, 0x06, + 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x1c, 0x36, 0x20, 0x10, 0x81, 0x00, 0x7c, 0x3a, 0x01, 0xc1, + 0x86, 0x0d, 0x88, 0x40, 0x18, 0x80, 0x0d, 0x88, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x22, 0x40, 0x85, 0x2d, 0xc3, 0x11, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0xff, 0xff, 0x83, 0x02, 0x01, 0x00, 0x3e, 0x9d, 0x40, 0x48, + 0x14, 0x0c, 0x48, 0x06, 0x09, 0xb8, 0xa0, 0xd0, 0x13, 0x0a, 0x3c, 0x62, 0x42, 0x0d, 0x12, 0x10, + 0x70, 0x41, 0xa2, 0xc3, 0x06, 0xc4, 0x52, 0x14, 0x80, 0x4f, 0x27, 0x2c, 0xdb, 0xb0, 0x01, 0x11, + 0x14, 0x03, 0xe0, 0xd3, 0x09, 0xcc, 0x36, 0x6c, 0x40, 0x04, 0x03, 0x01, 0x6c, 0x40, 0x0c, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x24, 0x40, 0x85, 0x2d, 0x83, 0x12, 0xa0, 0xc2, 0x96, 0x81, + 0x09, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xa0, 0xa2, 0x00, 0x50, + 0x7c, 0x3a, 0x61, 0xc0, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0x18, 0xe0, 0x05, 0x8a, 0x52, + 0x63, 0x20, 0x3e, 0x9d, 0xe0, 0x7c, 0x14, 0x18, 0xc6, 0x88, 0x01, 0xb2, 0x06, 0x21, 0x08, 0x06, + 0x57, 0x3f, 0x24, 0xc4, 0x10, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x92, + 0x50, 0x00, 0x3e, 0x9d, 0x20, 0x8d, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0x03, 0x11, 0xb0, 0xc2, 0x96, 0xc1, + 0x08, 0x5a, 0x61, 0xcb, 0xa0, 0x04, 0xaf, 0xb0, 0x65, 0x60, 0x02, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x64, 0x00, 0x4a, 0x1a, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xc0, 0xa2, 0x00, 0x50, 0x7c, 0x3a, 0x61, 0xc8, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x81, 0x18, 0xe0, 0x05, 0x8a, 0x92, 0x63, 0x20, 0x3e, 0x9d, + 0xf0, 0x80, 0x01, 0x05, 0x86, 0x31, 0x62, 0x90, 0xb0, 0x41, 0x08, 0x82, 0x41, 0xc6, 0x0f, 0x09, + 0x31, 0x04, 0xd0, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0xb0, 0x01, 0x21, 0x09, 0x05, 0xe0, + 0xd3, 0x09, 0x12, 0x19, 0x0c, 0x1b, 0x10, 0x81, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0x03, 0x11, 0xb0, 0xc2, 0x96, 0xc1, + 0x08, 0x5a, 0x61, 0xcb, 0xa0, 0x04, 0xaf, 0xb0, 0x65, 0x60, 0x02, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x74, 0x00, 0x4a, 0x1e, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xe0, 0xa2, 0x00, 0x50, 0x7c, 0x3a, 0x61, 0xd0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0xc1, 0x18, 0xe0, 0x05, 0x8a, 0xd2, 0x63, 0x20, 0x3e, 0x9d, + 0x00, 0x85, 0x01, 0x05, 0x86, 0x41, 0x91, 0x81, 0xf8, 0x74, 0x82, 0x44, 0x06, 0x14, 0x18, 0x06, + 0x4d, 0x06, 0xe2, 0xd3, 0x09, 0xd4, 0x19, 0x50, 0x60, 0x18, 0x23, 0x06, 0x4c, 0x1b, 0x84, 0x20, + 0x18, 0x6c, 0x21, 0xf1, 0x28, 0xc9, 0x61, 0x10, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, + 0x30, 0x6c, 0x40, 0x60, 0x42, 0x01, 0xf8, 0x74, 0x02, 0xb6, 0x06, 0xc3, 0x06, 0x44, 0x20, 0x10, + 0xc0, 0x06, 0xc4, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0x03, 0x11, + 0xb0, 0xc2, 0x96, 0xc1, 0x08, 0x5a, 0x61, 0xcb, 0xa0, 0x04, 0xaf, 0xb0, 0x65, 0x60, 0x02, 0x58, + 0xd8, 0x32, 0x34, 0xc1, 0x2b, 0x6c, 0x19, 0x9e, 0x00, 0x16, 0xb6, 0x0c, 0x50, 0xf0, 0x0a, 0x5b, + 0x06, 0x29, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, + 0x00, 0xa3, 0x00, 0x50, 0x7c, 0x3a, 0x61, 0xd8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x01, 0x19, + 0xe0, 0x05, 0x8a, 0x12, 0x64, 0x20, 0x3e, 0x9d, 0x10, 0x89, 0x01, 0x05, 0x86, 0x41, 0x92, 0x81, + 0xf8, 0x74, 0xc2, 0x54, 0x06, 0x14, 0x18, 0x06, 0x51, 0x06, 0xe2, 0xd3, 0x09, 0x15, 0x1a, 0x50, + 0x60, 0x18, 0x23, 0x06, 0x8d, 0x1b, 0x84, 0x20, 0x18, 0x74, 0x20, 0xf1, 0x28, 0xc9, 0x61, 0x10, + 0x43, 0x60, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x0c, 0x1b, 0x10, 0x98, 0x50, 0x00, 0x3e, + 0x9d, 0x80, 0xb1, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x01, 0x31, 0x0c, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0x03, 0x11, 0xb0, 0xc2, 0x96, 0xc1, 0x08, 0x5a, 0x61, 0xcb, + 0xa0, 0x04, 0xaf, 0xb0, 0x65, 0x60, 0x02, 0x58, 0xd8, 0x32, 0x34, 0xc1, 0x2b, 0x6c, 0x19, 0x9e, + 0x00, 0x16, 0xb6, 0x0c, 0x50, 0xf0, 0x0a, 0x5b, 0x06, 0x29, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x54, 0x00, 0x4a, 0x16, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0x80, 0xa2, 0x00, 0x40, 0x7c, 0x3a, 0x61, 0xc0, + 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xc4, 0x18, 0x8a, 0x4f, 0x27, 0x34, 0x1e, 0x05, + 0x86, 0xe1, 0xd3, 0x09, 0xcf, 0x47, 0x81, 0x81, 0x8c, 0x18, 0x24, 0x6c, 0x10, 0x82, 0x60, 0x90, + 0xd9, 0x83, 0x62, 0x14, 0x43, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x6c, 0x40, 0x4c, + 0x42, 0x01, 0xf8, 0x74, 0xc2, 0x44, 0x06, 0xc3, 0x06, 0x44, 0x20, 0x10, 0xc0, 0x06, 0xc4, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0x03, 0x11, 0xc4, 0xc2, 0x96, 0xc1, + 0x08, 0x5a, 0x61, 0xcb, 0x90, 0x04, 0xb2, 0xb0, 0x65, 0x58, 0x82, 0x59, 0xd8, 0x32, 0x34, 0x81, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, + 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, 0xa0, 0xa2, 0x00, 0x40, + 0x7c, 0x3a, 0x61, 0xc8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, 0xd4, 0x18, 0x8a, 0x4f, + 0x27, 0x38, 0x1f, 0x05, 0x86, 0xe1, 0xd3, 0x09, 0x10, 0x18, 0x50, 0x60, 0x20, 0x23, 0x06, 0xca, + 0x1b, 0x84, 0x20, 0x18, 0x78, 0xf5, 0xa0, 0x18, 0xc5, 0x10, 0x44, 0xa3, 0x09, 0x01, 0x30, 0x9a, + 0x20, 0x04, 0xc3, 0x06, 0xc4, 0x24, 0x14, 0x80, 0x4f, 0x27, 0x4c, 0x65, 0x30, 0x6c, 0x40, 0x04, + 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, + 0x85, 0x2d, 0x03, 0x11, 0xc4, 0xc2, 0x96, 0xc1, 0x08, 0x5a, 0x61, 0xcb, 0x90, 0x04, 0xb2, 0xb0, + 0x65, 0x58, 0x82, 0x59, 0xd8, 0x32, 0x34, 0x81, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x0f, 0x00, 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0xfd, 0x04, + 0x21, 0xf0, 0xe9, 0x84, 0xc0, 0xa2, 0x00, 0x40, 0x7c, 0x3a, 0x61, 0xd0, 0x28, 0x18, 0x90, 0x0c, + 0x12, 0x70, 0x41, 0xa2, 0xe4, 0x18, 0x8a, 0x4f, 0x27, 0x3c, 0x60, 0x40, 0x81, 0x61, 0xf8, 0x74, + 0x42, 0x14, 0x06, 0x14, 0x18, 0x08, 0x49, 0x86, 0xe2, 0xd3, 0x09, 0x53, 0x19, 0x50, 0x60, 0x18, + 0x3e, 0x9d, 0x50, 0x99, 0x01, 0x05, 0x06, 0x42, 0x96, 0xa1, 0xf8, 0x74, 0xc2, 0xa5, 0x06, 0x14, + 0x18, 0x86, 0x4f, 0x27, 0x64, 0x6b, 0x40, 0x81, 0x81, 0x8c, 0x18, 0x3c, 0x70, 0x10, 0x82, 0x60, + 0xf0, 0xf9, 0x03, 0x05, 0x3d, 0xcd, 0xa2, 0x20, 0x46, 0x31, 0x04, 0xa3, 0x09, 0x01, 0x30, 0x9a, + 0x20, 0x04, 0xc3, 0x06, 0x44, 0x27, 0x14, 0x80, 0x4f, 0x27, 0x74, 0x70, 0x30, 0x6c, 0x40, 0x04, + 0x02, 0x01, 0x6c, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, + 0x85, 0x2d, 0x03, 0x11, 0xc4, 0xc2, 0x96, 0xc1, 0x08, 0x5a, 0x61, 0xcb, 0x90, 0x04, 0xb2, 0xb0, + 0x65, 0x58, 0x82, 0x59, 0xd8, 0x32, 0x34, 0x81, 0x1e, 0x6c, 0x19, 0x9c, 0x40, 0x16, 0xb6, 0x0c, + 0x50, 0x30, 0x0b, 0x5b, 0x06, 0x29, 0xd0, 0x83, 0x2d, 0xc3, 0x14, 0xc8, 0xc2, 0x96, 0xa1, 0x0a, + 0x66, 0x61, 0xcb, 0x70, 0x05, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x0f, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xe9, 0x84, + 0xe0, 0xa2, 0x00, 0x40, 0x7c, 0x3a, 0x61, 0xd8, 0x28, 0x18, 0x90, 0x0c, 0x12, 0x70, 0x41, 0xa2, + 0xf4, 0x18, 0x8a, 0x4f, 0x27, 0x40, 0x61, 0x40, 0x81, 0x61, 0xf8, 0x74, 0x82, 0x24, 0x06, 0x14, + 0x18, 0x08, 0x4d, 0x86, 0xe2, 0xd3, 0x09, 0x94, 0x19, 0x50, 0x60, 0x18, 0x3e, 0x9d, 0x60, 0x9d, + 0x01, 0x05, 0x06, 0x42, 0x97, 0xa1, 0xf8, 0x74, 0x02, 0xb6, 0x06, 0x14, 0x18, 0x86, 0x4f, 0x27, + 0x68, 0x6c, 0x40, 0x81, 0x81, 0x8c, 0x18, 0x40, 0x71, 0x10, 0x82, 0x60, 0x00, 0x06, 0xfd, 0x40, + 0x41, 0x4f, 0xb3, 0x28, 0x88, 0x51, 0x0c, 0xc1, 0x36, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, + 0x6c, 0x40, 0x74, 0x42, 0x01, 0xf8, 0x74, 0x42, 0x17, 0x07, 0xc3, 0x06, 0x44, 0x20, 0x10, 0xc0, + 0x06, 0xc4, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0x03, 0x11, + 0xc4, 0xc2, 0x96, 0xc1, 0x08, 0x5a, 0x61, 0xcb, 0x90, 0x04, 0xb2, 0xb0, 0x65, 0x58, 0x82, 0x59, + 0xd8, 0x32, 0x34, 0x81, 0x1e, 0x6c, 0x19, 0x9c, 0x40, 0x16, 0xb6, 0x0c, 0x50, 0x30, 0x0b, 0x5b, + 0x06, 0x29, 0xd0, 0x83, 0x2d, 0xc3, 0x14, 0xc8, 0xc2, 0x96, 0xa1, 0x0a, 0x66, 0x61, 0xcb, 0x70, + 0x05, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x01, 0x11, 0x80, 0x92, 0xc4, 0x20, 0x7c, 0xbf, 0x41, 0x08, 0x30, 0x0a, 0x00, 0x85, + 0x8c, 0x04, 0xf1, 0xe9, 0x84, 0x03, 0xa3, 0x20, 0x31, 0x46, 0x0c, 0x0e, 0x39, 0x08, 0x41, 0x30, + 0x08, 0x03, 0x73, 0x20, 0x86, 0x60, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0xd8, 0x80, 0x58, + 0x84, 0x02, 0xf0, 0xe9, 0x84, 0x85, 0x1b, 0x36, 0x20, 0x02, 0x81, 0x00, 0x36, 0x20, 0x06, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, 0xb0, 0xc2, 0x96, 0x81, + 0x08, 0x44, 0x61, 0xcb, 0x60, 0x04, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x03, 0x00, 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x18, 0x28, 0x00, + 0x10, 0x3a, 0x12, 0xc5, 0xa7, 0x13, 0x90, 0x8c, 0x82, 0xc4, 0xf0, 0xe9, 0x04, 0x45, 0xa3, 0x20, + 0x41, 0x46, 0x0c, 0x90, 0x33, 0x08, 0x41, 0x30, 0x10, 0x83, 0x73, 0x30, 0x8a, 0x21, 0x18, 0x4d, + 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x36, 0x20, 0x1c, 0xa1, 0x00, 0x7c, 0x3a, 0xc1, 0xf9, 0x86, + 0x0d, 0x88, 0x40, 0x20, 0x80, 0x0d, 0x88, 0x01, 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, + 0x85, 0x2d, 0xc3, 0x10, 0xc4, 0xc2, 0x96, 0x81, 0x08, 0x4a, 0x61, 0xcb, 0x60, 0x04, 0xa6, 0xb0, + 0x65, 0x40, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x15, 0x80, 0x92, 0xc5, 0x20, 0x7c, 0xbf, 0x41, 0x08, + 0x32, 0x0a, 0x00, 0x85, 0x8e, 0x04, 0xf1, 0xe9, 0x04, 0x24, 0xa3, 0x20, 0x31, 0x46, 0x0c, 0x90, + 0x33, 0x08, 0x41, 0x30, 0x10, 0x83, 0x71, 0x20, 0x86, 0x20, 0x19, 0x4d, 0x08, 0x80, 0xd1, 0x04, + 0x21, 0x18, 0x36, 0x20, 0x16, 0xa1, 0x00, 0x7c, 0x3a, 0x61, 0xe9, 0x86, 0x0d, 0x88, 0x40, 0x20, + 0x80, 0x0d, 0x88, 0x01, 0x05, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, + 0xb0, 0xc2, 0x96, 0x81, 0x08, 0x44, 0x61, 0xcb, 0x60, 0x04, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x18, 0x28, 0x00, 0x10, 0x42, 0x12, 0xc5, 0xa7, 0x13, 0x12, 0x8d, 0x82, 0xc4, 0xf0, 0xe9, + 0x84, 0x65, 0xa3, 0x20, 0x41, 0x46, 0x0c, 0x12, 0x34, 0x08, 0x41, 0x30, 0x20, 0x03, 0x72, 0x30, + 0x8a, 0x21, 0x60, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x86, 0x0d, 0x08, 0x47, 0x28, 0x00, + 0x9f, 0x4e, 0x70, 0xc0, 0x60, 0xd8, 0x80, 0x08, 0x04, 0x02, 0xd8, 0x80, 0x18, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, 0xc4, 0xc2, 0x96, 0x81, + 0x08, 0x4a, 0x61, 0xcb, 0x60, 0x04, 0xa6, 0xb0, 0x65, 0x40, 0x82, 0x53, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x28, 0x0a, 0x00, 0x54, 0x00, 0x4a, 0x16, + 0x83, 0xf0, 0xfd, 0x06, 0x21, 0xc8, 0x28, 0x00, 0x14, 0x9f, 0x4e, 0x08, 0x2e, 0x0a, 0x66, 0x24, + 0x83, 0x44, 0x5c, 0xa0, 0xa0, 0x4f, 0x27, 0x14, 0x09, 0x05, 0x33, 0x91, 0x41, 0x22, 0x2e, 0x70, + 0x70, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe4, 0x40, 0x0d, 0x0a, 0x33, 0x18, 0x31, 0x30, 0x80, + 0x10, 0x04, 0x03, 0x39, 0x58, 0x03, 0xe1, 0x0c, 0x86, 0x0d, 0x08, 0x48, 0x20, 0x00, 0x9f, 0x4e, + 0x80, 0xc4, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x01, 0xd8, 0x80, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, 0xb0, 0xc2, 0x96, 0xa1, 0x08, 0x6a, 0x61, 0xcb, + 0x90, 0x04, 0xb5, 0xb0, 0x65, 0x70, 0x02, 0x54, 0xd8, 0x32, 0x40, 0x01, 0x2a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x1a, 0x14, 0x05, 0x00, 0x00, + 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x20, 0x28, 0x00, 0x10, 0x9f, 0x4e, 0x08, + 0x30, 0x0a, 0x66, 0x24, 0x83, 0x44, 0x5c, 0xb0, 0xa0, 0x4f, 0x27, 0x14, 0x09, 0x05, 0x33, 0x91, + 0x41, 0x22, 0x2e, 0x78, 0xd0, 0xa7, 0x13, 0x92, 0x8e, 0x82, 0xd9, 0xc8, 0x20, 0x11, 0x17, 0x4c, + 0x38, 0x62, 0x60, 0x00, 0x21, 0x08, 0x06, 0x72, 0xf0, 0x06, 0xc9, 0x1a, 0x8c, 0x18, 0x18, 0x40, + 0x08, 0x82, 0x81, 0x1c, 0xc0, 0x81, 0xc1, 0x06, 0x23, 0x06, 0x06, 0x10, 0x82, 0x60, 0x20, 0x07, + 0x71, 0x30, 0xb4, 0xc1, 0xb0, 0x01, 0x61, 0x0d, 0x05, 0xe0, 0xd3, 0x09, 0x16, 0x1a, 0x0c, 0x1b, + 0x10, 0xc1, 0x30, 0x00, 0x3e, 0x9d, 0x70, 0xa1, 0xc1, 0xb0, 0x01, 0x11, 0x0c, 0x04, 0xb0, 0x01, + 0x31, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, + 0xc4, 0xc2, 0x96, 0xa1, 0x08, 0x6a, 0x61, 0xcb, 0x90, 0x04, 0xb5, 0xb0, 0x65, 0x68, 0x82, 0x5a, + 0xd8, 0x32, 0x4c, 0x01, 0x2a, 0x6c, 0x19, 0xaa, 0x00, 0x15, 0xb6, 0x0c, 0x57, 0x80, 0x0a, 0x00, + 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x0c, 0x62, 0x10, 0x02, 0x80, 0x24, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x74, 0x1b, 0x4b, 0x08, 0x02, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x4a, 0x12, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0xc0, 0x28, 0x00, 0x14, 0x9f, 0x4e, 0x08, + 0x2c, 0x0a, 0x6e, 0x64, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xf0, 0x00, 0x0c, 0x82, 0x23, 0x83, + 0x5d, 0x0c, 0x1b, 0x10, 0x4a, 0x40, 0x00, 0x1b, 0x10, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, 0xb0, 0xc2, 0x96, 0xa1, 0x08, 0x6a, 0x61, 0xcb, + 0x80, 0x04, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x9a, + 0x95, 0x00, 0xdd, 0xc6, 0x12, 0x82, 0x00, 0x00, 0x64, 0x00, 0x4a, 0x1a, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x28, 0x28, 0x00, 0x10, 0x9f, 0x4e, 0x08, 0x30, 0x9f, 0x4e, 0x10, 0x2c, 0x0a, 0x66, 0x63, + 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe8, 0xa0, 0x0c, 0x82, 0x24, 0x83, 0x44, 0x50, 0x71, 0x23, + 0x23, 0x06, 0x06, 0x10, 0x82, 0x60, 0x80, 0x07, 0x66, 0x10, 0x2c, 0x19, 0xec, 0x62, 0xd8, 0x80, + 0x80, 0x82, 0x02, 0xf0, 0xe9, 0x04, 0x08, 0x0c, 0x86, 0x0d, 0x88, 0xa0, 0x20, 0x80, 0x0d, 0x88, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x50, 0x85, 0x2d, 0xc3, 0x10, + 0xc4, 0xc2, 0x96, 0xc1, 0x08, 0x6a, 0x61, 0xcb, 0x90, 0x04, 0xb5, 0xb0, 0x65, 0x60, 0x02, 0x54, + 0xd8, 0x32, 0x38, 0x01, 0x2a, 0x00, 0x00, 0x00, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xd0, 0x80, 0x32, 0x28, 0xa4, 0x82, 0xa2, 0xc4, 0x08, 0x00, 0x0d, 0x0a, 0x8b, 0x12, + 0x35, 0x40, 0x83, 0xc2, 0x0c, 0x28, 0x3c, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa0, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0xac, 0x85, 0x12, 0xf8, 0x74, 0x82, 0xc3, 0xd1, 0x53, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb5, 0x32, 0xc7, 0x10, 0x40, 0x8c, 0x4f, 0x27, + 0x14, 0x60, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x8c, 0x21, 0x0c, 0x8e, 0x4f, 0x27, 0x1c, 0xdf, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0xe0, 0xd3, 0x09, 0xc8, 0x33, 0x6c, 0x40, 0x04, 0xd4, 0x00, 0xf8, + 0x74, 0x42, 0xf2, 0x0c, 0x1b, 0x10, 0xc1, 0x43, 0x00, 0x3e, 0x9d, 0xa0, 0x38, 0xc3, 0x06, 0x44, + 0x00, 0x0d, 0x80, 0x4f, 0x27, 0x2c, 0xdf, 0xb0, 0x01, 0x11, 0x3c, 0x03, 0xe0, 0xd3, 0x09, 0xcc, + 0x37, 0x6c, 0x40, 0x04, 0x10, 0x01, 0xf8, 0x74, 0x42, 0xf3, 0x0c, 0x1b, 0x10, 0x41, 0x34, 0x00, + 0xc4, 0x01, 0xca, 0x88, 0x81, 0x41, 0x07, 0x20, 0x08, 0x06, 0x05, 0x3b, 0x04, 0x0f, 0x09, 0x89, + 0x41, 0x45, 0x62, 0xf8, 0x74, 0x42, 0x24, 0xd1, 0x62, 0x28, 0xc3, 0x06, 0x44, 0x47, 0x10, 0x80, + 0x4f, 0x27, 0x74, 0x70, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x74, 0x82, 0x07, 0x07, 0x44, + 0x2c, 0xc6, 0xb0, 0x01, 0x21, 0x04, 0x04, 0xe0, 0xd3, 0x09, 0x60, 0x10, 0x07, 0xc3, 0x06, 0x44, + 0x50, 0x10, 0xc0, 0x88, 0x81, 0x31, 0x07, 0x20, 0x08, 0x06, 0x04, 0x68, 0x80, 0xc1, 0xb5, 0x01, + 0x31, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xb0, 0x83, 0x2d, 0x03, 0x11, + 0xd8, 0xc1, 0x96, 0x01, 0x09, 0xec, 0x60, 0xcb, 0xb0, 0x04, 0x78, 0xb0, 0x65, 0x68, 0x02, 0x54, + 0xd8, 0x32, 0x3c, 0x01, 0x2a, 0x6c, 0x19, 0xa2, 0x00, 0x15, 0xb6, 0x0c, 0x53, 0xa0, 0x0b, 0x5b, + 0x86, 0x2a, 0xd8, 0x85, 0x2d, 0xc3, 0x15, 0xa0, 0xc2, 0x96, 0x01, 0x0b, 0x7a, 0x61, 0xcb, 0xa0, + 0x05, 0xa8, 0xb0, 0x65, 0xd8, 0x02, 0x5d, 0xd8, 0x32, 0x74, 0x81, 0x2f, 0x6c, 0x19, 0xbc, 0x00, + 0x15, 0xb6, 0x0c, 0x60, 0x10, 0xa0, 0xc2, 0x96, 0x41, 0x0c, 0x02, 0x3c, 0xd8, 0x32, 0x8c, 0x41, + 0x80, 0x07, 0x5b, 0x86, 0x32, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x83, 0x42, 0x2a, 0x28, 0x4a, 0x8c, 0x00, 0xd0, 0xa0, 0xb0, 0xc8, 0x30, 0x02, 0x00, + 0x33, 0x11, 0xa1, 0x90, 0xa0, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0xa0, + 0xc5, 0x14, 0xf8, 0x74, 0xc2, 0x92, 0x11, 0x53, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb5, 0x32, 0xc7, 0x10, 0x34, 0x8a, 0x4f, 0x27, 0x14, 0xdd, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x30, 0x3e, 0x9d, 0x70, 0x70, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x4f, 0x27, 0x20, + 0xcd, 0xb0, 0x01, 0x11, 0x44, 0x03, 0xe0, 0xd3, 0x09, 0x49, 0x33, 0x6c, 0x40, 0x04, 0x0d, 0x01, + 0xf8, 0x74, 0x82, 0xc2, 0x0c, 0x1b, 0x10, 0x81, 0x33, 0x00, 0x64, 0x01, 0xca, 0x88, 0x81, 0x41, + 0x07, 0x20, 0x08, 0x06, 0x05, 0x39, 0x04, 0x0c, 0x15, 0x86, 0x32, 0x1c, 0x11, 0x38, 0x84, 0x7f, + 0x64, 0xa0, 0x8b, 0x61, 0x03, 0xc2, 0x0a, 0x02, 0x60, 0xc4, 0xc0, 0x98, 0x03, 0x10, 0x04, 0x03, + 0xa2, 0x2e, 0xc2, 0xe0, 0xd9, 0x80, 0x18, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xb0, + 0x83, 0x2d, 0x03, 0x11, 0xd8, 0xc1, 0x96, 0x01, 0x09, 0xec, 0x60, 0xcb, 0xb0, 0x04, 0x78, 0xb0, + 0x65, 0x68, 0x02, 0x54, 0xd8, 0x32, 0x3c, 0x01, 0x2a, 0x6c, 0x19, 0xa2, 0x00, 0x15, 0xb6, 0x0c, + 0x52, 0xd0, 0x0b, 0x5b, 0x06, 0x2a, 0xf8, 0x85, 0x2d, 0xc3, 0x15, 0x84, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x00, 0x32, 0x8c, 0x00, 0xd0, + 0xa0, 0x0c, 0x0a, 0xa9, 0xa0, 0x28, 0x31, 0x02, 0x40, 0x83, 0xc2, 0xa2, 0x44, 0x0d, 0xd0, 0xa0, + 0x30, 0x03, 0x0a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa0, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0xac, 0xc5, 0x12, 0xf8, 0x74, 0x82, 0xc3, 0xd1, 0x53, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb5, 0x32, 0xc7, 0x10, 0x34, 0x8c, 0x4f, 0x27, + 0x14, 0x60, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x8c, 0x21, 0x0c, 0x8e, 0x4f, 0x27, 0x1c, 0xdf, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0xe0, 0xd3, 0x09, 0xc8, 0x33, 0x6c, 0x40, 0x04, 0xd5, 0x00, 0xf8, + 0x74, 0x42, 0xf2, 0x0c, 0x1b, 0x10, 0xc1, 0x43, 0x00, 0x3e, 0x9d, 0xa0, 0x38, 0xc3, 0x06, 0x44, + 0x00, 0x0d, 0x80, 0x4f, 0x27, 0x2c, 0xdf, 0xb0, 0x01, 0x11, 0x3c, 0x03, 0xe0, 0xd3, 0x09, 0xcc, + 0x37, 0x6c, 0x40, 0x04, 0x10, 0x01, 0xf8, 0x74, 0x42, 0xf3, 0x0c, 0x1b, 0x10, 0x41, 0x34, 0x00, + 0xc4, 0x01, 0xca, 0x88, 0x81, 0x41, 0x07, 0x20, 0x08, 0x06, 0x05, 0x3b, 0x04, 0x0f, 0x09, 0x89, + 0x41, 0x45, 0x62, 0xf8, 0x74, 0x42, 0x24, 0xd1, 0x62, 0x28, 0xc3, 0x06, 0x84, 0x47, 0x10, 0x80, + 0x4f, 0x27, 0x78, 0x70, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x74, 0xc2, 0x07, 0x07, 0x44, + 0x2c, 0xc6, 0xb0, 0x01, 0x21, 0x04, 0x04, 0xe0, 0xd3, 0x09, 0x61, 0x10, 0x07, 0xc3, 0x06, 0x44, + 0x50, 0x10, 0xc0, 0x88, 0x81, 0x31, 0x07, 0x20, 0x08, 0x06, 0x04, 0x68, 0x84, 0xc1, 0xb5, 0x01, + 0x31, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xb0, 0x83, 0x2d, 0x03, 0x11, + 0xd8, 0xc1, 0x96, 0x01, 0x09, 0xec, 0x60, 0xcb, 0xb0, 0x04, 0x78, 0xb0, 0x65, 0x68, 0x02, 0x54, + 0xd8, 0x32, 0x3c, 0x01, 0x2a, 0x6c, 0x19, 0xa2, 0x00, 0x15, 0xb6, 0x0c, 0x53, 0xa0, 0x0b, 0x5b, + 0x86, 0x2a, 0xd8, 0x85, 0x2d, 0xc3, 0x15, 0xa0, 0xc2, 0x96, 0x01, 0x0b, 0x7a, 0x61, 0xcb, 0xa0, + 0x05, 0xa8, 0xb0, 0x65, 0xd8, 0x02, 0x5d, 0xd8, 0x32, 0x74, 0x81, 0x2f, 0x6c, 0x19, 0xbc, 0x00, + 0x15, 0xb6, 0x0c, 0x60, 0x10, 0xa0, 0xc2, 0x96, 0x41, 0x0c, 0x02, 0x3c, 0xd8, 0x32, 0x8c, 0x41, + 0x80, 0x07, 0x5b, 0x86, 0x32, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x14, 0x52, 0x41, 0x51, 0x62, 0x04, 0x80, 0x06, 0x85, 0x05, + 0x33, 0x11, 0xa1, 0x90, 0xa0, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x73, 0x00, 0x82, 0x60, 0x40, 0x9c, + 0x85, 0x14, 0xf8, 0x74, 0x82, 0x82, 0xd1, 0x52, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb5, 0x32, 0xc7, 0x10, 0x28, 0x89, 0x4f, 0x27, 0x14, 0xdc, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x2c, 0x3e, 0x9d, 0x70, 0x6c, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x4f, 0x27, 0x20, + 0xcc, 0xb0, 0x01, 0x11, 0x44, 0x03, 0xe0, 0xd3, 0x09, 0x09, 0x33, 0x6c, 0x40, 0x04, 0x0c, 0x01, + 0xf8, 0x74, 0x82, 0xb2, 0x0c, 0x1b, 0x10, 0x41, 0x33, 0x00, 0x54, 0x01, 0xca, 0x88, 0x81, 0x41, + 0x07, 0x20, 0x08, 0x06, 0xc5, 0x38, 0x04, 0x0c, 0x15, 0x86, 0x32, 0x1c, 0x11, 0x4c, 0x84, 0x7f, + 0x64, 0xa0, 0x8b, 0x61, 0x03, 0xc2, 0x0a, 0x02, 0x60, 0xc4, 0xc0, 0x98, 0x03, 0x10, 0x04, 0x03, + 0x82, 0x2e, 0xc0, 0xe0, 0xd9, 0x80, 0x18, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0xb0, + 0x83, 0x2d, 0x03, 0x11, 0xd8, 0xc1, 0x96, 0x01, 0x09, 0xec, 0x60, 0xcb, 0xb0, 0x04, 0x78, 0xb0, + 0x65, 0x68, 0x02, 0x54, 0xd8, 0x32, 0x3c, 0x01, 0x2a, 0x6c, 0x19, 0xa2, 0x00, 0x15, 0xb6, 0x0c, + 0x52, 0xd0, 0x0b, 0x5b, 0x06, 0x2a, 0xf8, 0x85, 0x2d, 0xc3, 0x15, 0x84, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x64, 0x18, 0x01, 0xa0, 0x41, 0x19, 0x50, 0x62, + 0x04, 0x60, 0x34, 0xa0, 0x0c, 0x88, 0x37, 0x07, 0x21, 0x16, 0x29, 0x31, 0x16, 0x64, 0x31, 0x16, + 0x01, 0x04, 0xc4, 0x40, 0x86, 0xd1, 0x00, 0xaa, 0xcd, 0x41, 0x9c, 0xc5, 0x59, 0x9c, 0x05, 0x58, + 0x50, 0xa2, 0x14, 0x88, 0x37, 0x07, 0x91, 0x16, 0x63, 0x31, 0x16, 0x64, 0x31, 0x07, 0x21, 0x16, + 0x69, 0x31, 0x16, 0x64, 0x31, 0x16, 0x01, 0x04, 0xc5, 0x40, 0x89, 0x62, 0x20, 0xde, 0x1c, 0x44, + 0x5b, 0x8c, 0xc5, 0x58, 0x90, 0xc5, 0x1c, 0x84, 0x58, 0xb4, 0xc5, 0x58, 0x90, 0xc5, 0x58, 0x04, + 0x10, 0x18, 0x03, 0x19, 0xc6, 0x08, 0x40, 0x10, 0x04, 0xf1, 0x8f, 0x6a, 0x73, 0x10, 0x67, 0x71, + 0x16, 0x67, 0x11, 0x17, 0xc4, 0x9b, 0x83, 0x60, 0x89, 0xb1, 0x18, 0x0b, 0xb2, 0x98, 0x83, 0x10, + 0x0b, 0x96, 0x18, 0x0b, 0xb2, 0x18, 0x8b, 0x00, 0x82, 0x63, 0x00, 0x00, 0x3e, 0x9d, 0x90, 0x9d, + 0x01, 0x05, 0x00, 0x92, 0xda, 0x20, 0x7c, 0x46, 0x41, 0x08, 0x28, 0xa8, 0x15, 0x9f, 0x4e, 0x10, + 0xd6, 0x80, 0x82, 0x5a, 0xf1, 0xe9, 0x04, 0x42, 0x0d, 0x28, 0xa8, 0x95, 0x39, 0x86, 0xe2, 0xf3, + 0x06, 0x19, 0x02, 0x62, 0x1b, 0x64, 0x08, 0x86, 0x6d, 0xd8, 0x80, 0x18, 0x83, 0xa0, 0x00, 0x06, + 0x19, 0x34, 0x04, 0x1b, 0x64, 0x08, 0x0e, 0x6c, 0x90, 0x21, 0x30, 0x30, 0x9f, 0x4e, 0x30, 0x83, + 0x3a, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x3c, 0x06, 0x1b, 0x64, 0x08, 0x16, 0x6c, + 0x90, 0x21, 0x50, 0x30, 0x9f, 0x4e, 0x50, 0x03, 0x3b, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, + 0x19, 0x30, 0xe8, 0x1a, 0x64, 0x08, 0x9e, 0x6b, 0x90, 0x21, 0x70, 0x2e, 0x9f, 0x4e, 0x70, 0x83, + 0x3b, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x36, 0x20, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x5b, 0x86, 0x20, 0x10, 0x87, 0x2d, 0x03, 0x11, 0xd8, 0xc1, 0x96, 0xc1, 0x08, 0xec, 0x60, 0xcb, + 0x80, 0x04, 0x76, 0xb0, 0x65, 0x60, 0x02, 0x3b, 0xd8, 0x32, 0x44, 0x81, 0x1d, 0x6c, 0x19, 0xac, + 0xc0, 0x0e, 0xb6, 0x0c, 0x5b, 0x60, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x81, 0x4f, 0x27, 0x0c, 0x11, 0x05, 0x00, 0x92, 0xc4, 0x20, + 0x7c, 0xc6, 0x41, 0x08, 0x34, 0x0a, 0x12, 0x63, 0xd8, 0x80, 0x30, 0x82, 0x01, 0xd8, 0x80, 0x18, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x10, 0x87, 0x2d, 0x03, 0x11, 0x90, 0xc3, 0x96, 0xa1, + 0x08, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x81, 0x4f, 0x27, 0x0c, 0x11, 0x05, 0x00, 0x92, 0xc4, 0x20, 0x7c, 0xc6, 0x41, 0x08, + 0x36, 0x0a, 0x74, 0x25, 0x83, 0x44, 0x0c, 0x1b, 0x10, 0x47, 0x30, 0x00, 0x1b, 0x10, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x10, 0x87, 0x2d, 0x03, 0x11, 0x94, 0xc3, 0x96, 0xc1, + 0x08, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x94, 0x18, 0x01, 0x18, + 0x0d, 0x20, 0xde, 0x1c, 0x04, 0x58, 0xa4, 0x44, 0x58, 0x84, 0xc5, 0x1c, 0x04, 0x58, 0xa0, 0x44, + 0x4a, 0x84, 0xc5, 0x58, 0x04, 0x10, 0x08, 0x04, 0x25, 0x4a, 0x81, 0x78, 0x73, 0x10, 0x28, 0x51, + 0x16, 0x61, 0x11, 0x16, 0x73, 0x10, 0x60, 0x81, 0x12, 0x65, 0x11, 0x16, 0x63, 0x11, 0x40, 0x20, + 0x14, 0x94, 0x28, 0x06, 0xe2, 0xcd, 0x41, 0xac, 0x44, 0x5a, 0x84, 0x45, 0x58, 0xcc, 0x41, 0x80, + 0x05, 0x4a, 0xa4, 0x45, 0x58, 0x8c, 0x45, 0x00, 0x81, 0x60, 0x90, 0xae, 0x04, 0x00, 0x00, 0x00, + 0x3e, 0x9d, 0x10, 0x7d, 0x14, 0x00, 0x48, 0x4a, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xa0, 0xa9, 0x56, + 0x7c, 0x3a, 0x81, 0x1a, 0x03, 0x0a, 0x6a, 0xc5, 0xa7, 0x13, 0x2c, 0x31, 0xa0, 0xa0, 0x56, 0x7c, + 0x3a, 0x01, 0x0b, 0x03, 0x0a, 0x6a, 0x65, 0x90, 0xe1, 0x28, 0xae, 0x41, 0x86, 0x80, 0xb8, 0x06, + 0x19, 0x82, 0xe1, 0x1a, 0x36, 0x20, 0x96, 0xa0, 0x00, 0x06, 0x19, 0x14, 0xc4, 0x1a, 0x64, 0x08, + 0x0e, 0x6b, 0x90, 0x21, 0x30, 0x2c, 0x9f, 0x4e, 0x70, 0xde, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x02, + 0x18, 0x64, 0x70, 0x18, 0x6b, 0x90, 0x21, 0x58, 0xac, 0x41, 0x86, 0x40, 0xb1, 0x7c, 0x3a, 0x41, + 0x82, 0x83, 0x61, 0x03, 0x22, 0x10, 0x0a, 0xc0, 0xa7, 0x13, 0x26, 0x35, 0x18, 0x36, 0x20, 0x02, + 0x4c, 0x00, 0x36, 0x20, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x10, + 0x87, 0x2d, 0x83, 0x12, 0xd8, 0xc1, 0x96, 0xc1, 0x09, 0xec, 0x60, 0xcb, 0x30, 0x05, 0x76, 0xb0, + 0x65, 0xc0, 0x02, 0x3b, 0xd8, 0x32, 0x68, 0x81, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x01, 0x00, 0x3e, 0x9d, 0x40, 0x48, 0x14, 0x00, 0x48, 0x16, + 0x83, 0xf0, 0x19, 0x05, 0x21, 0x48, 0x43, 0x07, 0x3e, 0x9d, 0x20, 0x40, 0xc3, 0x06, 0x44, 0x20, + 0x14, 0x80, 0x4f, 0x27, 0x0c, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x10, 0x87, 0x2d, 0x83, 0x11, 0x94, 0xc3, 0x96, 0x01, + 0x09, 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x2b, 0x01, 0x00, + 0x3e, 0x9d, 0x40, 0x48, 0x14, 0x00, 0x48, 0x16, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xf0, 0xe9, 0x84, + 0x40, 0x19, 0x36, 0x20, 0x82, 0x63, 0x00, 0x7c, 0x3a, 0x41, 0x60, 0x86, 0x0d, 0x88, 0xe0, 0x10, + 0x80, 0x0d, 0x88, 0x01, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x10, 0x87, 0x2d, 0x43, 0x11, + 0x90, 0xc3, 0x96, 0xe1, 0x08, 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xa4, 0x2b, 0x01, 0x00, 0xf1, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1b, 0x06, 0x72, 0x08, + 0x07, 0x36, 0x00, 0x00, 0x29, 0xe8, 0xc2, 0xa7, 0x13, 0x8a, 0x89, 0x02, 0x00, 0x49, 0x63, 0x10, + 0x3e, 0xa3, 0x20, 0x04, 0x3e, 0x9d, 0x10, 0x34, 0xc3, 0x06, 0x44, 0x60, 0x04, 0x80, 0x4f, 0x27, + 0x08, 0xcd, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x01, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x5b, 0x06, 0x21, 0x10, 0x87, 0x2d, 0x83, 0x11, 0x9c, 0xc3, 0x96, 0x01, 0x09, 0xcc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, + 0x89, 0x9d, 0x3d, 0x38, 0x86, 0x00, 0x00, 0x84, 0x60, 0xc8, 0xc0, 0xb0, 0x1c, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, + 0x20, 0x04, 0x42, 0x30, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, + 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, + 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0xcd, 0x21, 0xb1, + 0xe3, 0x06, 0x49, 0x11, 0x08, 0x80, 0x10, 0x08, 0xc1, 0x30, 0x9a, 0x10, 0x04, 0xa3, 0x09, 0x02, + 0x90, 0x81, 0x61, 0xa7, 0x23, 0x90, 0x60, 0x40, 0x38, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0b, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0c, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0e, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0d, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xd4, 0x13, 0x38, 0xc0, 0x3e, 0x81, + 0x04, 0x93, 0x14, 0x58, 0x10, 0x4b, 0x81, 0x06, 0xf2, 0x14, 0x78, 0x60, 0x59, 0x81, 0x08, 0x82, + 0x16, 0x98, 0x90, 0x69, 0x81, 0x0a, 0xc8, 0x16, 0xb8, 0xe0, 0x78, 0x81, 0x0c, 0xa7, 0x17, 0xd8, + 0x60, 0x7c, 0x81, 0x0e, 0xee, 0x17, 0xf8, 0x40, 0x89, 0x81, 0x10, 0xd5, 0x18, 0x18, 0xe1, 0x9b, + 0x81, 0x12, 0xd4, 0x19, 0x38, 0xb1, 0x9f, 0x81, 0x14, 0xe1, 0x1a, 0x58, 0xa1, 0xb8, 0x81, 0x16, + 0xf7, 0x1b, 0x78, 0x11, 0xd9, 0x81, 0x19, 0xa9, 0x1d, 0xb8, 0x11, 0xdc, 0x81, 0x1d, 0xd9, 0x1d, + 0xf8, 0xe1, 0xde, 0x81, 0x21, 0x83, 0x1e, 0x38, 0x82, 0xe9, 0x81, 0x25, 0xb4, 0x1e, 0x78, 0x02, + 0xed, 0x81, 0x29, 0xec, 0x1e, 0xb8, 0x52, 0xf8, 0x81, 0x2d, 0x9c, 0x1f, 0xf8, 0x32, 0xfb, 0x81, + 0x30, 0xc8, 0x1f, 0x18, 0x23, 0xfe, 0x81, 0x33, 0x85, 0x20, 0x58, 0x93, 0x0a, 0x82, 0x37, 0xd7, + 0x20, 0x98, 0x53, 0x18, 0x82, 0x3b, 0xaa, 0x21, 0xd8, 0x03, 0x1d, 0x82, 0x3f, 0x87, 0x22, 0x18, + 0xe4, 0x2b, 0x82, 0x43, 0xd7, 0x22, 0x58, 0x74, 0x2f, 0x82, 0x47, 0x90, 0x23, 0x98, 0x14, 0x3b, + 0x82, 0x4a, 0xd5, 0x23, 0xb8, 0x94, 0x48, 0x82, 0x4c, 0xa2, 0x24, 0xd8, 0xb4, 0x4c, 0x82, 0x4f, + 0xa3, 0x25, 0x18, 0xd5, 0x5d, 0x82, 0x52, 0xb7, 0x26, 0x38, 0x15, 0x6f, 0x82, 0x54, 0xc3, 0x27, + 0x58, 0x25, 0x7d, 0x82, 0x56, 0xe2, 0x27, 0x78, 0x45, 0x8a, 0x82, 0x58, 0xba, 0x28, 0x98, 0xf5, + 0x8c, 0x82, 0x5a, 0xe9, 0x28, 0xb8, 0xf5, 0x8e, 0x82, 0x5c, 0xf5, 0x28, 0xd8, 0xb5, 0x8f, 0x82, + 0x5e, 0x81, 0x29, 0xf8, 0x85, 0x98, 0x82, 0x60, 0x8f, 0x29, 0x18, 0x66, 0x99, 0x82, 0x62, 0x9d, + 0x29, 0x38, 0x46, 0x9a, 0x82, 0x64, 0xaf, 0x29, 0x58, 0x56, 0x9b, 0x82, 0x66, 0xbb, 0x29, 0x78, + 0x16, 0x9c, 0x82, 0x68, 0xc7, 0x29, 0x98, 0xd6, 0x9c, 0x82, 0x6a, 0xd3, 0x29, 0xb8, 0x96, 0x9d, + 0x82, 0x6c, 0xdf, 0x29, 0xd8, 0x56, 0x9e, 0x82, 0x6e, 0xeb, 0x29, 0xf8, 0x16, 0x9f, 0x82, 0x70, + 0xf7, 0x29, 0x18, 0xd7, 0x9f, 0x82, 0x72, 0x83, 0x2a, 0x38, 0x97, 0xa8, 0x82, 0x74, 0x8f, 0x2a, + 0x58, 0x57, 0xa9, 0x82, 0x76, 0x9b, 0x2a, 0x78, 0x17, 0xaa, 0x82, 0x78, 0xa7, 0x2a, 0x98, 0xd7, + 0xaa, 0x82, 0x7a, 0xb3, 0x2a, 0xb8, 0x97, 0xab, 0x82, 0x7c, 0xbf, 0x2a, 0xd8, 0x57, 0xac, 0x82, + 0x7e, 0xcb, 0x2a, 0xf8, 0x17, 0xad, 0x82, 0x80, 0x01, 0xd7, 0x2a, 0x18, 0x18, 0xd0, 0xad, 0x82, + 0x82, 0x01, 0xe3, 0x2a, 0x38, 0x18, 0x90, 0xae, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x0c, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00, 0x12, 0x03, 0x94, 0x38, 0x3a, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x18, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x84, 0x0f, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x19, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x34, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x4f, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6a, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x8e, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x85, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa0, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xba, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd4, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xee, 0x10, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0c, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x2a, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x48, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x5c, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x66, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x84, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x94, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xa2, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xbe, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xca, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xda, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf6, 0x11, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xfe, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x0e, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x26, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x2a, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x3e, 0x12, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x58, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x58, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x8e, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x73, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc6, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xc6, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x8f, 0x12, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xac, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x3a, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x3a, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xc8, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x72, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x72, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xe3, 0x12, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xa8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xfd, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xde, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x18, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x16, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x34, 0x13, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x50, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x51, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8a, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x8a, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x6d, 0x13, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa9, 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc2, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xc2, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x88, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9e, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xf4, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb4, 0x13, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x27, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x27, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xd5, 0x13, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x70, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xfc, 0x13, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x9a, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xbe, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xbe, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x22, 0x14, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xe7, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x11, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x11, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x4e, 0x14, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5f, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x5f, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x6f, 0x14, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xa8, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x96, 0x14, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xd2, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf6, 0x06, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xf6, 0x06, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xbc, 0x14, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x49, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0xe8, 0x14, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x95, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x95, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x07, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd4, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xd4, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x26, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf6, 0x07, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x19, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x19, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x4b, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x64, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x64, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x70, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x8c, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xaf, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xba, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xd2, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd9, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xef, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf8, 0x15, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x2c, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x1a, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4a, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x66, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, + 0x38, 0x16, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x53, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x99, 0x09, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x6a, 0x16, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xae, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8a, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xa8, 0x16, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xe8, 0x09, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xce, 0x16, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x0c, 0x0a, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf2, 0x16, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2e, 0x0a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1c, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x56, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x3e, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x60, 0x17, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x96, 0x0a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7b, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x97, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc9, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb3, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xe3, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd0, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xfe, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xed, 0x17, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x19, 0x0b, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x10, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3a, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x34, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x58, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x7e, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7d, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa2, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc4, 0x0b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xbe, 0x18, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xde, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdb, 0x18, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xf9, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf8, 0x18, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x14, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x16, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x30, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x34, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x50, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x66, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x6d, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x81, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8a, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x9c, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xa8, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc6, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xd4, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xe2, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xee, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x09, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x1c, 0x1a, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x3a, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x40, 0x0d, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x55, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x59, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x71, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x73, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x8d, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xaa, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xa8, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc6, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe3, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xdd, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1e, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x14, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x3a, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x57, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x49, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x74, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x64, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x92, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x80, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb0, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x9c, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xcc, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xb6, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xe9, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xec, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x24, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x24, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x24, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x3e, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x3e, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, + 0x14, 0x07, 0x00, 0x00, 0x12, 0x03, 0x94, 0xa2, 0x78, 0x00, 0x00, 0x00, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2e, 0x70, 0x30, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, + 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x30, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, + 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, + 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, + 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, + 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, + 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, + 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x73, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, + 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, + 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, + 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, + 0x74, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, + 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, + 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, 0x32, 0x6c, 0x6c, 0x76, + 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x2e, 0x66, 0x61, 0x64, + 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, + 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x78, 0x38, 0x36, 0x5f, + 0x36, 0x34, 0x2d, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, + 0x2f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x2f, 0x43, 0x6c, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x4c, 0x75, 0x69, 0x73, 0x61, 0x43, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x73, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2f, 0x66, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2f, 0x66, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x70, + 0x69, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x6e, 0x75, 0x78, + 0x2e, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x2e, 0x6c, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, + 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, + 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, + 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, + 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x69, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, + 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, + 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, + 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, + 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, + 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, + 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.windows.arm64.inl b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.windows.arm64.inl new file mode 100644 index 000000000..091e021ac --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.windows.arm64.inl @@ -0,0 +1,1840 @@ + +static const unsigned char luisa_fallback_backend_device_builtin_module[29380] = { + 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, + 0x4a, 0x59, 0xbe, 0x66, 0xdd, 0xfb, 0xb5, 0x7f, 0x0b, 0x51, 0x80, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x21, 0x0c, 0x00, 0x00, 0x39, 0x12, 0x00, 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x1c, 0x45, 0x02, + 0x42, 0x92, 0x0b, 0x42, 0xe4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x72, 0x88, + 0x48, 0x70, 0xc4, 0x21, 0x23, 0x44, 0x12, 0x87, 0x8c, 0x10, 0x41, 0x92, 0x02, 0x64, 0xc8, 0x08, + 0xb1, 0x14, 0x20, 0x43, 0x46, 0x88, 0x20, 0xc9, 0x01, 0x32, 0x72, 0x84, 0x58, 0x0e, 0x90, 0x91, + 0x23, 0x44, 0x90, 0xa1, 0x82, 0xa2, 0x02, 0x19, 0xc3, 0x07, 0xcb, 0x15, 0x19, 0x72, 0x8c, 0x8c, + 0x25, 0x10, 0x1d, 0x3a, 0x74, 0xc8, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, + 0x22, 0x66, 0x04, 0x10, 0xb2, 0x42, 0x82, 0xc9, 0x11, 0x52, 0x42, 0x82, 0xc9, 0x91, 0x71, 0xc2, + 0x50, 0x48, 0x0a, 0x09, 0x26, 0x47, 0xc6, 0x05, 0x42, 0x72, 0x26, 0x08, 0x52, 0x81, 0x46, 0x00, + 0x0a, 0x11, 0x00, 0x00, 0x00, 0x73, 0x04, 0xa0, 0x50, 0x86, 0xc0, 0x00, 0x50, 0x86, 0x00, 0x00, + 0x30, 0x03, 0x50, 0x04, 0x03, 0x60, 0x8e, 0x00, 0x24, 0xe6, 0x08, 0xc0, 0xa0, 0x14, 0x08, 0xc0, + 0x20, 0x91, 0xb8, 0x46, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x62, 0x71, 0x80, 0x09, 0x47, 0x84, 0xc1, + 0x60, 0x30, 0x94, 0x62, 0x01, 0x18, 0x24, 0x12, 0x49, 0x60, 0x28, 0x46, 0x00, 0x30, 0x48, 0x24, + 0x1a, 0xc5, 0x08, 0x00, 0x06, 0x89, 0x04, 0xa2, 0x18, 0x08, 0xc0, 0x20, 0x91, 0x48, 0x14, 0x63, + 0x01, 0x18, 0x24, 0x12, 0x89, 0x72, 0x04, 0x00, 0x83, 0x44, 0x22, 0xd1, 0x28, 0x47, 0x00, 0x30, + 0x48, 0x24, 0x12, 0x88, 0x52, 0x04, 0x00, 0x09, 0x00, 0xa0, 0x14, 0x0b, 0x40, 0xc2, 0x60, 0x28, + 0x46, 0x00, 0x90, 0x00, 0x18, 0x00, 0xc5, 0x58, 0x00, 0x12, 0x06, 0x83, 0xa1, 0x1c, 0x01, 0x40, + 0x02, 0x00, 0x00, 0x00, 0x4a, 0xb2, 0x00, 0x24, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x28, 0x48, 0x00, + 0x90, 0x00, 0x00, 0x00, 0x06, 0x40, 0x51, 0x16, 0x80, 0x84, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x86, + 0x72, 0x2c, 0x00, 0x09, 0x83, 0xc1, 0x60, 0x28, 0xcc, 0x02, 0x90, 0x30, 0x18, 0x0c, 0x06, 0x83, + 0xc1, 0x60, 0x30, 0x94, 0x66, 0x01, 0x48, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, + 0x85, 0x58, 0x00, 0x12, 0x89, 0x52, 0x2c, 0x00, 0x89, 0x44, 0xa2, 0x18, 0x01, 0x40, 0x02, 0x90, + 0x00, 0x14, 0x63, 0x01, 0x48, 0x24, 0x12, 0x89, 0x52, 0x04, 0x00, 0x89, 0x04, 0xa0, 0x10, 0x01, + 0x40, 0x02, 0x50, 0x8c, 0x00, 0x00, 0x60, 0x48, 0x00, 0x4a, 0x11, 0x00, 0x00, 0x12, 0x80, 0x42, + 0x04, 0x00, 0x89, 0xc4, 0x1c, 0x41, 0x50, 0x88, 0x00, 0x20, 0x81, 0x2a, 0x43, 0x02, 0x90, 0x28, + 0xc3, 0x00, 0x30, 0x28, 0x83, 0x01, 0x60, 0x28, 0x44, 0x02, 0x90, 0x48, 0x14, 0x62, 0x00, 0x18, + 0x0c, 0x0a, 0x61, 0x00, 0x18, 0x0c, 0x65, 0x48, 0x24, 0x12, 0x73, 0x04, 0x50, 0x19, 0x62, 0xb1, + 0xd8, 0x30, 0x02, 0x61, 0x94, 0xc1, 0x60, 0x98, 0x0d, 0x23, 0x08, 0x49, 0x19, 0x6a, 0xb5, 0xda, + 0x30, 0x82, 0x10, 0x07, 0x65, 0xb8, 0xdd, 0x6e, 0x03, 0x01, 0xc3, 0x08, 0x82, 0x31, 0x47, 0x80, + 0x0c, 0x23, 0x10, 0xc9, 0x30, 0xc2, 0x60, 0x0c, 0x23, 0x0c, 0xc9, 0x4d, 0xd2, 0x14, 0x51, 0xc2, + 0xe4, 0x6f, 0x48, 0x33, 0x2c, 0x84, 0x24, 0xb1, 0x8b, 0x33, 0x21, 0x02, 0x30, 0x00, 0x00, 0x6e, + 0x91, 0xa6, 0x88, 0x12, 0x26, 0x1f, 0x68, 0x9c, 0x06, 0x11, 0x86, 0x44, 0x22, 0x71, 0x90, 0x34, + 0x45, 0x94, 0x30, 0xf9, 0x1e, 0x13, 0x44, 0x04, 0xb1, 0x02, 0x18, 0x1a, 0x66, 0x33, 0x60, 0x06, + 0x24, 0x0e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xdf, 0x63, 0x82, 0x88, 0x20, 0x42, 0x64, 0x42, 0x88, + 0xc1, 0x60, 0x30, 0x18, 0x12, 0x09, 0xe1, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0x7b, 0x4c, 0x10, + 0x11, 0xc4, 0x0a, 0x60, 0x21, 0x32, 0x21, 0x21, 0x38, 0x4c, 0x06, 0xc3, 0x51, 0xd2, 0x14, 0x51, + 0xc2, 0xe4, 0x6b, 0x82, 0x40, 0x2c, 0x62, 0x23, 0x4d, 0x40, 0x23, 0x10, 0xc8, 0x28, 0xee, 0x76, + 0xbb, 0x04, 0xc0, 0x08, 0x09, 0x94, 0x11, 0x06, 0x28, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, + 0xcb, 0x02, 0x00, 0x00, 0x1b, 0x48, 0x24, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, + 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x86, 0x20, 0x0c, + 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, + 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, + 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, + 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, + 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, + 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, + 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, + 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, + 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, + 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, + 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, + 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, + 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, + 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, + 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x73, 0x28, 0x07, 0x77, 0x28, + 0x07, 0x79, 0x48, 0x87, 0x71, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, + 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00, 0xd6, 0xc0, + 0x1c, 0xe0, 0xa1, 0x0d, 0xc2, 0x41, 0x1e, 0xda, 0xc1, 0x1e, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1d, + 0xca, 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0x20, 0x1c, 0xd8, 0xa0, 0x0d, 0xcc, + 0xa1, 0x1d, 0xec, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, + 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, + 0x07, 0x60, 0x03, 0x22, 0x04, 0xc0, 0x02, 0x90, 0x02, 0x50, 0x6d, 0x40, 0x06, 0x01, 0x58, 0x00, + 0x52, 0x00, 0xaa, 0x0d, 0x08, 0x31, 0x00, 0x0b, 0x40, 0x0a, 0x00, 0x1d, 0x6c, 0x78, 0x8a, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x80, 0x53, 0x00, 0xfc, 0x00, 0xf8, 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, + 0x85, 0x61, 0x03, 0x61, 0x04, 0x00, 0x1f, 0x6c, 0x20, 0x0e, 0x01, 0x58, 0x36, 0x20, 0x88, 0x00, + 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0x81, 0x44, 0x92, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x01, + 0x30, 0x05, 0xc0, 0x0f, 0x00, 0x38, 0x00, 0xfe, 0x00, 0x90, 0x80, 0x3e, 0x08, 0x6c, 0x21, 0x08, + 0xc2, 0x40, 0x20, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, 0xc0, 0x1c, 0xea, + 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, + 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, + 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, + 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, 0x61, + 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, + 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, 0x87, + 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, + 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, + 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, 0xd2, 0xc1, 0x1d, 0xce, + 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, + 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7a, 0x28, + 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, 0x07, 0x73, 0x28, 0x07, + 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, 0x00, 0x82, 0x1e, 0xc2, 0x41, + 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, 0xc6, 0x01, 0x1e, 0xea, 0x01, 0x38, 0x87, 0x72, 0x70, + 0x87, 0x72, 0x90, 0x87, 0x74, 0x18, 0x07, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, + 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, + 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x20, 0x1c, 0xe4, 0xa1, 0x1d, 0xec, 0x01, 0x0f, 0xd8, 0x60, 0x0d, + 0xdc, 0xa1, 0x1c, 0xde, 0xc1, 0x1d, 0xd8, 0x60, 0x0d, 0xec, 0x01, 0x0f, 0xc2, 0x81, 0x0d, 0xda, + 0xc0, 0x1c, 0xda, 0xc1, 0x1e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, + 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, + 0x87, 0x72, 0x00, 0x36, 0x14, 0x0a, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0xc8, 0x8f, 0xe5, 0xff, 0xff, + 0xff, 0xff, 0x07, 0x40, 0x00, 0x4c, 0x01, 0x90, 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, + 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, + 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, + 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, + 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, + 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, + 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, + 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, + 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, + 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, + 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, + 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, + 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x83, + 0x71, 0x80, 0x87, 0x7a, 0x00, 0xce, 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, 0xe4, 0x21, 0x1d, 0xc6, 0x01, + 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, + 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x03, 0x73, 0x80, 0x87, 0x36, 0x08, 0x07, + 0x79, 0x68, 0x07, 0x7b, 0xc0, 0x03, 0x36, 0x58, 0x03, 0x77, 0x28, 0x87, 0x77, 0x70, 0x07, 0x36, + 0x58, 0x03, 0x7b, 0xc0, 0x83, 0x70, 0x60, 0x83, 0x36, 0x30, 0x87, 0x76, 0xb0, 0x07, 0x80, 0xa8, + 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, + 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0x0d, 0xf2, 0xc1, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x48, 0x44, 0x38, 0xc0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, 0x43, + 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, + 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, + 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, + 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, + 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, + 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, + 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, + 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, + 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, + 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, + 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, 0xe1, 0x30, 0x0e, 0xeb, 0xd0, 0x06, 0xf0, 0x20, 0x0f, + 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, + 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, + 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, 0x03, 0x3d, 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, + 0xe7, 0x50, 0x0e, 0xee, 0x50, 0x0e, 0xf2, 0x90, 0x0e, 0xe3, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, + 0x70, 0x0e, 0xe5, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xe5, 0x10, 0x0e, 0xf4, 0x50, 0x0f, 0xf2, 0x50, + 0x0e, 0xf3, 0x00, 0xac, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0x84, 0x83, 0x3c, 0xb4, 0x83, 0x3d, 0xe0, + 0x01, 0x1b, 0xac, 0x81, 0x3b, 0x94, 0xc3, 0x3b, 0xb8, 0x03, 0x1b, 0xac, 0x81, 0x3d, 0xe0, 0x41, + 0x38, 0xb0, 0x41, 0x1b, 0x98, 0x43, 0x3b, 0xd8, 0x03, 0x40, 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, + 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, + 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0x06, 0xa2, 0x09, 0x00, 0x52, 0xd8, 0x40, 0x38, 0x02, + 0x40, 0x0a, 0x1b, 0x88, 0x67, 0x00, 0x48, 0x61, 0x03, 0x01, 0x11, 0x00, 0x29, 0x6c, 0x40, 0xa2, + 0x01, 0x58, 0x00, 0x52, 0x00, 0xaa, 0x0d, 0x84, 0x54, 0x00, 0xa4, 0xb0, 0x01, 0x99, 0x08, 0x60, + 0x01, 0x48, 0x01, 0xa0, 0x83, 0x0d, 0x07, 0x35, 0x00, 0xa4, 0x10, 0xdc, 0xc2, 0x09, 0x6d, 0x38, + 0x2a, 0x02, 0x20, 0x85, 0xe0, 0x16, 0x4e, 0x68, 0x03, 0x62, 0x15, 0xc0, 0x02, 0x90, 0x02, 0x40, + 0x07, 0x1b, 0x8e, 0xab, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x80, 0x60, 0x04, 0xb0, 0x00, + 0xa4, 0x00, 0x54, 0x1b, 0x90, 0xac, 0x00, 0x16, 0x80, 0x14, 0x80, 0x6a, 0x03, 0xa2, 0x19, 0xc0, + 0x02, 0x90, 0x02, 0x40, 0x07, 0x1b, 0x8e, 0xcd, 0x00, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x70, + 0x70, 0x07, 0x40, 0x0a, 0xc1, 0x2d, 0x9c, 0xd0, 0x86, 0xa3, 0x43, 0x00, 0x52, 0x08, 0x6e, 0xe1, + 0x84, 0x36, 0x20, 0xde, 0x01, 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0xe1, 0xf8, 0x12, 0x80, 0x14, + 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x07, 0x18, 0x28, 0x00, 0x29, 0x04, 0xb7, 0x70, 0x42, 0x1b, 0x8e, + 0x30, 0x58, 0x00, 0x52, 0x08, 0x6e, 0xe1, 0x84, 0x36, 0x1c, 0x62, 0xc0, 0x00, 0xa4, 0x10, 0xdc, + 0xc2, 0x09, 0x6d, 0x20, 0x91, 0x31, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, 0x00, + 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, 0x09, 0xe8, 0x83, 0xc0, 0x16, 0xa6, 0x20, 0x0c, 0x04, + 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, + 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, + 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, + 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, + 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, + 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, + 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, + 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, + 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, + 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, + 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, + 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, + 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, + 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, + 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x73, 0x28, 0x07, 0x77, 0x28, 0x07, + 0x79, 0x48, 0x87, 0x71, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, + 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00, 0xd6, 0xc0, 0x1c, + 0xe0, 0xa1, 0x0d, 0xc2, 0x41, 0x1e, 0xda, 0xc1, 0x1e, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1d, 0xca, + 0xe1, 0x1d, 0xdc, 0x81, 0x0d, 0xd6, 0xc0, 0x1e, 0xf0, 0x20, 0x1c, 0xd8, 0xa0, 0x0d, 0xcc, 0xa1, + 0x1d, 0xec, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, + 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, + 0x60, 0x03, 0x89, 0x90, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x00, 0x98, 0x02, 0xe0, 0x07, + 0x00, 0x1c, 0x00, 0x7f, 0x00, 0x48, 0x40, 0x1f, 0x04, 0xb6, 0x30, 0x06, 0x41, 0x18, 0x08, 0x44, + 0x38, 0xc0, 0x03, 0x3c, 0xc8, 0xc3, 0x3b, 0xe0, 0x43, 0x1b, 0x98, 0x43, 0x3d, 0xb8, 0xc3, 0x38, + 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, + 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xe9, 0xe0, 0x0e, 0xe6, 0x30, 0x0f, 0x6d, + 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, + 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x3b, 0x84, 0x83, 0x3b, 0xcc, 0x43, 0x1b, 0x98, + 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, + 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x30, 0x0f, 0xe9, 0x70, 0x0e, 0xee, 0x50, 0x0e, 0xe4, 0xd0, + 0x06, 0xfa, 0x50, 0x0e, 0xf2, 0xf0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, + 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, + 0x1b, 0xd0, 0x83, 0x3c, 0x84, 0x03, 0x3c, 0xc0, 0x43, 0x3a, 0xb8, 0xc3, 0x39, 0xb4, 0x41, 0x3b, + 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xf3, 0x40, 0x0f, + 0xe1, 0x30, 0x0e, 0xeb, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xef, 0x40, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, + 0xf0, 0x0e, 0xf2, 0xd0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x6d, 0x30, + 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x00, 0xe0, 0x01, 0x40, 0xd0, 0x43, 0x38, 0xc8, 0xc3, 0x39, 0x94, + 0x03, 0x3d, 0xb4, 0xc1, 0x38, 0xc0, 0x43, 0x3d, 0x00, 0xe7, 0x50, 0x0e, 0xee, 0x50, 0x0e, 0xf2, + 0x90, 0x0e, 0xe3, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xe5, 0x40, 0x0f, 0x6d, 0x60, + 0x0e, 0xe5, 0x10, 0x0e, 0xf4, 0x50, 0x0f, 0xf2, 0x50, 0x0e, 0xf3, 0x00, 0xac, 0x81, 0x39, 0xc0, + 0x43, 0x1b, 0x84, 0x83, 0x3c, 0xb4, 0x83, 0x3d, 0xe0, 0x01, 0x1b, 0xac, 0x81, 0x3b, 0x94, 0xc3, + 0x3b, 0xb8, 0x03, 0x1b, 0xac, 0x81, 0x3d, 0xe0, 0x41, 0x38, 0xb0, 0x41, 0x1b, 0x98, 0x43, 0x3b, + 0xd8, 0x03, 0x40, 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, 0xc0, + 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, + 0x06, 0x11, 0x29, 0x83, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x01, 0x30, 0x05, 0xc0, 0x0f, 0x00, + 0x38, 0x00, 0x24, 0xa0, 0x0f, 0x02, 0x5b, 0x18, 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, + 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, + 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, + 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, + 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, + 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, + 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, + 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, + 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, + 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, + 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, + 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, + 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x83, + 0x71, 0x80, 0x87, 0x7a, 0x00, 0xce, 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, 0xe4, 0x21, 0x1d, 0xc6, 0x01, + 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, + 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x03, 0x73, 0x80, 0x87, 0x36, 0x08, 0x07, + 0x79, 0x68, 0x07, 0x7b, 0xc0, 0x03, 0x36, 0x58, 0x03, 0x77, 0x28, 0x87, 0x77, 0x70, 0x07, 0x36, + 0x58, 0x03, 0x7b, 0xc0, 0x83, 0x70, 0x60, 0x83, 0x36, 0x30, 0x87, 0x76, 0xb0, 0x07, 0x80, 0xa8, + 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, + 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0x0d, 0x86, 0x19, 0x04, + 0xc0, 0x02, 0x90, 0xc2, 0x86, 0xe3, 0x0c, 0x04, 0x80, 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x11, + 0x1a, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x9c, 0x02, 0xe0, 0x07, 0xc0, 0x1f, 0x00, 0x12, 0x50, + 0x07, 0x40, 0x1f, 0x04, 0xb6, 0x00, 0x6c, 0x20, 0xd2, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, + 0xda, 0x40, 0xa8, 0x81, 0x00, 0x9c, 0xc1, 0x06, 0x63, 0x0d, 0x04, 0x80, 0x14, 0x80, 0x33, 0x00, + 0x49, 0x18, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, + 0x1c, 0x13, 0x86, 0x40, 0x40, 0x26, 0x0c, 0x89, 0x22, 0x4c, 0x20, 0x16, 0x61, 0x20, 0x26, 0x14, + 0x4c, 0xe3, 0x3c, 0xd0, 0x04, 0x62, 0x11, 0x86, 0x68, 0x82, 0xc1, 0x34, 0xce, 0x03, 0x49, 0x13, + 0x8a, 0x45, 0x70, 0xa2, 0x69, 0x42, 0xc1, 0x34, 0x0e, 0x55, 0x4d, 0x30, 0x16, 0xc1, 0x89, 0x2a, + 0x6b, 0x82, 0xc1, 0x34, 0x0e, 0x55, 0x5d, 0x13, 0x8e, 0x45, 0x70, 0x22, 0x2c, 0xd3, 0x26, 0x24, + 0x4c, 0xe3, 0x50, 0xd5, 0xb5, 0x71, 0xdd, 0x04, 0x64, 0x11, 0x9c, 0x08, 0xcb, 0x36, 0x6f, 0x82, + 0xc2, 0x34, 0x0e, 0x55, 0x5d, 0x1b, 0xd7, 0x7d, 0x13, 0x0e, 0xa6, 0x71, 0xa8, 0xea, 0xda, 0x26, + 0x30, 0x4c, 0xe3, 0x50, 0xd5, 0xb5, 0x71, 0xdd, 0x07, 0x06, 0x61, 0x30, 0xa1, 0x61, 0x1a, 0x87, + 0xaa, 0xae, 0x8d, 0xeb, 0x3e, 0x30, 0x08, 0x03, 0x31, 0x98, 0x40, 0x30, 0x8d, 0xf3, 0x4c, 0x30, + 0x16, 0xc1, 0x89, 0x20, 0x6b, 0x42, 0x31, 0x06, 0x82, 0xf3, 0x4c, 0x13, 0x88, 0x31, 0x10, 0x1c, + 0x62, 0x82, 0xb1, 0x08, 0x03, 0x05, 0x59, 0x13, 0x06, 0xa6, 0x71, 0x26, 0x14, 0x8b, 0x30, 0x3c, + 0xd3, 0x04, 0x82, 0x0c, 0x04, 0x27, 0x9a, 0x40, 0x90, 0x81, 0xe0, 0x3c, 0x13, 0x86, 0x32, 0x30, + 0x03, 0x67, 0x02, 0x51, 0x06, 0x8a, 0x19, 0x9c, 0xc1, 0x04, 0xa2, 0x0c, 0xcc, 0xc0, 0x79, 0x26, + 0x14, 0x65, 0xa0, 0x98, 0xc1, 0x19, 0x50, 0x13, 0x02, 0x34, 0x98, 0x50, 0xa4, 0x41, 0xe3, 0x3c, + 0xd0, 0x04, 0x23, 0x0d, 0x1a, 0xe7, 0x81, 0xa4, 0x09, 0x45, 0x1a, 0x34, 0x0e, 0x55, 0x4d, 0x30, + 0xd2, 0xa0, 0x71, 0xa8, 0xea, 0x9a, 0x90, 0xa4, 0x41, 0xe3, 0x50, 0xd5, 0xb5, 0x71, 0xdd, 0x04, + 0x25, 0x0d, 0x1a, 0x87, 0xaa, 0xae, 0x8d, 0xeb, 0xbe, 0x09, 0x47, 0x1a, 0x34, 0x0e, 0x55, 0x5d, + 0xdb, 0x04, 0x26, 0x0d, 0x1a, 0x87, 0xaa, 0xae, 0x8d, 0xeb, 0x3e, 0x30, 0x08, 0x83, 0x09, 0x4d, + 0x1a, 0x34, 0x0e, 0x55, 0x5d, 0x1b, 0xd7, 0x7d, 0x60, 0x10, 0x06, 0x62, 0x30, 0x81, 0x48, 0x83, + 0xc6, 0x79, 0x26, 0x08, 0x69, 0xa0, 0x06, 0x13, 0x86, 0x34, 0x68, 0xd6, 0x00, 0x00, 0x00, 0x00, + 0x13, 0xc2, 0x20, 0x1c, 0xe4, 0xa1, 0x1d, 0xec, 0x80, 0x0e, 0xda, 0xa0, 0x1e, 0xdc, 0x61, 0x1d, + 0xdc, 0xe1, 0x1d, 0xee, 0xc1, 0x1d, 0xda, 0xe0, 0x1e, 0xd2, 0xc1, 0x1d, 0xc8, 0xe1, 0x1d, 0xee, + 0x61, 0x1e, 0xda, 0xa0, 0x1d, 0xe6, 0xc1, 0x1e, 0xc6, 0x21, 0x0e, 0xf2, 0xc0, 0x0d, 0xe6, 0x60, + 0x0e, 0xdc, 0x00, 0x0e, 0x36, 0xd4, 0x41, 0x39, 0xb4, 0x41, 0x3b, 0xe8, 0xc1, 0x3d, 0xb4, 0x01, + 0x3c, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x41, 0x3a, 0xcc, 0x81, 0x1c, + 0xe8, 0xc1, 0x1c, 0xc8, 0x41, 0x1b, 0xa4, 0x83, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, + 0x41, 0x3a, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, 0xb8, 0xc3, + 0x1c, 0xc8, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0xc1, 0x2c, 0xc4, 0x81, 0x1c, 0xe0, 0x41, 0x1b, + 0x98, 0x82, 0x3b, 0xcc, 0x81, 0x1c, 0x68, 0x84, 0x30, 0x39, 0xdc, 0x87, 0x57, 0x75, 0x5e, 0x96, + 0xcf, 0x5f, 0xed, 0xf4, 0xba, 0xfc, 0x1a, 0xb2, 0xd3, 0x6f, 0x37, 0x54, 0xfe, 0x56, 0x97, 0xc7, + 0xf4, 0xf9, 0x8b, 0x59, 0x4f, 0xcf, 0xc3, 0xc3, 0x77, 0x1b, 0x5e, 0xa7, 0x97, 0x5f, 0x73, 0xf9, + 0xf8, 0x25, 0x0e, 0x8f, 0xd7, 0x65, 0x37, 0x79, 0xfe, 0x32, 0x87, 0xd9, 0x6c, 0x71, 0x78, 0xbc, + 0x7e, 0x99, 0xc3, 0x6c, 0xb6, 0x38, 0x3c, 0x5e, 0x7f, 0xc5, 0xf5, 0x34, 0x9b, 0x9e, 0x76, 0xbf, + 0xcc, 0x61, 0x36, 0x5b, 0x1c, 0x1e, 0xaf, 0xbf, 0xe4, 0xb2, 0x3d, 0x3d, 0x2e, 0x7f, 0xc3, 0xf0, + 0xf4, 0xf7, 0x2e, 0x0f, 0xc3, 0xe1, 0x65, 0xf9, 0xdc, 0x75, 0x4f, 0xbb, 0xc9, 0xef, 0xfb, 0xdc, + 0x15, 0x96, 0xb7, 0x6d, 0x34, 0x17, 0x9b, 0x3d, 0xa4, 0x02, 0x32, 0x01, 0x00, 0x92, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x99, 0x45, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xc0, 0x90, 0xea, 0x0d, 0x28, 0x02, + 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xa3, + 0x90, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, + 0xa4, 0xe2, 0x85, 0x4c, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0xc8, 0x80, 0x21, 0x55, 0x3d, 0x64, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x5c, 0x22, 0x13, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x75, 0x16, 0x99, 0x00, 0x00, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0xd0, 0xc0, 0x0a, 0x00, 0x48, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe1, 0x06, 0x56, + 0x00, 0x40, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, + 0x3e, 0xb0, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0x28, 0xc2, 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0x22, 0x13, 0x4e, 0x00, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xa8, 0x70, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x78, 0x85, 0x13, 0x00, 0x20, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x85, 0x2f, 0x9c, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x9a, 0xe1, + 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0xc1, 0x8d, 0x76, 0x00, 0x40, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0x4a, 0x75, 0xb4, 0x03, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x20, 0x03, 0x86, 0x54, 0xe4, 0xa3, 0x1d, 0x00, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xf2, 0x1f, 0xab, 0x00, 0x80, 0x64, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x0d, 0x59, 0x05, 0x00, 0x24, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xd4, 0xc8, 0x2a, 0x00, + 0x20, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x05, 0x4a, + 0x98, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0x2a, 0x5c, 0xea, 0x14, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x0c, 0x18, 0x52, 0xd5, 0x53, 0x26, 0x00, 0x40, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xa5, 0x3c, 0x05, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x6c, 0xa5, 0x09, 0x00, 0x90, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x32, 0xad, 0x8f, 0x01, 0x02, 0xc0, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x79, 0x6d, 0x02, + 0x00, 0x24, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x40, + 0x0c, 0x0c, 0x1c, 0x20, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0x81, 0x99, 0x26, 0x00, 0x40, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x64, 0xc0, 0x90, 0x4a, 0xcf, 0xbe, 0x07, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xb9, 0x96, 0x09, 0x00, 0x90, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x92, 0x37, 0xef, 0x01, 0x02, 0xc0, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0xcc, 0x61, 0x02, 0x00, + 0x24, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xd0, 0xae, + 0x83, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0x55, 0x7a, 0x99, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, + 0x01, 0x43, 0x2a, 0xdf, 0xf3, 0x20, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf1, 0x9f, 0x26, 0x00, 0x40, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0x06, 0x83, 0x2f, 0x02, 0x02, 0x00, 0x01, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x1d, 0x06, 0x9b, 0x00, 0x00, + 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x58, 0x0c, + 0xc0, 0x40, 0x02, 0x02, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, + 0x21, 0x15, 0x3c, 0x06, 0x9a, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0x2a, 0x95, 0x0c, 0xbe, 0x09, 0x08, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x69, 0x19, 0x64, 0x02, 0x00, 0x24, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x44, 0x33, 0xf0, 0x26, 0x20, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x81, 0x67, + 0x40, 0x15, 0x00, 0x90, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, + 0xa4, 0xa2, 0xcf, 0x80, 0x2a, 0x00, 0x20, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0x85, 0xa2, 0xc1, 0x47, 0x01, 0x40, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xea, 0x4c, 0x03, 0x32, 0xa8, 0x80, 0x00, 0x50, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xb5, 0xaa, 0x41, 0x19, 0x58, + 0x00, 0x90, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x82, + 0xd7, 0x40, 0x0d, 0x2e, 0x20, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x0c, 0x18, 0x52, 0xe9, 0x6c, 0x40, 0x06, 0x18, 0x00, 0x24, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xfc, 0x36, 0x48, 0x83, 0x0c, 0x08, 0x00, 0x07, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xe7, 0x1b, 0xa8, 0x81, 0x06, + 0x00, 0xc9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x18, + 0x0e, 0xde, 0x60, 0x03, 0x02, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, + 0x80, 0x21, 0x15, 0x28, 0x07, 0x1f, 0x05, 0x00, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x5f, 0x0e, 0xc8, 0xe0, 0x02, 0x02, 0x80, 0x01, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0x48, 0x07, 0x65, 0x60, 0x01, 0x40, + 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xad, 0x03, + 0x35, 0xe0, 0x80, 0x00, 0x88, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0x25, 0xdb, 0x01, 0x19, 0x60, 0x00, 0x90, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x19, 0x30, 0xa4, 0xb2, 0xef, 0x20, 0x0d, 0x3a, 0x20, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xfd, 0x78, 0xa0, 0x06, 0x1a, 0x00, 0x24, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x52, 0x3d, 0x78, + 0x03, 0x0f, 0x08, 0x80, 0x09, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0xf8, 0x1e, 0x74, 0x14, 0x00, 0x24, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0x6a, 0x3e, 0x10, 0x83, 0x0f, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x77, 0x1f, 0x74, 0x14, 0x00, 0x24, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x68, 0x3f, 0x10, 0x03, 0x30, + 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, + 0xfd, 0x07, 0x63, 0x10, 0x06, 0x00, 0x90, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0xca, 0x41, 0x01, 0x0d, 0xc0, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xa1, 0x28, 0x8c, 0x41, 0x18, 0x00, 0x40, + 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x1c, 0x05, + 0x34, 0x10, 0x03, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0xb1, 0xa4, 0x30, 0x06, 0x63, 0x00, 0x00, 0x89, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xb7, 0x14, 0xc6, 0x60, 0x0c, 0x00, 0x20, 0xb1, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x25, 0x9b, 0x42, 0x47, 0x06, + 0x00, 0x90, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x7a, + 0x4f, 0xa1, 0x23, 0x03, 0x00, 0x48, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x0c, 0x18, 0x52, 0xb1, 0xa8, 0x00, 0x06, 0x65, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x36, 0x15, 0xbc, 0x02, 0x08, 0x80, 0x0c, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xaa, 0x2a, 0x70, 0x65, 0x00, + 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x73, + 0x15, 0xb4, 0x02, 0x08, 0x80, 0x0c, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0x20, 0x2b, 0x64, 0x66, 0x00, 0x00, 0x89, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x9c, 0x15, 0x2a, 0x33, 0x00, 0x80, 0x44, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xdb, 0x0a, 0x1e, 0x19, 0x00, 0x40, + 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x75, 0x05, + 0x8e, 0x0c, 0x00, 0x20, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0x85, 0xbe, 0x02, 0x19, 0x90, 0x01, 0x00, 0x24, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x58, 0x58, 0x10, 0x03, 0x32, 0x00, 0x80, 0x64, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0x1b, 0x0b, 0x68, 0x70, 0x06, + 0x00, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xb2, + 0x65, 0x01, 0x0c, 0xce, 0x00, 0x00, 0x12, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x20, 0x03, 0x86, 0x54, 0xf6, 0x2c, 0x80, 0x41, 0x1a, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xa6, 0x85, 0x4c, 0x0d, 0x00, 0x20, 0xe9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xf5, 0xd6, 0x82, 0xa6, + 0x06, 0x00, 0x90, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, + 0x4a, 0x6d, 0x41, 0x5b, 0x03, 0x00, 0x48, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0x0c, 0x18, 0x52, 0x8d, 0xb7, 0xb0, 0xad, 0x01, 0x00, 0x24, 0x1d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xfc, 0x5b, 0xd8, 0xd8, 0x00, 0x00, 0x12, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x39, 0x2e, 0x84, 0x41, + 0x1b, 0x00, 0x40, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, + 0x4a, 0xcf, 0x05, 0x31, 0x68, 0x03, 0x00, 0x48, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0x0c, 0x18, 0x52, 0xf1, 0xba, 0x20, 0x06, 0x6e, 0x00, 0x00, 0xc9, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, 0x7f, 0x17, 0xc6, 0xc0, 0x0d, 0x00, + 0x20, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x15, 0xf6, + 0xc2, 0x18, 0xbc, 0x01, 0x00, 0x24, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x01, 0x43, 0x2a, 0xd2, 0x17, 0x34, 0x35, 0x00, 0x80, 0xa4, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xef, 0x0b, 0x9b, 0x1a, 0x00, 0x40, 0xd2, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x2a, 0xff, 0x85, 0x6d, 0x0d, + 0x00, 0x20, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x45, + 0x83, 0x03, 0xb7, 0x06, 0x00, 0x90, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x19, 0x30, 0xa4, 0x82, 0xc3, 0x81, 0x63, 0x03, 0x00, 0x48, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xb1, 0xe2, 0xa0, 0xa9, 0x01, 0x00, 0x24, 0x1d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xcc, 0x71, 0xd8, 0xd4, 0x00, + 0x00, 0x92, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x21, + 0x39, 0x6c, 0x6b, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, + 0x01, 0x43, 0x2a, 0x9e, 0x1c, 0xb8, 0x35, 0x00, 0x80, 0xa4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x5e, 0x0e, 0x1c, 0x1b, 0x00, 0x40, 0xe2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x8a, 0x36, 0x07, 0x4d, 0x0d, 0x00, + 0x20, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0x9e, + 0xc3, 0xa6, 0x06, 0x00, 0x90, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, + 0x30, 0xa4, 0x4a, 0xd1, 0x61, 0x5b, 0x03, 0x00, 0x48, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x91, 0xe9, 0xc0, 0xad, 0x01, 0x00, 0x24, 0x1d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x40, 0x75, 0xc8, 0xd4, 0x00, 0x00, + 0x92, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xb9, 0x3a, + 0x68, 0x6a, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, + 0x43, 0xaa, 0x79, 0x1d, 0xb4, 0x35, 0x00, 0x80, 0xa4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0xcb, 0x0e, 0xdb, 0x1a, 0x00, 0x40, 0xd2, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0x6d, 0x07, 0x4d, 0x0d, 0x00, 0x20, + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x25, 0xba, 0xc3, + 0xa6, 0x06, 0x00, 0x90, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, + 0xa4, 0xea, 0xdd, 0x61, 0x5b, 0x03, 0x00, 0x48, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe1, 0xef, 0xc0, 0xad, 0x01, 0x00, 0x24, 0x1d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x68, 0x78, 0xd0, 0xd4, 0x00, 0x00, 0x92, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x6e, 0x3c, 0x6c, + 0x6a, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0xaa, 0x54, 0x1e, 0xb6, 0x35, 0x00, 0x80, 0xa4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0xc8, 0x80, 0x21, 0x15, 0x39, 0x0f, 0xdc, 0x1a, 0x00, 0x40, 0xd2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x0a, 0xa4, 0x07, 0x8e, 0x0d, 0x00, 0x20, 0xf1, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xc5, 0xd3, 0x83, 0xa6, + 0x06, 0x00, 0x90, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, + 0xb2, 0xeb, 0x61, 0x53, 0x03, 0x00, 0x48, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0x0c, 0x18, 0x52, 0xc5, 0xf6, 0xb0, 0xad, 0x01, 0x00, 0x24, 0x1d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xd8, 0x7b, 0xe0, 0xd6, 0x00, 0x00, 0x92, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x28, 0x3e, 0x70, 0x6c, + 0x00, 0x00, 0x89, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0x2a, + 0x32, 0x1f, 0x1a, 0x38, 0x00, 0x02, 0x20, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x32, 0x60, 0x48, 0x15, 0xe7, 0x43, 0x23, 0x07, 0x40, 0x00, 0x84, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x06, 0x0c, 0xa9, 0xfc, 0x7c, 0xe8, 0xe8, 0x00, 0x08, 0x80, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0xae, 0x0f, + 0x8f, 0x1d, 0x00, 0x01, 0x10, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x30, 0xa4, 0x52, 0xf7, 0xe1, 0xc1, 0x03, 0x20, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x03, 0x24, 0x36, 0x08, 0x14, 0x15, 0x8f, 0x00, 0x00, 0xc8, 0x02, 0x01, + 0x06, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x20, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x4a, 0x94, 0x40, 0x11, 0x14, 0x44, 0x39, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, + 0xc3, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, + 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, + 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, + 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, + 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, + 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, + 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, + 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, + 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, + 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, + 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, + 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, + 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, + 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, + 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, + 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, + 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, + 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, + 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, + 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, + 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, + 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, + 0x7a, 0x28, 0x07, 0x72, 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, + 0xf3, 0x30, 0x23, 0xc1, 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, + 0x66, 0x48, 0x19, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, + 0xcc, 0xc3, 0x3c, 0xb8, 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, + 0x08, 0x07, 0x76, 0x60, 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, + 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, + 0x0e, 0x6e, 0x10, 0x0e, 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, + 0xe4, 0x50, 0x0e, 0xf8, 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, + 0xec, 0x21, 0x1d, 0xe6, 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, + 0x20, 0x9d, 0x3b, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, + 0x70, 0x07, 0x77, 0x78, 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xcb, + 0xe7, 0x0e, 0xef, 0x30, 0x0f, 0xe1, 0xe0, 0x0e, 0xe9, 0x40, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x30, + 0xc3, 0x01, 0x03, 0x73, 0xa8, 0x07, 0x77, 0x18, 0x87, 0x5f, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, + 0xa0, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x98, 0x81, 0x84, 0x41, 0x39, 0xe0, 0xc3, 0x38, 0xb0, 0x43, + 0x3d, 0x90, 0x43, 0x39, 0xcc, 0x40, 0xc4, 0xa0, 0x1d, 0xca, 0xa1, 0x1d, 0xe0, 0x41, 0x1e, 0xde, + 0xc1, 0x1c, 0x66, 0x24, 0x63, 0x30, 0x0e, 0xe1, 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0xe9, 0x40, 0x0f, + 0xe5, 0x30, 0x43, 0x21, 0x83, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, + 0x87, 0x72, 0x98, 0xb1, 0x94, 0x01, 0x3c, 0x8c, 0xc3, 0x3c, 0x94, 0xc3, 0x38, 0xd0, 0x43, 0x3a, + 0xbc, 0x83, 0x3b, 0xcc, 0xc3, 0x8c, 0xc5, 0x0c, 0x48, 0x21, 0x15, 0x42, 0x61, 0x1e, 0xe6, 0x21, + 0x1d, 0xce, 0xc1, 0x1d, 0x52, 0x81, 0x14, 0x66, 0x4c, 0x67, 0x30, 0x0e, 0xef, 0x20, 0x0f, 0xef, + 0xe0, 0x06, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0x20, + 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0x30, 0xa3, 0x40, 0x83, 0x76, 0x68, 0x07, 0x79, 0x08, 0x07, 0x00, + 0x79, 0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x72, 0x1e, 0x48, 0x20, 0x43, 0x88, 0x0c, 0x19, + 0x09, 0x72, 0x32, 0x48, 0x20, 0x23, 0x81, 0x8c, 0x91, 0x91, 0xd1, 0x44, 0xa0, 0x10, 0x28, 0x64, + 0x3c, 0x31, 0x32, 0x42, 0x8e, 0x90, 0x21, 0xa3, 0x48, 0x10, 0x7b, 0x00, 0x4a, 0x72, 0x74, 0x00, + 0x77, 0x63, 0x68, 0x61, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x49, 0x43, 0x20, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x75, 0x77, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x6f, 0x6d, 0x65, 0x62, 0x72, + 0x65, 0x77, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x20, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x00, 0x23, 0x08, 0x49, 0x4a, 0x8c, 0x20, 0x24, 0x2a, + 0x31, 0x82, 0x90, 0xac, 0xc4, 0x08, 0x42, 0xc2, 0x12, 0x33, 0x0c, 0x45, 0x60, 0xcc, 0x30, 0x1c, + 0x82, 0x31, 0xc3, 0x80, 0x0c, 0xc6, 0x0c, 0x01, 0x21, 0x23, 0x81, 0x09, 0xca, 0x89, 0x8d, 0xcd, + 0xae, 0xcd, 0x85, 0x2d, 0xcd, 0x6d, 0xad, 0x4c, 0xce, 0xe5, 0x0d, 0x8e, 0x2e, 0xed, 0xcd, 0x6d, + 0x6e, 0x14, 0x20, 0x23, 0x36, 0x36, 0xbb, 0x36, 0x97, 0xb6, 0x37, 0xb2, 0x3a, 0xb6, 0x32, 0x17, + 0x33, 0xb6, 0xb0, 0xb3, 0xb9, 0x51, 0x06, 0x24, 0x51, 0x52, 0x61, 0x63, 0xb3, 0x6b, 0x73, 0x49, + 0x23, 0x2b, 0x73, 0xa3, 0x1b, 0x25, 0x58, 0x00, 0xa9, 0x18, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, 0x43, 0x3d, 0xb8, 0xc3, + 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, + 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, 0x34, 0xe3, 0x60, 0x0e, + 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, 0xe7, 0x50, 0x0e, 0xf4, + 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, 0x87, 0x71, 0x08, 0x07, + 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, 0xa4, 0x83, 0x3d, 0x94, + 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, 0x1c, 0xe4, 0x61, 0x1c, + 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, 0xc8, 0x61, 0x1c, 0xc2, + 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, 0x0f, 0xf4, 0x80, 0x0e, + 0x0b, 0x88, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x05, 0xcf, 0x38, 0xbc, 0x83, 0x3b, 0xd8, 0x43, + 0x39, 0xc8, 0xc3, 0x39, 0x94, 0x83, 0x3b, 0x8c, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xc8, 0x03, 0x3b, + 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0xcc, 0x3c, 0xa4, + 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, + 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xd2, 0x8d, 0x06, 0x50, 0x6d, + 0x04, 0x60, 0x2c, 0x21, 0x08, 0x00, 0x00, 0x00, 0x74, 0xe8, 0x88, 0x6f, 0x27, 0x20, 0x05, 0x05, + 0x3a, 0x42, 0x89, 0x8e, 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, + 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4e, 0x40, 0x00, 0x0b, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xd2, 0x8d, 0x06, 0x50, 0x6d, 0x04, 0x60, 0x2c, 0x21, + 0x08, 0x00, 0x00, 0x00, 0x74, 0xe8, 0x88, 0x6f, 0x27, 0x20, 0x05, 0x05, 0x3a, 0x42, 0x89, 0x8e, + 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, + 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4e, 0x40, 0x00, 0xbe, 0x9d, 0xe0, 0x34, 0xbe, 0x9d, 0x00, + 0x39, 0x24, 0xe9, 0x08, 0x2d, 0x3a, 0x42, 0x83, 0x8e, 0x0c, 0x32, 0x04, 0x11, 0x84, 0x01, 0x21, + 0xfe, 0x83, 0x0c, 0xc3, 0x14, 0x61, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4a, + 0x40, 0x00, 0x0b, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0xa2, 0xd9, 0x68, 0x00, + 0xf1, 0x46, 0x00, 0xc6, 0x22, 0x82, 0x20, 0x08, 0xc6, 0x22, 0x04, 0x41, 0x10, 0x00, 0x00, 0x00, + 0x94, 0xcc, 0x8a, 0x6f, 0x27, 0x28, 0x07, 0x05, 0xb3, 0xe2, 0xdb, 0x09, 0x0c, 0x42, 0xc1, 0xac, + 0x50, 0x33, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, + 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, + 0xf8, 0x0f, 0x1b, 0x10, 0x55, 0x50, 0x00, 0x0b, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0xa2, 0xd9, 0x68, 0x00, 0xf1, 0x46, 0x00, 0xc6, 0x22, 0x82, 0x20, 0x08, 0xc6, 0x22, 0x04, 0x41, + 0x10, 0x00, 0x00, 0x00, 0x94, 0xcc, 0x8a, 0x6f, 0x27, 0x28, 0x07, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0x0c, 0x42, 0xc1, 0xac, 0x50, 0x33, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, + 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, + 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x55, 0x50, 0x00, 0xbe, 0x9d, 0x50, 0x51, 0xbe, + 0x9d, 0x70, 0x55, 0x94, 0xcd, 0x0a, 0x41, 0xb3, 0x42, 0xcf, 0xac, 0x10, 0x31, 0x2b, 0x83, 0x0c, + 0x01, 0x76, 0x61, 0x50, 0x88, 0xff, 0x20, 0xc3, 0xa0, 0x61, 0x18, 0x18, 0xe2, 0x8f, 0x43, 0x00, + 0xfe, 0x83, 0x0c, 0x46, 0xa7, 0x61, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4e, + 0x50, 0x00, 0xbe, 0x9d, 0x30, 0x06, 0x61, 0xe0, 0xdb, 0x09, 0x65, 0x20, 0x06, 0x74, 0x06, 0xb3, + 0x42, 0xde, 0xac, 0x50, 0x37, 0x2b, 0x44, 0xcc, 0xca, 0x20, 0x43, 0x60, 0x06, 0x65, 0x80, 0x41, + 0x21, 0xfe, 0x83, 0x0c, 0x03, 0x1a, 0x98, 0x01, 0x06, 0x86, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, + 0x83, 0xb1, 0x06, 0x68, 0x80, 0x01, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x38, 0x41, + 0x01, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0x9a, 0x8d, + 0x06, 0x10, 0x6f, 0x04, 0x60, 0x2c, 0x22, 0x08, 0x82, 0x60, 0x2c, 0x42, 0x10, 0x04, 0x61, 0x2c, + 0x62, 0x18, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xcc, 0x8a, 0x6f, 0x27, 0x30, 0x09, 0x05, + 0xb3, 0xe2, 0xdb, 0x09, 0x8e, 0x42, 0xc1, 0xac, 0xf8, 0x76, 0x02, 0xb4, 0x50, 0x30, 0x2b, 0x14, + 0xcd, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, + 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x5c, 0x50, + 0x00, 0x0b, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0x9a, 0x8d, + 0x06, 0x10, 0x6f, 0x04, 0x60, 0x2c, 0x22, 0x08, 0x82, 0x60, 0x2c, 0x42, 0x10, 0x04, 0x61, 0x2c, + 0x62, 0x18, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xcc, 0x8a, 0x6f, 0x27, 0x30, 0x09, 0x05, + 0xb3, 0xe2, 0xdb, 0x09, 0x8e, 0x42, 0xc1, 0xac, 0xf8, 0x76, 0x02, 0xb4, 0x50, 0x30, 0x2b, 0x14, + 0xcd, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, 0x3c, 0x0d, 0x06, 0x89, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, 0x8f, 0x43, 0x00, 0xfe, + 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x5c, 0x50, + 0x00, 0xbe, 0x9d, 0xc0, 0x6d, 0xbe, 0x9d, 0xe0, 0x71, 0x04, 0x06, 0xb3, 0x42, 0xd5, 0xac, 0x10, + 0x35, 0x2b, 0x34, 0xcd, 0x0a, 0x15, 0xb3, 0x32, 0xc8, 0x10, 0x7c, 0x1e, 0x06, 0x86, 0xf8, 0x0f, + 0x32, 0x0c, 0x61, 0xf0, 0x61, 0x70, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x18, 0x64, 0x10, + 0x06, 0x18, 0x24, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc9, 0x19, 0x8c, 0x01, 0x06, 0x8b, + 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x21, 0x05, 0x05, 0xe0, 0xdb, 0x09, 0x6e, 0xc0, 0x06, + 0xbe, 0x9d, 0x00, 0x07, 0x6d, 0x40, 0x72, 0x30, 0x2b, 0x74, 0x06, 0xb3, 0x42, 0x66, 0x30, 0x2b, + 0x54, 0x06, 0xb3, 0x42, 0xc5, 0xac, 0x0c, 0x32, 0x04, 0x71, 0x00, 0x07, 0x18, 0x18, 0xe2, 0x3f, + 0xc8, 0x30, 0xcc, 0x41, 0x1c, 0x60, 0x70, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x18, 0x76, + 0x30, 0x07, 0x18, 0x24, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x1e, 0xd4, 0x01, 0x06, + 0x8b, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x21, 0x05, 0x05, 0xe0, 0xdb, 0x09, 0xa0, 0xd0, + 0x07, 0xbe, 0x9d, 0x20, 0x0a, 0x7e, 0x40, 0xa4, 0x30, 0x2b, 0x94, 0x07, 0xb3, 0x42, 0x78, 0x30, + 0x2b, 0x74, 0x07, 0xb3, 0x42, 0xc5, 0xac, 0x0c, 0x32, 0x04, 0xa3, 0x20, 0x0a, 0x18, 0x18, 0xe2, + 0x3f, 0xc8, 0x30, 0x94, 0xc2, 0x28, 0x60, 0x70, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x18, + 0xa8, 0x50, 0x0a, 0x18, 0x24, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc9, 0x2a, 0x9c, 0x02, + 0x06, 0x8b, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x21, 0x05, 0x05, 0xb0, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xaa, 0x8d, 0x25, 0x00, 0xc2, 0x58, 0x42, 0x30, 0x00, + 0x54, 0xe8, 0x88, 0x6f, 0x27, 0x18, 0x04, 0x05, 0x3a, 0x32, 0xc8, 0x30, 0x04, 0xc5, 0xb0, 0x01, + 0x81, 0x04, 0x04, 0x30, 0xc8, 0x40, 0x08, 0x85, 0x6f, 0x27, 0x24, 0xc8, 0xb0, 0x01, 0x11, 0x08, + 0x04, 0xb0, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0xa2, 0xc4, 0x08, 0x40, + 0x19, 0x8c, 0x06, 0x90, 0x6f, 0x8e, 0x21, 0x26, 0x64, 0x62, 0x26, 0xc6, 0x1a, 0x80, 0x60, 0xa0, + 0xde, 0x68, 0x00, 0xf1, 0xe6, 0x20, 0x62, 0x22, 0x25, 0x54, 0x62, 0x26, 0x28, 0x51, 0x08, 0xe4, + 0x9b, 0x63, 0x48, 0x09, 0x9c, 0x98, 0x89, 0xb1, 0x06, 0x20, 0x20, 0x28, 0x51, 0x0a, 0xe4, 0x9b, + 0x63, 0x50, 0x89, 0x9d, 0x98, 0x89, 0xb1, 0x06, 0x20, 0x28, 0x00, 0x00, 0x14, 0xf5, 0x8a, 0x6f, + 0x27, 0x48, 0x10, 0x05, 0xbd, 0xe2, 0xdb, 0x09, 0x54, 0x44, 0x41, 0xaf, 0x0c, 0x32, 0x14, 0xc3, + 0x33, 0xc8, 0x10, 0x08, 0xcf, 0x20, 0x43, 0xf0, 0x38, 0xc3, 0x06, 0x04, 0x16, 0x14, 0xc0, 0x20, + 0x03, 0x62, 0x34, 0x83, 0x0c, 0x41, 0xd1, 0xf8, 0x76, 0x82, 0x96, 0x0d, 0x32, 0x08, 0x93, 0x34, + 0x6c, 0x40, 0x08, 0x41, 0x01, 0x0c, 0x32, 0x30, 0x8a, 0x33, 0xc8, 0x10, 0x24, 0x8e, 0x6f, 0x27, + 0x78, 0xdc, 0x20, 0x83, 0x70, 0x59, 0xc3, 0x06, 0x84, 0x10, 0x14, 0xc0, 0x02, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0x4a, 0x8c, 0x00, 0x14, 0xc2, 0x68, + 0x00, 0xf1, 0xe6, 0x20, 0x64, 0x62, 0x26, 0x68, 0x82, 0x26, 0xe6, 0x20, 0x64, 0x22, 0x25, 0x66, + 0x82, 0x26, 0xc6, 0x22, 0x80, 0x40, 0x20, 0x28, 0x51, 0x0a, 0xc4, 0x9b, 0x83, 0x48, 0x09, 0x9c, + 0xa0, 0x09, 0x9a, 0x98, 0x83, 0x90, 0x89, 0x94, 0xc0, 0x09, 0x9a, 0x18, 0x8b, 0x00, 0x02, 0xa1, + 0xa0, 0x44, 0x31, 0x10, 0x6f, 0x0e, 0x42, 0x25, 0x78, 0x82, 0x26, 0x68, 0x62, 0x0e, 0x42, 0x26, + 0x52, 0x82, 0x27, 0x68, 0x62, 0x2c, 0x02, 0x08, 0x04, 0x83, 0x12, 0x65, 0x40, 0xbc, 0x39, 0x08, + 0xb0, 0x60, 0x09, 0x9a, 0xa0, 0x89, 0x39, 0x08, 0x99, 0x48, 0x09, 0x96, 0xa0, 0x89, 0xb1, 0x08, + 0x20, 0x10, 0x0e, 0x00, 0x74, 0xcd, 0x8a, 0x6f, 0x27, 0x60, 0x16, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0xda, 0x45, 0xc1, 0xac, 0xf8, 0x76, 0x02, 0x87, 0x51, 0x30, 0x2b, 0x83, 0x0c, 0x47, 0x61, 0x0d, + 0x32, 0x04, 0x84, 0x35, 0xc8, 0x10, 0x0c, 0xd6, 0xb0, 0x01, 0x01, 0x06, 0x41, 0x01, 0x0c, 0x32, + 0x28, 0x48, 0x35, 0xc8, 0x10, 0x1c, 0xd5, 0x20, 0x43, 0x60, 0x54, 0xbe, 0x9d, 0x30, 0x06, 0x62, + 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x0c, 0x32, 0x38, 0x4c, 0x35, 0xc8, 0x10, 0x2c, 0xd5, 0x20, + 0x43, 0xa0, 0x54, 0xbe, 0x9d, 0x70, 0x06, 0x65, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x0c, 0x32, + 0x48, 0x50, 0x35, 0xc8, 0x10, 0x3c, 0xd5, 0x20, 0x43, 0xe0, 0x54, 0xbe, 0x9d, 0xb0, 0x06, 0x68, + 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x2c, 0x00, 0x61, 0x20, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa4, 0x1b, 0x0d, 0xa0, + 0xda, 0x08, 0xc0, 0x58, 0x42, 0x10, 0xd0, 0xa0, 0x20, 0x00, 0x00, 0x00, 0x74, 0xe8, 0x08, 0x1d, + 0x3a, 0x32, 0xc8, 0x10, 0x18, 0x05, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x49, 0x40, 0x00, 0x83, + 0x0c, 0x03, 0x62, 0x60, 0x50, 0x88, 0xbf, 0x6f, 0x27, 0x2c, 0xc7, 0xb0, 0x01, 0x11, 0x08, 0x04, + 0xb0, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0x00, 0x0d, + 0x0a, 0x84, 0x78, 0x63, 0x11, 0x41, 0x10, 0x04, 0x34, 0x28, 0x20, 0xe2, 0x8d, 0x45, 0x08, 0x82, + 0x20, 0x00, 0x00, 0x00, 0x94, 0xcc, 0x0a, 0x25, 0xb3, 0x32, 0xc8, 0x10, 0x20, 0x07, 0x06, 0x83, + 0xf8, 0x0f, 0x1b, 0x10, 0x4b, 0x50, 0x00, 0xbe, 0x9d, 0xb0, 0x20, 0x83, 0x0c, 0xc4, 0x82, 0x60, + 0x60, 0x88, 0xff, 0xb0, 0x01, 0x31, 0x04, 0x05, 0xe0, 0xdb, 0x09, 0x4e, 0x32, 0xc8, 0x70, 0x38, + 0x09, 0x06, 0x89, 0xf8, 0x0f, 0x1b, 0x10, 0x43, 0x50, 0x00, 0x0b, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x34, 0x1b, 0x0d, 0x20, 0xde, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0x01, 0x0d, 0x0a, 0x84, 0x78, + 0x63, 0x11, 0x82, 0x20, 0x08, 0x34, 0x28, 0x20, 0xe2, 0x8d, 0x45, 0x0c, 0xc3, 0x30, 0xd0, 0xa0, + 0xc0, 0x00, 0x00, 0x00, 0xb4, 0xcc, 0x0a, 0x2d, 0xb3, 0x32, 0xc8, 0x10, 0x28, 0x09, 0x06, 0x83, + 0xf8, 0x0f, 0x1b, 0x10, 0x4d, 0x50, 0x00, 0x83, 0x0c, 0x03, 0xa3, 0x60, 0x50, 0x88, 0xbf, 0x6f, + 0x27, 0x3c, 0xcb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x60, 0x3c, 0x0b, 0x06, 0x88, 0xf8, + 0xfb, 0x76, 0x82, 0xc4, 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, 0x89, 0xc4, 0x60, 0xb0, + 0x88, 0xbf, 0x6f, 0x27, 0x54, 0xcd, 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xd2, 0x8d, 0x06, 0x50, 0x6d, 0x04, 0x60, 0x2c, 0x21, + 0x08, 0x00, 0x00, 0x00, 0x64, 0xe8, 0x88, 0x6f, 0x27, 0x1c, 0x05, 0x05, 0x3a, 0x42, 0x8a, 0x8e, + 0xf8, 0x76, 0xc2, 0x82, 0x50, 0xa0, 0x23, 0x83, 0x0c, 0x46, 0x82, 0x20, 0x11, 0x88, 0xff, 0x20, + 0x83, 0xb1, 0x28, 0x48, 0x04, 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x14, 0x10, 0x80, + 0x6f, 0x27, 0x40, 0x0f, 0x4d, 0x3a, 0x42, 0x89, 0x8e, 0x0c, 0x32, 0x38, 0xd1, 0x83, 0x43, 0x20, + 0xfe, 0x83, 0x0c, 0xce, 0x14, 0x21, 0x11, 0x88, 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x1b, 0x10, 0x48, + 0x40, 0x00, 0x0b, 0x00, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0xa2, 0xde, 0x68, 0x00, + 0xf1, 0x46, 0x00, 0xc6, 0x22, 0x82, 0x20, 0x08, 0xc6, 0x22, 0x04, 0x41, 0x10, 0x00, 0x00, 0x00, + 0x84, 0xf4, 0x8a, 0x6f, 0x27, 0x24, 0x07, 0x05, 0xbd, 0xe2, 0xdb, 0x09, 0x0b, 0x42, 0x41, 0xaf, + 0x90, 0x33, 0x2b, 0xbe, 0x9d, 0xf0, 0x30, 0x14, 0xcc, 0x8a, 0x6f, 0x27, 0x44, 0x0d, 0x05, 0xb3, + 0x32, 0xc8, 0x80, 0x38, 0x0d, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x30, 0xd0, 0x83, 0x48, 0x20, 0xfe, + 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0xb0, 0x4c, 0x12, 0x1e, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, + 0x01, 0x91, 0x05, 0x05, 0xe0, 0xdb, 0x09, 0x19, 0x46, 0xdc, 0xac, 0x90, 0x33, 0x2b, 0xd4, 0xcc, + 0xca, 0x20, 0x03, 0xa5, 0x61, 0x38, 0x04, 0xe2, 0x3f, 0xc8, 0x80, 0x71, 0x1a, 0x1a, 0x81, 0xf8, + 0xe3, 0x10, 0x80, 0xff, 0x20, 0xc3, 0xf5, 0x75, 0x78, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, + 0x06, 0x04, 0x13, 0x14, 0x80, 0x6f, 0x27, 0x94, 0xc1, 0x18, 0x10, 0x1a, 0xcc, 0x0a, 0x69, 0xb3, + 0x42, 0xd9, 0xac, 0x0c, 0x32, 0x80, 0x81, 0x19, 0x8c, 0x01, 0x0e, 0x81, 0xf8, 0x0f, 0x32, 0x90, + 0x01, 0x1a, 0x94, 0x01, 0x1a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0xc3, 0x18, 0xac, 0x01, + 0x1a, 0xe0, 0x11, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4c, 0x50, 0x00, 0x0b, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0x9a, 0x8d, 0x06, 0x10, 0x6f, 0x04, + 0x60, 0x2c, 0x22, 0x08, 0x82, 0x60, 0x2c, 0x42, 0x10, 0x04, 0x61, 0x2c, 0x62, 0x18, 0x86, 0x01, + 0x00, 0x00, 0x00, 0x00, 0xa4, 0xcc, 0x8a, 0x6f, 0x27, 0x2c, 0x09, 0x05, 0xb3, 0xe2, 0xdb, 0x09, + 0x8d, 0x42, 0xc1, 0xac, 0xf8, 0x76, 0xc2, 0xb3, 0x50, 0x30, 0x2b, 0x24, 0xcd, 0x8a, 0x6f, 0x27, + 0x4c, 0x10, 0x05, 0xb3, 0xe2, 0xdb, 0x09, 0x55, 0x44, 0xc1, 0xac, 0xf8, 0x76, 0xc2, 0x25, 0x51, + 0x30, 0x2b, 0x83, 0x0c, 0xce, 0x24, 0x21, 0x12, 0x88, 0xff, 0x20, 0x83, 0x53, 0x51, 0x88, 0x04, + 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0x83, 0x0c, 0x0f, 0x76, 0x61, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0x40, 0x9b, 0x86, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x88, 0x41, + 0x50, 0x00, 0xbe, 0x9d, 0x20, 0x06, 0x61, 0x40, 0x65, 0x30, 0x2b, 0x34, 0xcd, 0x0a, 0x49, 0xb3, + 0x42, 0xd1, 0xac, 0x0c, 0x32, 0x78, 0x63, 0x10, 0x06, 0x58, 0x04, 0xe2, 0x3f, 0xc8, 0xe0, 0x95, + 0xc1, 0x18, 0xa0, 0x11, 0x88, 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x32, 0x7c, 0x68, 0x60, 0x06, 0x88, + 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x60, 0xb0, 0x06, 0x69, 0x80, 0x4a, 0x20, 0xfe, + 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x40, 0x41, 0x01, 0xf8, 0x76, 0x82, 0x1c, 0xc0, 0x01, 0xd5, + 0xc1, 0xac, 0xd0, 0x18, 0xcc, 0x0a, 0x89, 0xc1, 0xac, 0x50, 0x18, 0xcc, 0xca, 0x20, 0x83, 0x1b, + 0xcc, 0x01, 0x1c, 0x60, 0x11, 0x88, 0xff, 0x20, 0x83, 0x1b, 0xd4, 0x81, 0x1c, 0xa0, 0x11, 0x88, + 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x32, 0xbc, 0x01, 0x1e, 0xd4, 0x01, 0x22, 0x81, 0xf8, 0xe3, 0x10, + 0x80, 0xff, 0x20, 0x03, 0x1c, 0xec, 0x01, 0x1e, 0xa0, 0x12, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x50, 0x50, 0x00, 0xbe, 0x9d, 0x20, 0x0a, 0x7f, 0x40, 0xa5, 0x30, 0x2b, 0x34, 0x07, + 0xb3, 0x42, 0x72, 0x30, 0x2b, 0x14, 0x07, 0xb3, 0x32, 0xc8, 0xe0, 0x07, 0xa3, 0xf0, 0x07, 0x58, + 0x04, 0xe2, 0x3f, 0xc8, 0xe0, 0x07, 0xa5, 0x10, 0x0a, 0x68, 0x04, 0xe2, 0x8f, 0xc1, 0x00, 0xfe, + 0x83, 0x0c, 0x7f, 0x80, 0x0a, 0xa4, 0x80, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0x00, + 0x0a, 0xab, 0x70, 0x0a, 0xa8, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x14, 0x14, + 0xc0, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xd2, 0x8d, 0x06, 0x50, 0x6d, + 0x2c, 0x21, 0x00, 0x28, 0x31, 0x1a, 0x40, 0xb5, 0x39, 0x84, 0x94, 0x88, 0x09, 0x1a, 0x8c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x74, 0xe8, 0x88, 0x6f, 0x27, 0x20, 0x07, 0x05, 0x3a, 0x32, 0xc8, 0x10, + 0x20, 0x07, 0x06, 0x84, 0xf8, 0x0f, 0x32, 0x04, 0xca, 0x81, 0x42, 0x10, 0xfe, 0x63, 0x08, 0x01, + 0xc2, 0x01, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x1a, 0x01, 0x28, 0x81, + 0x22, 0x00, 0x00, 0x00, 0x64, 0xf4, 0x8a, 0x6f, 0x27, 0x1c, 0x06, 0x05, 0xbd, 0xe2, 0xdb, 0x09, + 0xc9, 0x41, 0x41, 0xaf, 0x8c, 0x21, 0x14, 0xc8, 0x18, 0x02, 0x81, 0x8c, 0x21, 0x0c, 0x08, 0x06, + 0x82, 0xf8, 0x8f, 0x21, 0x14, 0xcb, 0x18, 0x02, 0xb2, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, + 0x63, 0x80, 0x88, 0xff, 0x18, 0x02, 0x13, 0x8d, 0x21, 0x3c, 0x11, 0x26, 0x81, 0xf8, 0x8f, 0x21, + 0x44, 0x12, 0x26, 0x81, 0xf8, 0x63, 0x30, 0x84, 0x3f, 0x06, 0x86, 0xf8, 0x8f, 0x21, 0x44, 0x18, + 0x32, 0x87, 0xf8, 0x63, 0x64, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, 0x40, 0x88, 0x3f, 0x36, 0x01, + 0xf8, 0x63, 0x70, 0x80, 0x3f, 0x07, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x2b, 0xa8, 0xc2, 0xa2, 0xd9, 0x68, 0x00, 0x25, 0xca, 0x60, 0x34, 0x80, 0x6a, 0x73, 0x08, 0x33, + 0x41, 0x13, 0x34, 0x28, 0x01, 0xd2, 0x8d, 0x06, 0x10, 0x6f, 0x2c, 0x02, 0x00, 0x80, 0x80, 0x6a, + 0x73, 0x08, 0x34, 0xa1, 0x12, 0x34, 0x18, 0x01, 0x20, 0xde, 0x58, 0x04, 0x10, 0x00, 0x01, 0xd5, + 0xe6, 0x10, 0x54, 0x82, 0x26, 0xe6, 0x10, 0x68, 0x62, 0x26, 0x68, 0x50, 0x48, 0x54, 0x9b, 0x43, + 0xa0, 0x89, 0x94, 0x98, 0x43, 0x48, 0x09, 0x9a, 0x20, 0xde, 0x58, 0x04, 0x20, 0x04, 0xc3, 0x58, + 0x44, 0x50, 0x14, 0xc5, 0x58, 0x84, 0x60, 0x18, 0xc6, 0x58, 0xc4, 0x70, 0x1c, 0x07, 0xcd, 0xc6, + 0x22, 0x40, 0x10, 0x04, 0xf1, 0x0f, 0x04, 0x41, 0x10, 0xff, 0x05, 0x10, 0x04, 0x41, 0xfc, 0x03, + 0x41, 0x10, 0xc4, 0x7f, 0x81, 0x0c, 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x28, 0x00, 0x00, 0x00, + 0xa4, 0xcd, 0x8a, 0x6f, 0x27, 0x6c, 0x1a, 0x05, 0xb3, 0xe2, 0xdb, 0x09, 0xdd, 0x46, 0xc1, 0xac, + 0xf8, 0x76, 0xc2, 0xc7, 0x51, 0x60, 0x20, 0xbe, 0x9d, 0x10, 0x06, 0x1d, 0x05, 0x86, 0x31, 0xc8, + 0x50, 0x78, 0xdb, 0x1c, 0x43, 0x20, 0x6c, 0x83, 0x0c, 0xc1, 0xa6, 0x0d, 0x32, 0x28, 0x61, 0xa0, + 0xcd, 0x31, 0x04, 0x87, 0x36, 0xc8, 0x10, 0x78, 0x1a, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x30, 0x65, + 0xb0, 0xcd, 0x31, 0x04, 0x8b, 0x18, 0x0c, 0x32, 0x04, 0x62, 0x10, 0x06, 0x83, 0x0c, 0x11, 0x1a, + 0x74, 0x73, 0x0c, 0x01, 0x13, 0x06, 0x83, 0x0c, 0x41, 0x19, 0x84, 0x01, 0x12, 0x81, 0xf8, 0x23, + 0x12, 0x84, 0xbf, 0x6f, 0x27, 0xc8, 0x41, 0x18, 0x50, 0x60, 0x18, 0x83, 0x0c, 0xd8, 0x1b, 0x88, + 0xc1, 0x1c, 0x43, 0x20, 0xa0, 0xc1, 0x20, 0x43, 0xc0, 0x06, 0x68, 0x80, 0x52, 0x20, 0xfe, 0x83, + 0x0c, 0xda, 0x1c, 0x94, 0xc1, 0x1c, 0x43, 0x60, 0xc0, 0xc1, 0x20, 0x43, 0x00, 0x07, 0x6f, 0x80, + 0x01, 0x23, 0xfe, 0x58, 0x04, 0xe1, 0x8f, 0xd1, 0x21, 0xfe, 0x48, 0x58, 0xe2, 0x8f, 0x42, 0x10, + 0xfe, 0x83, 0x0c, 0xcf, 0x1e, 0xb0, 0xc1, 0x20, 0x43, 0xc1, 0x07, 0x6d, 0x30, 0xc8, 0x30, 0xf4, + 0x81, 0x1b, 0x0c, 0x32, 0x9c, 0x41, 0x1a, 0xb8, 0xc1, 0x20, 0x03, 0x1a, 0xa8, 0x81, 0x1b, 0x0c, + 0x32, 0xa4, 0xc1, 0x1a, 0xb8, 0x01, 0x1a, 0x83, 0xf8, 0x63, 0x21, 0x88, 0x3f, 0x06, 0x02, 0xf8, + 0x63, 0x81, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, 0x1c, 0xcc, 0x81, 0xf8, 0x63, 0x20, 0x88, 0xff, + 0x88, 0xc1, 0x01, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x1d, 0xd0, 0x02, 0x1d, 0x04, 0x1c, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xd2, 0x8d, 0x06, 0x50, 0x62, 0x34, 0x80, 0x6a, 0x73, + 0x08, 0x29, 0x11, 0x13, 0x34, 0x18, 0x01, 0x28, 0x01, 0x32, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, + 0x1f, 0xcd, 0x46, 0x03, 0x88, 0x37, 0x02, 0x30, 0x07, 0x91, 0x12, 0x31, 0x11, 0x13, 0x2a, 0x41, + 0x83, 0x22, 0x00, 0x00, 0xd4, 0xe8, 0x88, 0x6f, 0x27, 0x38, 0x0c, 0x05, 0x3a, 0x32, 0xc8, 0x10, + 0x34, 0x0b, 0x06, 0x84, 0xf8, 0x8f, 0x21, 0x04, 0xcc, 0x18, 0x02, 0xd1, 0x8c, 0x21, 0x1c, 0x0d, + 0x0a, 0x81, 0xf8, 0x23, 0x11, 0x84, 0x3f, 0x3e, 0x01, 0xf9, 0x1b, 0x01, 0xfe, 0x66, 0x80, 0xff, + 0x1c, 0x43, 0x34, 0x50, 0x83, 0x0c, 0x81, 0x14, 0x0d, 0x32, 0x34, 0x4f, 0x34, 0xc7, 0x10, 0x14, + 0xd6, 0x1c, 0x43, 0x50, 0x48, 0x48, 0x04, 0xe2, 0x3f, 0x6c, 0x40, 0x7c, 0x01, 0x01, 0x2c, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x1a, 0x01, 0x28, 0x81, 0x22, 0x20, 0xc3, 0x18, + 0x01, 0x08, 0x82, 0x20, 0xfe, 0xd1, 0xa0, 0x10, 0x0a, 0xa2, 0x50, 0x0a, 0xa6, 0x90, 0x0a, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0xe4, 0xf4, 0x8a, 0x6f, 0x27, 0x3c, 0x0d, 0x05, 0xbd, 0xe2, 0xdb, 0x09, + 0x91, 0x43, 0x41, 0xaf, 0x8c, 0x21, 0x14, 0xcf, 0x18, 0x02, 0xf1, 0x8c, 0x21, 0x0c, 0x0f, 0x06, + 0x82, 0xf8, 0x8f, 0x21, 0x14, 0xd2, 0x18, 0x02, 0x22, 0xa1, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, + 0x63, 0x80, 0x88, 0xff, 0x18, 0x02, 0x83, 0x8d, 0x21, 0x3c, 0x18, 0x26, 0x81, 0xf8, 0x8f, 0x21, + 0x44, 0x19, 0x26, 0x81, 0xf8, 0x63, 0x30, 0x84, 0x3f, 0x06, 0x86, 0xf8, 0x8f, 0x21, 0x44, 0x1f, + 0x32, 0x87, 0xf8, 0x63, 0x64, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, 0x40, 0x88, 0x3f, 0x36, 0x01, + 0xf8, 0x63, 0x70, 0x80, 0x3f, 0x8e, 0x41, 0x40, 0xfe, 0x18, 0x44, 0xe2, 0x3f, 0x6c, 0x40, 0xac, + 0x41, 0x50, 0x00, 0x28, 0x2c, 0xe2, 0xef, 0xdb, 0x09, 0x6c, 0x50, 0x06, 0xc3, 0x06, 0x44, 0x20, + 0x0c, 0x00, 0x12, 0x88, 0xf8, 0xfb, 0x76, 0x82, 0x1b, 0x98, 0xc1, 0xb0, 0x01, 0x11, 0x08, 0x04, + 0x80, 0x0d, 0x26, 0xfe, 0xc8, 0x55, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0x98, 0x04, 0xe2, 0xef, 0xdb, + 0x09, 0x73, 0x20, 0x07, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x00, 0x82, 0x81, 0x18, 0x88, 0x3f, 0x4e, + 0x97, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x3a, 0x81, 0xf8, 0xfb, 0x76, 0x02, 0x1e, 0xbc, 0xc1, 0xb0, + 0x01, 0x11, 0x08, 0x03, 0x80, 0xde, 0x26, 0xfe, 0x38, 0x06, 0x68, 0x20, 0xfe, 0x28, 0x04, 0xe1, + 0x8f, 0x53, 0x20, 0xfe, 0xbe, 0x9d, 0xd0, 0x07, 0x73, 0x30, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x20, + 0x1a, 0x8c, 0x81, 0xf8, 0x63, 0xc7, 0x06, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0x88, 0x05, 0xe2, 0xef, + 0xdb, 0x09, 0xa2, 0x00, 0x0a, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x00, 0x86, 0xc1, 0x19, 0x88, 0x3f, + 0xba, 0x81, 0x1c, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, 0x17, 0x88, 0xbf, 0x6f, 0x27, 0x9c, 0x02, + 0x1f, 0x0c, 0x1b, 0x10, 0x81, 0x30, 0x00, 0x58, 0x07, 0x76, 0x20, 0xfe, 0xe8, 0x06, 0x6d, 0x20, + 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x62, 0x10, 0x88, 0xbf, 0x6f, 0x27, 0xb0, 0x02, 0x28, 0x0c, 0x1b, + 0x10, 0x81, 0x40, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x2a, 0x30, 0xe2, 0x8d, 0x45, 0x0c, 0xc3, 0x70, 0x8c, 0x45, 0x08, 0x86, 0x60, 0x8c, 0x45, 0x08, + 0x82, 0x60, 0x8c, 0x45, 0x0c, 0xc7, 0x70, 0x8c, 0x45, 0x04, 0x45, 0x50, 0x8c, 0x45, 0x04, 0x41, + 0x50, 0x8c, 0x45, 0x00, 0x04, 0x40, 0x8c, 0x45, 0x00, 0x00, 0x40, 0xd0, 0x6c, 0x34, 0x80, 0x78, + 0x63, 0x11, 0x80, 0x10, 0x0c, 0x63, 0x11, 0x00, 0x41, 0x10, 0x63, 0x11, 0x41, 0x51, 0x14, 0x63, + 0x11, 0x82, 0x61, 0x18, 0x63, 0x11, 0xc3, 0x71, 0x1c, 0x34, 0x1b, 0x8b, 0x00, 0x41, 0x10, 0xc4, + 0x3f, 0x10, 0x04, 0x41, 0xfc, 0x17, 0x40, 0x10, 0x04, 0xf1, 0x0f, 0x04, 0x41, 0x10, 0xff, 0x85, + 0xb1, 0x08, 0x10, 0x04, 0x41, 0xfc, 0x17, 0x40, 0x10, 0x04, 0xf1, 0x0f, 0x04, 0x41, 0x10, 0xff, + 0x05, 0x10, 0x04, 0x41, 0xfc, 0xa3, 0xc4, 0x08, 0x40, 0x21, 0x8c, 0x06, 0x10, 0x6f, 0x0e, 0x42, + 0x2c, 0xc6, 0x82, 0x2c, 0xc8, 0x62, 0x0e, 0x42, 0x2c, 0x52, 0x62, 0x2c, 0xc8, 0x62, 0x2c, 0x02, + 0x08, 0x04, 0x82, 0x0c, 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x28, 0x8c, 0x11, 0x80, 0x20, 0x08, + 0xe2, 0x1f, 0x0d, 0x46, 0x00, 0x88, 0x37, 0x02, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xcd, 0x8a, 0x6f, + 0x27, 0x80, 0x81, 0x47, 0xc1, 0xac, 0xf8, 0x76, 0x82, 0x18, 0x7c, 0x14, 0xcc, 0x8a, 0x6f, 0x27, + 0x90, 0x01, 0x18, 0x50, 0x30, 0x2b, 0x83, 0x0c, 0xc1, 0x10, 0x06, 0x83, 0x0c, 0x84, 0x11, 0x06, + 0x28, 0x04, 0xe2, 0x3f, 0xc8, 0x40, 0x18, 0x62, 0x30, 0xc8, 0x70, 0x24, 0x62, 0x80, 0x42, 0x20, + 0xfe, 0x48, 0x04, 0xe1, 0x3f, 0xc8, 0xa0, 0x30, 0x64, 0x80, 0x48, 0x20, 0xfe, 0x83, 0x0c, 0x0a, + 0x53, 0x06, 0x18, 0x18, 0xe2, 0x8f, 0x43, 0x10, 0xfe, 0x98, 0x14, 0xe2, 0x8f, 0x04, 0x23, 0xfe, + 0x28, 0x04, 0xe1, 0x3f, 0xc8, 0x20, 0x51, 0x6a, 0x80, 0x50, 0x20, 0xfe, 0x83, 0x0c, 0x12, 0xb5, + 0x06, 0x18, 0x38, 0xe2, 0x8f, 0x43, 0x10, 0xfe, 0x18, 0x15, 0xe2, 0x8f, 0x04, 0x25, 0xfe, 0x28, + 0x04, 0xe1, 0x8f, 0x0e, 0x22, 0xfe, 0x78, 0x44, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0x83, 0x0c, 0xd4, + 0x1c, 0xc8, 0xc1, 0x20, 0x03, 0x44, 0x07, 0x73, 0x30, 0xc8, 0xe0, 0xd4, 0x01, 0x1d, 0x0c, 0x32, + 0x28, 0x76, 0x50, 0x07, 0x83, 0x0c, 0xc8, 0x1d, 0xd8, 0xc1, 0x20, 0x83, 0x81, 0x07, 0x77, 0x30, + 0xc8, 0x50, 0x06, 0x67, 0x70, 0x07, 0x83, 0x0c, 0x66, 0x80, 0x06, 0x77, 0x30, 0xc8, 0x70, 0x06, + 0x69, 0x70, 0x07, 0x83, 0x0c, 0x68, 0xa0, 0x06, 0x77, 0x80, 0xca, 0x20, 0xfe, 0x98, 0x08, 0xe2, + 0x8f, 0x81, 0x00, 0xfe, 0x58, 0x30, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0xf8, 0x24, 0xe2, 0x8f, 0xcc, + 0x21, 0xfe, 0x18, 0x08, 0xe0, 0x8f, 0xca, 0x23, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x93, 0x23, 0xfe, + 0x08, 0x31, 0xe2, 0x8f, 0x81, 0x00, 0xfe, 0x08, 0x51, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0x78, 0x4d, + 0xe2, 0x8f, 0x95, 0x24, 0xfe, 0x18, 0x08, 0xe0, 0x8f, 0x15, 0x26, 0xfe, 0x28, 0x04, 0xe1, 0x8f, + 0xd0, 0x2a, 0x88, 0x3f, 0x32, 0xab, 0x20, 0xfe, 0x88, 0xb4, 0x82, 0xf8, 0x23, 0xd1, 0x0a, 0xe2, + 0x3f, 0xc8, 0x40, 0x0c, 0xaa, 0x30, 0xc8, 0x10, 0x0c, 0xaa, 0x30, 0xc8, 0x10, 0x0c, 0xaa, 0x80, + 0x81, 0x29, 0x88, 0xff, 0x88, 0xc1, 0x01, 0x84, 0x20, 0x58, 0xf8, 0x07, 0x1d, 0xb4, 0xc3, 0x2a, + 0x04, 0xb8, 0x0a, 0x01, 0xf9, 0xcf, 0x31, 0xec, 0x42, 0xb0, 0x0a, 0x83, 0x0c, 0x01, 0x2f, 0xac, + 0x02, 0x06, 0x8c, 0xf8, 0x0f, 0x1b, 0x10, 0xea, 0x10, 0x14, 0x00, 0x0a, 0x8c, 0xf8, 0xfb, 0x76, + 0xc2, 0x3a, 0xa8, 0xc3, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x80, 0x44, 0x23, 0xfe, 0xbe, 0x9d, 0xd0, + 0x0e, 0xeb, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0xa0, 0xe1, 0x88, 0xbf, 0x6f, 0x27, 0xbc, 0x03, + 0x3b, 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x1b, 0x12, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x30, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x40, 0x08, 0x14, 0x24, 0x06, 0x19, + 0x09, 0xe2, 0xdb, 0x09, 0x08, 0x41, 0xc1, 0x80, 0x90, 0x02, 0x28, 0x23, 0x06, 0x88, 0x18, 0x84, + 0x20, 0x18, 0x28, 0x20, 0x11, 0x08, 0x44, 0x31, 0x6c, 0x40, 0x28, 0x41, 0x01, 0x2c, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x40, 0x08, + 0x14, 0x24, 0x06, 0x19, 0x09, 0xe2, 0xdb, 0x09, 0x08, 0x41, 0xc1, 0x80, 0x90, 0x02, 0x28, 0x23, + 0x06, 0x88, 0x18, 0x84, 0x20, 0x18, 0x28, 0xfe, 0x10, 0x08, 0x44, 0x31, 0x6c, 0x40, 0x28, 0x41, + 0x01, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x28, 0x0c, 0x00, 0x00, + 0xbe, 0x9d, 0x50, 0x0c, 0x14, 0x24, 0x06, 0x1d, 0x09, 0xe2, 0xdb, 0x09, 0x49, 0x41, 0xc1, 0x80, + 0xd0, 0x02, 0x28, 0x23, 0x06, 0x88, 0x18, 0x84, 0x20, 0x18, 0x30, 0xfd, 0x10, 0x08, 0x44, 0x31, + 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, + 0x3c, 0x44, 0x01, 0xf8, 0x76, 0xc2, 0xe3, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, 0x00, + 0x39, 0xc3, 0x06, 0x44, 0x40, 0x10, 0x80, 0x6f, 0x27, 0x44, 0xce, 0xb0, 0x01, 0x11, 0x10, 0x03, + 0xb0, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x28, 0x0c, 0x6a, 0x8c, + 0x06, 0x00, 0x00, 0x00, 0x54, 0x18, 0x8a, 0x6f, 0x27, 0x18, 0x05, 0x05, 0x86, 0xe1, 0xdb, 0x09, + 0x88, 0x41, 0x81, 0x81, 0xf8, 0x76, 0x82, 0x72, 0x50, 0x60, 0x18, 0xbe, 0x9d, 0xd0, 0x2c, 0x14, + 0x24, 0x06, 0x3d, 0x09, 0xe2, 0xdb, 0x09, 0x51, 0x43, 0xc1, 0x80, 0xd0, 0x04, 0x28, 0xb3, 0x0d, + 0x4e, 0x03, 0xcc, 0x36, 0x04, 0x4c, 0x30, 0xdb, 0x10, 0x2c, 0xc2, 0x6c, 0x43, 0xa0, 0x0c, 0x23, + 0x06, 0x89, 0x18, 0x84, 0x20, 0x18, 0x38, 0x27, 0x51, 0x18, 0x48, 0x12, 0x2c, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, 0x34, 0x20, 0x8a, 0x6f, + 0x27, 0x14, 0x03, 0x05, 0x89, 0x41, 0x47, 0x82, 0xf8, 0x76, 0x42, 0x52, 0x50, 0x30, 0x20, 0xb4, + 0x00, 0xca, 0x88, 0x41, 0x22, 0x06, 0x21, 0x08, 0x06, 0x4f, 0x3e, 0x04, 0x02, 0x51, 0x1c, 0x0b, + 0x61, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, 0x34, 0x20, 0x8a, 0x6f, + 0x27, 0x14, 0x03, 0x05, 0x89, 0x41, 0x47, 0x82, 0xf8, 0x76, 0x42, 0x52, 0x50, 0x30, 0x20, 0xb4, + 0x00, 0xca, 0x88, 0x41, 0x22, 0x06, 0x21, 0x08, 0x06, 0xcf, 0x3d, 0x04, 0x02, 0x51, 0x1c, 0x0b, + 0x61, 0x20, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x42, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x40, 0x08, + 0x14, 0x24, 0x88, 0x6f, 0x27, 0x18, 0x03, 0x05, 0x89, 0x41, 0x48, 0xa2, 0xf8, 0x76, 0x82, 0x72, + 0x50, 0x30, 0x20, 0xc4, 0x00, 0xca, 0x88, 0x41, 0x32, 0x06, 0x21, 0x08, 0x06, 0x90, 0x3d, 0x04, + 0x02, 0x51, 0x1c, 0xc3, 0x06, 0x04, 0x13, 0x14, 0xc0, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x88, 0x42, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x40, 0x08, 0x14, 0x24, 0x88, 0x6f, + 0x27, 0x18, 0x03, 0x05, 0x89, 0x41, 0x48, 0xa2, 0xf8, 0x76, 0x82, 0x72, 0x50, 0x30, 0x20, 0xc4, + 0x00, 0xca, 0x88, 0x41, 0x32, 0x06, 0x21, 0x08, 0x06, 0x10, 0x3d, 0x04, 0x02, 0x51, 0x1c, 0xc3, + 0x06, 0x04, 0x13, 0x14, 0xc0, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x42, + 0x28, 0x0c, 0x00, 0x00, 0xbe, 0x9d, 0x50, 0x0c, 0x14, 0x24, 0x88, 0x6f, 0x27, 0x1c, 0x04, 0x05, + 0x89, 0x41, 0x49, 0xa2, 0xf8, 0x76, 0xc2, 0x82, 0x50, 0x30, 0x20, 0xd4, 0x00, 0xca, 0x88, 0x41, + 0x32, 0x06, 0x21, 0x08, 0x06, 0xd1, 0x3c, 0x04, 0x02, 0x51, 0x1c, 0xa3, 0x09, 0x01, 0x30, 0x9a, + 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0xc3, 0x06, 0x44, 0x44, 0x14, 0x80, 0x6f, + 0x27, 0x44, 0xcf, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xe0, 0xdb, 0x09, 0x52, 0x34, 0x6c, 0x40, 0x04, + 0x04, 0x01, 0xf8, 0x76, 0xc2, 0x04, 0x0d, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x28, 0x0c, 0x6a, 0x8c, 0x06, 0x00, 0x00, 0x00, + 0x54, 0x18, 0x8a, 0x6f, 0x27, 0x18, 0x05, 0x05, 0x86, 0xe1, 0xdb, 0x09, 0x88, 0x41, 0x81, 0x81, + 0xf8, 0x76, 0x82, 0x72, 0x50, 0x60, 0x18, 0xbe, 0x9d, 0xd0, 0x28, 0x14, 0x24, 0x88, 0x6f, 0x27, + 0x3c, 0x0d, 0x05, 0x89, 0x41, 0x51, 0xa2, 0xf8, 0x76, 0xc2, 0xf4, 0x50, 0x30, 0x20, 0x54, 0x01, + 0xca, 0x6c, 0x03, 0xf4, 0x00, 0xb3, 0x0d, 0x81, 0x13, 0xcc, 0x36, 0x04, 0x8d, 0x30, 0xdb, 0x10, + 0x30, 0xc3, 0x88, 0x81, 0x32, 0x06, 0x21, 0x08, 0x06, 0x52, 0x3f, 0x14, 0x06, 0x92, 0x2c, 0xc1, + 0x02, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x20, 0x8a, 0x6f, 0x27, 0x14, 0x03, 0x05, 0x09, 0xe2, 0xdb, 0x09, 0x07, 0x41, 0x41, 0x62, + 0x50, 0x92, 0x28, 0xbe, 0x9d, 0xb0, 0x20, 0x14, 0x0c, 0x08, 0x35, 0x80, 0x32, 0x62, 0xa0, 0x8c, + 0x41, 0x08, 0x82, 0xc1, 0xf4, 0x0e, 0x81, 0x40, 0x14, 0x47, 0xb2, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x88, 0x42, 0x00, 0x00, 0x00, 0x00, 0x34, 0x20, 0x8a, 0x6f, 0x27, 0x14, 0x03, 0x05, + 0x09, 0xe2, 0xdb, 0x09, 0x07, 0x41, 0x41, 0x62, 0x50, 0x92, 0x28, 0xbe, 0x9d, 0xb0, 0x20, 0x14, + 0x0c, 0x08, 0x35, 0x80, 0x32, 0x62, 0xa0, 0x8c, 0x41, 0x08, 0x82, 0xc1, 0xd4, 0x0e, 0x81, 0x40, + 0x14, 0x47, 0xb2, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x4a, 0x94, 0xff, 0xff, 0x41, + 0x81, 0xd0, 0xa0, 0x10, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x60, 0x10, 0x14, 0x24, 0xc8, 0x05, + 0x85, 0x9e, 0x50, 0xe0, 0xb0, 0x01, 0x91, 0x08, 0x04, 0xe0, 0xdb, 0x09, 0x49, 0x31, 0x6c, 0x40, + 0x04, 0xc2, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x42, + 0x18, 0x01, 0xa0, 0x44, 0xf9, 0xff, 0x1f, 0x50, 0x6d, 0x2c, 0x01, 0xfa, 0xff, 0x3f, 0xa0, 0xc4, + 0x68, 0x00, 0xd5, 0xe6, 0x10, 0x68, 0x42, 0x26, 0xc6, 0x12, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, + 0xbe, 0x9d, 0xa0, 0x20, 0xbe, 0x9d, 0xa0, 0x20, 0x24, 0xd4, 0xc8, 0x18, 0x42, 0x90, 0x5c, 0x90, + 0xe8, 0x0d, 0x09, 0x1e, 0x81, 0xe8, 0x20, 0x83, 0x10, 0x20, 0xc3, 0x06, 0x44, 0x44, 0x14, 0xc0, + 0xb0, 0x01, 0x71, 0x04, 0x03, 0xb0, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, + 0x28, 0x04, 0x4a, 0x14, 0x42, 0x79, 0xd0, 0xa0, 0x30, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x4a, 0x2a, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x20, 0xa1, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0x50, + 0x28, 0x18, 0x10, 0xdf, 0x4e, 0x78, 0x16, 0x0a, 0x0c, 0x83, 0x22, 0x03, 0x49, 0x22, 0x01, 0x17, + 0x38, 0x78, 0x81, 0xa3, 0x23, 0x06, 0x08, 0x19, 0x84, 0x20, 0x18, 0x54, 0xf2, 0x90, 0x04, 0x44, + 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x6c, + 0x40, 0x64, 0x44, 0x01, 0xf8, 0x76, 0x42, 0x66, 0x0d, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, + 0xa0, 0x61, 0xc3, 0x06, 0x44, 0x40, 0x10, 0x80, 0x6f, 0x27, 0x6c, 0xd5, 0xb0, 0x01, 0x11, 0x10, + 0x03, 0xb0, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x4a, 0x14, + 0x42, 0x79, 0xd0, 0xa0, 0x30, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x4a, 0x2e, 0x83, 0xf0, 0xfd, 0x04, + 0x21, 0xf0, 0xed, 0x84, 0x20, 0xa1, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0x50, 0x28, 0x18, 0x10, 0xdf, + 0x4e, 0x80, 0x16, 0x0a, 0x0c, 0x83, 0x24, 0x03, 0x49, 0x22, 0x01, 0x17, 0x38, 0x78, 0x81, 0xa3, + 0x23, 0x06, 0x49, 0x19, 0x84, 0x20, 0x18, 0x5c, 0xf1, 0x90, 0x04, 0x44, 0x51, 0x8d, 0x26, 0x04, + 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x19, 0x51, + 0x00, 0xbe, 0x9d, 0x90, 0x59, 0xc3, 0x06, 0x44, 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x68, 0xd8, 0xb0, + 0x01, 0x11, 0x10, 0x04, 0xe0, 0xdb, 0x09, 0x5b, 0x35, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0x2c, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x4a, 0x14, 0x42, 0x79, 0xd0, 0xa0, + 0x30, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x4a, 0x32, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, + 0x20, 0xa1, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0x50, 0x28, 0x18, 0x10, 0xdf, 0x4e, 0x78, 0x16, 0x0a, + 0x0c, 0x83, 0x22, 0x03, 0xf1, 0xed, 0x84, 0xc9, 0xa1, 0xc0, 0x30, 0xa8, 0x32, 0x10, 0xdf, 0x4e, + 0xb8, 0x22, 0x0a, 0x0c, 0x83, 0x32, 0x03, 0x49, 0x25, 0x01, 0x17, 0x50, 0x78, 0x01, 0xa5, 0x23, + 0x06, 0x8c, 0x19, 0x84, 0x20, 0x18, 0x64, 0xf6, 0xf0, 0x04, 0x44, 0x71, 0x20, 0xca, 0x32, 0x9a, + 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x7c, + 0x44, 0x01, 0xf8, 0x76, 0xc2, 0xc7, 0x0d, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, 0x00, 0x06, + 0xde, 0xb0, 0x01, 0x11, 0x10, 0x04, 0xe0, 0xdb, 0x09, 0x61, 0xb0, 0x0d, 0x1b, 0x10, 0x01, 0x31, + 0x00, 0x0b, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x4a, 0x14, + 0x42, 0x79, 0xd0, 0xa0, 0x30, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x4a, 0x36, 0x83, 0xf0, 0xfd, 0x04, + 0x21, 0xf0, 0xed, 0x84, 0x20, 0xa1, 0x00, 0x50, 0x7c, 0x3b, 0x61, 0x50, 0x28, 0x18, 0x10, 0xdf, + 0x4e, 0x80, 0x16, 0x0a, 0x0c, 0x83, 0x24, 0x03, 0xf1, 0xed, 0x04, 0xca, 0xa1, 0xc0, 0x30, 0xc8, + 0x32, 0x10, 0xdf, 0x4e, 0xc0, 0x22, 0x0a, 0x0c, 0x83, 0x34, 0x03, 0x49, 0x25, 0x01, 0x17, 0x50, + 0x78, 0x01, 0xa5, 0x23, 0x06, 0xcd, 0x19, 0x84, 0x20, 0x18, 0x6c, 0xf5, 0xf0, 0x04, 0x44, 0x71, + 0x20, 0xca, 0xb2, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, + 0x31, 0x0c, 0x1b, 0x10, 0x1f, 0x51, 0x00, 0xbe, 0x9d, 0xf0, 0x71, 0xc3, 0x06, 0x44, 0x40, 0x0c, + 0x80, 0x6f, 0x27, 0x80, 0x81, 0x37, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x76, 0x42, 0x18, 0x6c, + 0xc3, 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x02, 0x00, 0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x98, 0x82, + 0x28, 0x04, 0x4a, 0x94, 0x07, 0x0d, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x4a, 0x26, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x00, 0xa1, 0x00, 0x40, 0x7c, 0x3b, 0x61, 0x48, + 0x28, 0x18, 0x10, 0xdf, 0x4e, 0x70, 0x16, 0x0a, 0x0c, 0xc4, 0xb7, 0x13, 0x20, 0x86, 0x02, 0xc3, + 0x20, 0xc9, 0x50, 0xd2, 0x48, 0xc0, 0x05, 0x8f, 0x8e, 0x18, 0x24, 0x65, 0x10, 0x82, 0x60, 0x70, + 0xa9, 0x83, 0x12, 0x0c, 0x84, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, + 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x64, 0x44, 0x01, 0xf8, 0x76, 0x42, 0x66, 0x0d, 0x1b, 0x10, + 0x01, 0x31, 0x00, 0xbe, 0x9d, 0xa0, 0x61, 0xc3, 0x06, 0x44, 0x40, 0x10, 0x80, 0x6f, 0x27, 0x6c, + 0xd6, 0xb0, 0x01, 0x11, 0x10, 0x03, 0xb0, 0x00, 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x98, 0x82, + 0x28, 0x04, 0x4a, 0x94, 0x07, 0x0d, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x4a, 0x2a, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x00, 0xa1, 0x00, 0x40, 0x7c, 0x3b, 0x61, 0x48, + 0x28, 0x18, 0x10, 0xdf, 0x4e, 0x78, 0x16, 0x0a, 0x0c, 0xc4, 0xb7, 0x13, 0x22, 0x86, 0x02, 0xc3, + 0xa0, 0xc9, 0x50, 0xd2, 0x48, 0xc0, 0x05, 0x8f, 0x8e, 0x18, 0x28, 0x68, 0x10, 0x82, 0x60, 0xc0, + 0xa5, 0x83, 0x12, 0x0c, 0x84, 0x51, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, + 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x19, 0x51, 0x00, 0xbe, 0x9d, 0x90, 0x59, 0xc3, 0x06, + 0x44, 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x68, 0xd8, 0xb0, 0x01, 0x11, 0x10, 0x04, 0xe0, 0xdb, 0x09, + 0x9b, 0x35, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x98, 0x82, 0x28, 0x04, 0x4a, 0x94, 0x07, 0x0d, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x4a, 0x2e, 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x00, 0xa1, 0x00, 0x40, + 0x7c, 0x3b, 0x61, 0x48, 0x28, 0x18, 0x10, 0xdf, 0x4e, 0x70, 0x16, 0x0a, 0x0c, 0xc4, 0xb7, 0x13, + 0x20, 0x86, 0x02, 0xc3, 0x20, 0xc9, 0x50, 0x7c, 0x3b, 0x81, 0x82, 0x28, 0x30, 0x10, 0xdf, 0x4e, + 0xb0, 0x22, 0x0a, 0x0c, 0x83, 0x30, 0x43, 0xf1, 0xed, 0x04, 0xad, 0xa2, 0xc0, 0x40, 0x7c, 0x3b, + 0x81, 0xb3, 0x28, 0x30, 0x0c, 0xf2, 0x0c, 0x25, 0xa1, 0x04, 0x5c, 0x90, 0xe9, 0x88, 0xc1, 0x93, + 0x06, 0x21, 0x08, 0x06, 0x9d, 0x3c, 0x50, 0xc1, 0x40, 0x18, 0x48, 0xb2, 0x34, 0x0e, 0x34, 0x9a, + 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x6c, 0x40, 0x8c, + 0x01, 0x51, 0x00, 0xbe, 0x9d, 0x30, 0x06, 0x60, 0x30, 0x6c, 0x40, 0x04, 0xc4, 0x00, 0xf8, 0x76, + 0x02, 0x19, 0x88, 0xc1, 0xb0, 0x01, 0x11, 0x10, 0x04, 0xe0, 0xdb, 0x09, 0x65, 0x00, 0x06, 0xc3, + 0x06, 0x44, 0x40, 0x0c, 0xc0, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x98, 0x82, + 0x28, 0x04, 0x4a, 0x94, 0x07, 0x0d, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x4a, 0x32, + 0x83, 0xf0, 0xfd, 0x04, 0x21, 0xf0, 0xed, 0x84, 0x00, 0xa1, 0x00, 0x40, 0x7c, 0x3b, 0x61, 0x48, + 0x28, 0x18, 0x10, 0xdf, 0x4e, 0x78, 0x16, 0x0a, 0x0c, 0xc4, 0xb7, 0x13, 0x22, 0x86, 0x02, 0xc3, + 0xa0, 0xc9, 0x50, 0x7c, 0x3b, 0xa1, 0x82, 0x28, 0x30, 0x10, 0xdf, 0x4e, 0xb8, 0x22, 0x0a, 0x0c, + 0x83, 0x32, 0x43, 0xf1, 0xed, 0x84, 0xad, 0xa2, 0xc0, 0x40, 0x7c, 0x3b, 0xa1, 0xb3, 0x28, 0x30, + 0x0c, 0xfa, 0x0c, 0x25, 0xa1, 0x04, 0x5c, 0x90, 0xe9, 0x88, 0x01, 0xa4, 0x06, 0x21, 0x08, 0x06, + 0x5e, 0x3c, 0x50, 0xc1, 0x40, 0x18, 0x48, 0xb2, 0x34, 0x0e, 0xf4, 0x8d, 0x26, 0x04, 0xc0, 0x68, + 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x0c, 0x1b, 0x10, 0x63, 0x40, 0x14, 0x80, + 0x6f, 0x27, 0x8c, 0x01, 0x18, 0x0c, 0x1b, 0x10, 0x01, 0x31, 0x00, 0xbe, 0x9d, 0x40, 0x06, 0x62, + 0x30, 0x6c, 0x40, 0x04, 0x04, 0x01, 0xf8, 0x76, 0x42, 0x19, 0x80, 0xc1, 0xb0, 0x01, 0x11, 0x10, + 0x03, 0xb0, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, 0x28, 0x0c, 0x00, 0x00, + 0x74, 0x00, 0x4a, 0x1e, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x60, 0x28, 0x00, 0x14, 0xdf, 0x4e, 0x48, + 0x0e, 0x0a, 0x12, 0x83, 0x96, 0x04, 0x19, 0x31, 0x38, 0xd6, 0x20, 0x04, 0xc1, 0xe0, 0xcb, 0x05, + 0x22, 0x10, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x13, 0x06, 0x61, 0x34, 0x81, 0x18, + 0x86, 0x0d, 0x08, 0x88, 0x28, 0x00, 0xdf, 0x4e, 0x80, 0x9e, 0x61, 0x03, 0x22, 0x20, 0x06, 0xc0, + 0xb7, 0x13, 0xa2, 0x67, 0xd8, 0x80, 0x08, 0x08, 0x02, 0xf0, 0xed, 0x04, 0xe9, 0x19, 0x36, 0x20, + 0x02, 0x62, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x1a, + 0x14, 0x44, 0x21, 0x14, 0x06, 0x00, 0x00, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x30, 0x28, 0x00, 0x10, 0xdf, 0x4e, 0x50, 0x0e, 0x0a, 0x12, 0xc4, 0xb7, 0x13, 0x18, 0x84, + 0x82, 0xc4, 0x20, 0x27, 0x51, 0x46, 0x0c, 0x10, 0x31, 0x08, 0x41, 0x30, 0x00, 0x03, 0x5d, 0x30, + 0x02, 0x81, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0xd1, 0x04, 0x62, + 0x18, 0x36, 0x20, 0x26, 0xa2, 0x00, 0x7c, 0x3b, 0x61, 0x82, 0x86, 0x0d, 0x88, 0x80, 0x18, 0x00, + 0xdf, 0x4e, 0xa0, 0xa4, 0x61, 0x03, 0x22, 0x20, 0x08, 0xc0, 0xb7, 0x13, 0xaa, 0x68, 0xd8, 0x80, + 0x08, 0x88, 0x01, 0x58, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x84, 0x82, + 0x28, 0x0c, 0x00, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x68, 0x28, 0x00, + 0x14, 0xdf, 0x4e, 0x50, 0x0e, 0x0a, 0x12, 0x83, 0x98, 0x04, 0x19, 0x31, 0x40, 0xc4, 0x20, 0x04, + 0xc1, 0x00, 0x0c, 0x6c, 0x81, 0x08, 0x04, 0x66, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, + 0x61, 0x10, 0x46, 0x13, 0x88, 0x61, 0xd8, 0x80, 0x80, 0x88, 0x02, 0xf0, 0xed, 0x04, 0xe8, 0x19, + 0x36, 0x20, 0x02, 0x62, 0x00, 0x7c, 0x3b, 0x21, 0x7a, 0x86, 0x0d, 0x88, 0x80, 0x20, 0x00, 0xdf, + 0x4e, 0x90, 0x9e, 0x61, 0x03, 0x22, 0x20, 0x06, 0x60, 0x01, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x94, 0x28, 0x03, 0x1a, 0x14, 0x44, 0x21, 0x14, 0x06, 0x00, 0x00, 0x00, 0x94, 0x00, 0x4a, 0x26, + 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x30, 0x28, 0x00, 0x10, 0xdf, 0x4e, 0x58, 0x0e, 0x0a, 0x12, 0xc4, + 0xb7, 0x13, 0x1a, 0x84, 0x82, 0xc4, 0xa0, 0x27, 0x51, 0x46, 0x0c, 0x92, 0x31, 0x08, 0x41, 0x30, + 0x10, 0x83, 0x5b, 0x30, 0x02, 0x81, 0x78, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x13, + 0x06, 0x61, 0x34, 0x81, 0x18, 0x86, 0x0d, 0x88, 0x89, 0x28, 0x00, 0xdf, 0x4e, 0x98, 0xa0, 0x61, + 0x03, 0x22, 0x20, 0x06, 0xc0, 0xb7, 0x13, 0x28, 0x69, 0xd8, 0x80, 0x08, 0x08, 0x02, 0xf0, 0xed, + 0x84, 0x2a, 0x1a, 0x36, 0x20, 0x02, 0x62, 0x00, 0x16, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x08, 0xaa, 0x8d, 0x06, 0xd0, 0x60, 0x04, 0x80, 0x6a, 0x23, 0x00, 0x63, 0x09, 0x41, + 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x4a, 0x26, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x70, 0x28, 0x00, + 0x14, 0xdf, 0x4e, 0x08, 0x12, 0x0a, 0x6e, 0x24, 0x83, 0x5a, 0xcc, 0x31, 0x2c, 0x8e, 0x32, 0xc8, + 0x10, 0x30, 0xca, 0x0d, 0x01, 0x8e, 0x18, 0x18, 0x40, 0x08, 0x82, 0x81, 0x1d, 0x64, 0xc1, 0x32, + 0x6c, 0x40, 0x44, 0x01, 0x01, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x1a, + 0x14, 0x44, 0x61, 0x50, 0x6d, 0x34, 0x80, 0x06, 0x23, 0x00, 0x54, 0x1b, 0x01, 0x18, 0x4b, 0x08, + 0x02, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x4a, 0x2e, 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x48, 0x28, 0x00, + 0x10, 0xdf, 0x4e, 0x08, 0x14, 0xdf, 0x4e, 0x10, 0x14, 0x0a, 0x62, 0x23, 0x83, 0x44, 0x5c, 0x10, + 0xe1, 0x88, 0x81, 0x01, 0x84, 0x20, 0x18, 0xc0, 0x41, 0x17, 0x60, 0x64, 0xdc, 0x48, 0x06, 0xb5, + 0x98, 0x63, 0x80, 0xaa, 0x67, 0x90, 0x21, 0x88, 0x9e, 0x1b, 0x02, 0x1c, 0x31, 0x30, 0x80, 0x10, + 0x04, 0x03, 0x3b, 0x00, 0x83, 0x00, 0x1a, 0x36, 0x20, 0xb0, 0xa0, 0x00, 0x7c, 0x3b, 0x01, 0xb3, + 0x86, 0x0d, 0x88, 0x00, 0x21, 0x80, 0x0d, 0x89, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x08, 0xba, 0x8d, 0x25, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x4a, 0x16, + 0x83, 0xf0, 0xfd, 0x06, 0x21, 0x50, 0x28, 0x00, 0x14, 0xdf, 0x4e, 0x08, 0x0c, 0x0a, 0x6e, 0x64, + 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xf0, 0x00, 0x0a, 0x8e, 0x0c, 0x6a, 0x31, 0x6c, 0x40, 0x2c, + 0x01, 0x01, 0x2c, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x94, 0x28, 0x03, 0x1a, 0x14, 0x44, 0x61, 0x50, + 0xac, 0x04, 0xe8, 0x36, 0x96, 0x10, 0x04, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xfd, 0x06, + 0x21, 0x38, 0x28, 0x00, 0x10, 0xdf, 0x4e, 0x08, 0x10, 0xdf, 0x4e, 0x10, 0x10, 0x0a, 0x62, 0x63, + 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xe4, 0xe0, 0x0a, 0x92, 0x0c, 0x12, 0x41, 0xc5, 0x8d, 0x8c, + 0x18, 0x18, 0x40, 0x08, 0x82, 0x01, 0x1e, 0x5c, 0xc1, 0x92, 0x41, 0x2d, 0x86, 0x0d, 0x08, 0x29, + 0x28, 0x00, 0xdf, 0x4e, 0x90, 0xa0, 0x61, 0x03, 0x22, 0x28, 0x08, 0x60, 0x43, 0x62, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x80, 0x02, 0x29, 0x83, 0x02, 0x2a, 0xa4, 0x82, 0xa2, + 0xda, 0x08, 0x00, 0x0d, 0x0a, 0x31, 0x80, 0x6a, 0x63, 0x09, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0x40, 0x83, 0xc2, 0x0c, 0xa0, 0x44, 0x0d, 0xd0, 0xa0, 0xf0, 0x0a, 0xa1, + 0x20, 0x00, 0x00, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6c, 0x00, + 0x82, 0x60, 0x40, 0x80, 0xc5, 0x13, 0xf8, 0x76, 0xc2, 0xe4, 0x10, 0x35, 0x2b, 0xc3, 0x06, 0xc4, + 0x10, 0x14, 0x00, 0x09, 0xb3, 0x32, 0xc7, 0x10, 0x54, 0x90, 0x6f, 0x27, 0x14, 0xd2, 0xb0, 0x01, + 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x48, 0xbe, 0x9d, 0x70, 0x48, 0xc3, 0x06, 0x44, 0x20, 0x14, + 0x80, 0x6f, 0x27, 0x20, 0xd2, 0xb0, 0x01, 0x11, 0x64, 0x03, 0xe0, 0xdb, 0x09, 0x89, 0x34, 0x6c, + 0x40, 0x04, 0x12, 0x01, 0xf8, 0x76, 0x82, 0x12, 0x0d, 0x1b, 0x10, 0x41, 0x34, 0x00, 0xbe, 0x9d, + 0xb0, 0x40, 0xc3, 0x06, 0x44, 0x00, 0x0d, 0x00, 0x7d, 0x80, 0x32, 0x62, 0x60, 0xb4, 0x01, 0x08, + 0x82, 0x41, 0xf1, 0x0b, 0x41, 0x43, 0x42, 0x62, 0x10, 0x91, 0x18, 0xbe, 0x9d, 0xf0, 0x48, 0x94, + 0x18, 0xca, 0xb0, 0x01, 0x01, 0x06, 0x04, 0x01, 0xf8, 0x76, 0x02, 0x18, 0x4c, 0xc3, 0x06, 0x44, + 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x84, 0xc1, 0x44, 0x84, 0x6e, 0x0c, 0x1b, 0x10, 0x42, 0x40, 0x00, + 0xbe, 0x9d, 0x30, 0x06, 0x61, 0x30, 0x6c, 0x40, 0x04, 0x05, 0x01, 0x8c, 0x18, 0x18, 0x6c, 0x00, + 0x82, 0x60, 0x40, 0xcc, 0xc5, 0x18, 0x54, 0x0b, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x28, 0xb0, 0x02, + 0x29, 0x83, 0x02, 0x2a, 0xa4, 0x82, 0xa2, 0xda, 0x08, 0x00, 0x19, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x11, 0xa1, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6c, 0x00, 0x82, 0x60, 0x40, 0xe8, + 0x44, 0x12, 0xf8, 0x76, 0x42, 0x83, 0x90, 0x33, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb3, 0x32, 0xc7, 0x10, 0x3c, 0x8a, 0x6f, 0x27, 0x14, 0xcc, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x30, 0xbe, 0x9d, 0x70, 0x30, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, 0x20, + 0xcc, 0xb0, 0x01, 0x11, 0x4c, 0x03, 0xe0, 0xdb, 0x09, 0x09, 0x33, 0x6c, 0x40, 0x04, 0x0c, 0x01, + 0xd0, 0x05, 0x28, 0x23, 0x06, 0x46, 0x1b, 0x80, 0x20, 0x18, 0x14, 0xb5, 0x10, 0x2c, 0x44, 0x18, + 0xca, 0x70, 0x44, 0xd0, 0x10, 0xfe, 0x91, 0xc1, 0x2e, 0x86, 0x0d, 0x88, 0x2b, 0x08, 0x80, 0x11, + 0x03, 0x83, 0x0d, 0x40, 0x10, 0x0c, 0x08, 0xb3, 0xb0, 0x9c, 0x05, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xd0, 0x80, 0x02, 0x21, 0xc3, 0x08, 0x00, 0x0d, 0xca, 0xa0, 0x80, 0x0a, 0xa9, 0xa0, + 0xa8, 0x36, 0x02, 0x40, 0x83, 0x42, 0x0c, 0xa0, 0xda, 0x58, 0xc2, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xd0, 0xa0, 0x30, 0x03, 0x28, 0x51, 0x03, 0x34, 0x28, 0xbc, 0x42, + 0x28, 0x08, 0x00, 0x00, 0x33, 0x11, 0xa4, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6c, 0x00, + 0x82, 0x60, 0x40, 0x80, 0x05, 0x14, 0xf8, 0x76, 0xc2, 0xf4, 0x10, 0x35, 0x2b, 0xc3, 0x06, 0xc4, + 0x10, 0x14, 0x00, 0x09, 0xb3, 0x32, 0xc7, 0x10, 0x44, 0x90, 0x6f, 0x27, 0x14, 0xd3, 0xb0, 0x01, + 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x48, 0xbe, 0x9d, 0x70, 0x48, 0xc3, 0x06, 0x44, 0x20, 0x14, + 0x80, 0x6f, 0x27, 0x20, 0xd2, 0xb0, 0x01, 0x11, 0x68, 0x03, 0xe0, 0xdb, 0x09, 0x89, 0x34, 0x6c, + 0x40, 0x04, 0x12, 0x01, 0xf8, 0x76, 0x82, 0x12, 0x0d, 0x1b, 0x10, 0x41, 0x34, 0x00, 0xbe, 0x9d, + 0xb0, 0x40, 0xc3, 0x06, 0x44, 0x00, 0x0d, 0x00, 0x7d, 0x80, 0x32, 0x62, 0x60, 0xb4, 0x01, 0x08, + 0x82, 0x41, 0xf1, 0x0b, 0x41, 0x43, 0x42, 0x62, 0x10, 0x91, 0x18, 0xbe, 0x9d, 0xf0, 0x48, 0x94, + 0x18, 0xca, 0xb0, 0x01, 0x11, 0x06, 0x04, 0x01, 0xf8, 0x76, 0x42, 0x18, 0x4c, 0xc3, 0x06, 0x44, + 0x40, 0x0c, 0x80, 0x6f, 0x27, 0x88, 0xc1, 0x44, 0x84, 0x6e, 0x0c, 0x1b, 0x10, 0x42, 0x40, 0x00, + 0xbe, 0x9d, 0x40, 0x06, 0x62, 0x30, 0x6c, 0x40, 0x04, 0x05, 0x01, 0x8c, 0x18, 0x18, 0x6c, 0x00, + 0x82, 0x60, 0x40, 0xcc, 0x05, 0x19, 0x54, 0x0b, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x28, 0xb0, 0x02, + 0x21, 0xc3, 0x08, 0x00, 0x0d, 0xca, 0xa0, 0x80, 0x0a, 0xa9, 0xa0, 0xa8, 0x36, 0x02, 0x00, 0x00, + 0x33, 0x11, 0xa1, 0x90, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6c, 0x00, 0x82, 0x60, 0x40, 0xe4, + 0x44, 0x12, 0xf8, 0x76, 0x02, 0x83, 0x50, 0x33, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb3, 0x32, 0xc7, 0x10, 0x28, 0x89, 0x6f, 0x27, 0x14, 0xcc, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x2c, 0xbe, 0x9d, 0x70, 0x2c, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, 0x20, + 0xcb, 0xb0, 0x01, 0x11, 0x4c, 0x03, 0xe0, 0xdb, 0x09, 0xc9, 0x32, 0x6c, 0x40, 0x04, 0x0b, 0x01, + 0x90, 0x05, 0x28, 0x23, 0x06, 0x46, 0x1b, 0x80, 0x20, 0x18, 0x14, 0xb4, 0x10, 0x2c, 0x44, 0x18, + 0xca, 0x70, 0x44, 0x20, 0x11, 0xfe, 0x91, 0xc1, 0x2e, 0x86, 0x0d, 0x88, 0x2b, 0x08, 0x80, 0x11, + 0x03, 0x83, 0x0d, 0x40, 0x10, 0x0c, 0x88, 0xb2, 0xb0, 0x9c, 0x05, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x88, 0x02, 0x29, 0x20, 0x32, 0x8c, 0x00, 0xd0, 0xa0, 0x0c, 0x28, 0x31, 0x02, 0x50, + 0x08, 0xa3, 0x01, 0x65, 0x40, 0xbc, 0x39, 0x88, 0x9a, 0xb0, 0x89, 0x9b, 0xc0, 0x89, 0xb1, 0x08, + 0x20, 0x20, 0x06, 0x32, 0x8c, 0x06, 0xd0, 0x6c, 0x0e, 0x62, 0x27, 0x76, 0x62, 0x27, 0x66, 0x82, + 0x12, 0xa5, 0x40, 0xbc, 0x39, 0x88, 0x9e, 0xb8, 0x89, 0x9b, 0xc0, 0x89, 0x39, 0x88, 0x9a, 0xe8, + 0x89, 0x9b, 0xc0, 0x89, 0xb1, 0x08, 0x20, 0x28, 0x06, 0x4a, 0x14, 0x03, 0xf1, 0xe6, 0x20, 0xc2, + 0xe2, 0x26, 0x6e, 0x02, 0x27, 0xe6, 0x20, 0x6a, 0x22, 0x2c, 0x6e, 0x02, 0x27, 0xc6, 0x22, 0x80, + 0xc0, 0x18, 0xc8, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x34, 0x9b, 0x83, 0xd8, 0x89, 0x9d, + 0xd8, 0x89, 0xb2, 0x20, 0xde, 0x1c, 0x04, 0x4b, 0xdc, 0xc4, 0x4d, 0xe0, 0xc4, 0x1c, 0x44, 0x4d, + 0xb0, 0xc4, 0x4d, 0xe0, 0xc4, 0x58, 0x04, 0x10, 0x1c, 0x03, 0x0d, 0x0a, 0x0c, 0x00, 0x00, 0x00, + 0xbe, 0x9d, 0xe0, 0x6d, 0x14, 0x00, 0x48, 0x7e, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xa0, 0x60, 0x56, + 0x7c, 0x3b, 0x41, 0xf8, 0x28, 0x98, 0x15, 0xdf, 0x4e, 0x20, 0xc0, 0x80, 0x82, 0x59, 0x99, 0x63, + 0x28, 0xc2, 0x00, 0x0c, 0x06, 0x19, 0x02, 0x82, 0x1b, 0x64, 0x08, 0x06, 0x6e, 0xd8, 0x80, 0x40, + 0x83, 0xa0, 0x00, 0x06, 0x19, 0x36, 0x24, 0x1b, 0x64, 0x08, 0x8e, 0x6c, 0x90, 0x21, 0x30, 0x32, + 0xdf, 0x4e, 0x58, 0x83, 0x34, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x3e, 0x26, 0x1b, + 0x64, 0x08, 0x96, 0x6c, 0x90, 0x21, 0x50, 0x32, 0xdf, 0x4e, 0x78, 0x03, 0x36, 0x18, 0x36, 0x20, + 0x02, 0xa1, 0x00, 0x06, 0x19, 0x32, 0x08, 0x1b, 0x64, 0x08, 0x1e, 0x6c, 0x90, 0x21, 0x70, 0x30, + 0xdf, 0x4e, 0x98, 0x03, 0x6c, 0xd8, 0x80, 0x08, 0x84, 0x02, 0x58, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x08, 0x4a, 0x14, 0x02, 0x00, 0x00, 0xbe, 0x9d, 0x50, 0x08, 0x14, 0x00, 0x48, 0x1a, + 0x83, 0xf0, 0x19, 0x07, 0x21, 0x20, 0x28, 0x48, 0x8c, 0x61, 0x03, 0x02, 0x09, 0x06, 0x60, 0x01, + 0x61, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x00, 0xbe, 0x9d, 0x40, 0x04, 0x14, 0x00, 0x48, 0x16, + 0x83, 0xf0, 0x19, 0x07, 0x21, 0x58, 0x28, 0xd8, 0x95, 0x0c, 0x12, 0x31, 0x6c, 0x40, 0x20, 0xc1, + 0x00, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x02, 0x29, 0xa0, 0x02, 0xa3, + 0xc4, 0x08, 0x40, 0x21, 0x8c, 0x06, 0x10, 0x6f, 0x0e, 0x82, 0x26, 0x6a, 0xc2, 0x26, 0x6c, 0x62, + 0x0e, 0x82, 0x26, 0x52, 0xa2, 0x26, 0x6c, 0x62, 0x2c, 0x02, 0x08, 0x04, 0x82, 0x12, 0xa5, 0x40, + 0xbc, 0x39, 0x88, 0x94, 0xd0, 0x09, 0x9b, 0xb0, 0x89, 0x39, 0x08, 0x9a, 0x48, 0x09, 0x9d, 0xb0, + 0x89, 0xb1, 0x08, 0x20, 0x10, 0x0a, 0x4a, 0x14, 0x03, 0xf1, 0xe6, 0x20, 0x54, 0xc2, 0x27, 0x6c, + 0xc2, 0x26, 0xe6, 0x20, 0x68, 0x22, 0x25, 0x7c, 0xc2, 0x26, 0xc6, 0x22, 0x80, 0x40, 0x30, 0x68, + 0x50, 0x64, 0xb4, 0x2b, 0x01, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x70, 0x51, 0x14, 0x00, 0x48, 0x62, + 0x83, 0xf0, 0x19, 0x05, 0x21, 0xa0, 0x6c, 0x56, 0x7c, 0x3b, 0x41, 0xc3, 0x28, 0x98, 0x15, 0xdf, + 0x4e, 0xe0, 0x32, 0x0a, 0x66, 0xc5, 0xb7, 0x13, 0x3c, 0x8d, 0x82, 0x59, 0x19, 0x64, 0x38, 0x0a, + 0x6c, 0x90, 0x21, 0x20, 0xb0, 0x41, 0x86, 0x60, 0xc0, 0x86, 0x0d, 0x88, 0x25, 0x28, 0x80, 0x41, + 0x06, 0x05, 0xb9, 0x06, 0x19, 0x82, 0xe3, 0x1a, 0x64, 0x08, 0x8c, 0xcb, 0xb7, 0x13, 0x1c, 0x32, + 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x1c, 0xe6, 0x1a, 0x64, 0x08, 0x96, 0x6b, 0x90, + 0x21, 0x50, 0x2e, 0xdf, 0x4e, 0x90, 0xce, 0x60, 0xd8, 0x80, 0x08, 0x84, 0x02, 0xf0, 0xed, 0x84, + 0x09, 0x1b, 0x36, 0x20, 0x02, 0x4c, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x88, 0x02, 0x2b, 0x32, 0xda, 0x95, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x70, 0x10, + 0x14, 0x00, 0x48, 0x22, 0x83, 0xf0, 0x19, 0x05, 0x21, 0xc8, 0x64, 0x07, 0xbe, 0x9d, 0x20, 0x20, + 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0x6f, 0x27, 0x0c, 0xc8, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x42, 0x2b, 0x32, 0xda, 0x95, + 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x70, 0x10, 0x14, 0x00, 0x48, 0x22, 0x83, 0xf0, 0x19, 0x05, + 0x21, 0xf0, 0xed, 0x84, 0xe0, 0x18, 0x36, 0x20, 0x02, 0x65, 0x00, 0x7c, 0x3b, 0x41, 0x38, 0x86, + 0x0d, 0x88, 0xe0, 0x10, 0x80, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x12, + 0x2b, 0x32, 0xda, 0x95, 0x00, 0x00, 0x00, 0x00, 0x59, 0xec, 0xc2, 0xb7, 0x13, 0x90, 0x82, 0x02, + 0x00, 0xc9, 0x64, 0x10, 0x3e, 0xa3, 0x20, 0x04, 0xbe, 0x9d, 0x10, 0x20, 0xc3, 0x06, 0x44, 0x60, + 0x04, 0x80, 0x6f, 0x27, 0x08, 0xc8, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0x9d, 0x3d, 0x38, + 0x86, 0x00, 0x00, 0x84, 0x60, 0xc8, 0xc0, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, + 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, 0x8c, 0x26, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, + 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, + 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x89, 0xcd, 0x21, 0xb1, 0xe3, 0x06, 0x49, 0x11, + 0x08, 0x80, 0x10, 0x08, 0xc1, 0x30, 0x9a, 0x10, 0x04, 0xa3, 0x09, 0x02, 0x90, 0x81, 0x61, 0xa7, + 0x23, 0x90, 0x60, 0x40, 0x38, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0b, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0c, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0a, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0a, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0e, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x07, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x07, + 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0d, + 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xd1, 0x0f, 0x38, 0x40, 0xfe, 0x80, 0x04, 0x81, 0x10, 0x58, + 0xa0, 0x09, 0x81, 0x06, 0xd1, 0x10, 0x78, 0x10, 0x0f, 0x81, 0x08, 0xcc, 0x11, 0x98, 0xd0, 0x1d, + 0x81, 0x0a, 0x88, 0x12, 0xb8, 0x60, 0x2c, 0x81, 0x0c, 0xd9, 0x12, 0xd8, 0x30, 0x2f, 0x81, 0x0e, + 0x94, 0x13, 0xf8, 0x10, 0x3b, 0x81, 0x10, 0xe8, 0x13, 0x18, 0x51, 0x4c, 0x81, 0x12, 0xd9, 0x14, + 0x38, 0xa1, 0x4f, 0x81, 0x14, 0xdc, 0x15, 0x58, 0x01, 0x68, 0x81, 0x16, 0xda, 0x16, 0x78, 0xf1, + 0x7e, 0x81, 0x19, 0x80, 0x18, 0xb8, 0x11, 0x89, 0x81, 0x1d, 0xad, 0x18, 0xf8, 0x81, 0x8c, 0x81, + 0x21, 0xd8, 0x18, 0x38, 0x82, 0x8e, 0x81, 0x25, 0xfb, 0x18, 0x78, 0xe2, 0x98, 0x81, 0x29, 0xac, + 0x19, 0xb8, 0x92, 0x9c, 0x81, 0x2d, 0xdb, 0x19, 0xf8, 0xd2, 0x9e, 0x81, 0x30, 0xfe, 0x19, 0x18, + 0x63, 0xa9, 0x81, 0x33, 0xb9, 0x1a, 0x58, 0xc3, 0xad, 0x81, 0x37, 0x85, 0x1b, 0x98, 0xe3, 0xba, + 0x81, 0x3b, 0xd2, 0x1b, 0xd8, 0x73, 0xbf, 0x81, 0x3f, 0xa6, 0x1c, 0x18, 0x54, 0xcd, 0x81, 0x43, + 0xf2, 0x1c, 0x58, 0x24, 0xd9, 0x81, 0x47, 0xaf, 0x1d, 0x98, 0xf4, 0xdc, 0x81, 0x4a, 0xe6, 0x1d, + 0xb8, 0xb4, 0xe8, 0x81, 0x4c, 0x9d, 0x1e, 0xd8, 0xc4, 0xeb, 0x81, 0x4f, 0xfa, 0x1e, 0x18, 0x35, + 0xfa, 0x81, 0x52, 0xe2, 0x1f, 0x38, 0xb5, 0x08, 0x82, 0x54, 0xd3, 0x20, 0x58, 0x05, 0x0e, 0x82, + 0x56, 0xed, 0x20, 0x78, 0x75, 0x1a, 0x82, 0x58, 0xb9, 0x21, 0x98, 0xa5, 0x1c, 0x82, 0x5a, 0xdc, + 0x21, 0xb8, 0x25, 0x1e, 0x82, 0x5c, 0xe8, 0x21, 0xd8, 0xe5, 0x1e, 0x82, 0x5e, 0xf4, 0x21, 0xf8, + 0xb5, 0x1f, 0x82, 0x60, 0x82, 0x22, 0x18, 0x96, 0x28, 0x82, 0x62, 0x90, 0x22, 0x38, 0x76, 0x29, + 0x82, 0x64, 0xa2, 0x22, 0x58, 0x86, 0x2a, 0x82, 0x66, 0xae, 0x22, 0x78, 0x46, 0x2b, 0x82, 0x68, + 0xba, 0x22, 0x98, 0x06, 0x2c, 0x82, 0x6a, 0xc6, 0x22, 0xb8, 0xc6, 0x2c, 0x82, 0x6c, 0xd2, 0x22, + 0xd8, 0x86, 0x2d, 0x82, 0x6e, 0xde, 0x22, 0xf8, 0x46, 0x2e, 0x82, 0x70, 0xea, 0x22, 0x18, 0x07, + 0x2f, 0x82, 0x72, 0xf6, 0x22, 0x38, 0xc7, 0x2f, 0x82, 0x74, 0x82, 0x23, 0x58, 0x87, 0x38, 0x82, + 0x76, 0x8e, 0x23, 0x78, 0x47, 0x39, 0x82, 0x78, 0x9a, 0x23, 0x98, 0x07, 0x3a, 0x82, 0x7a, 0xa6, + 0x23, 0xb8, 0xc7, 0x3a, 0x82, 0x7c, 0xb2, 0x23, 0xd8, 0x87, 0x3b, 0x82, 0x7e, 0xbe, 0x23, 0xf8, + 0x47, 0x3c, 0x82, 0x80, 0x01, 0xca, 0x23, 0x18, 0x18, 0x00, 0x3d, 0x82, 0x82, 0x01, 0xd6, 0x23, + 0x38, 0x18, 0xc0, 0x3d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x0c, 0x00, 0x00, + 0x4f, 0x03, 0x00, 0x00, 0x12, 0x03, 0x94, 0x70, 0x3a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x79, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0xa0, 0x0f, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x51, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x6c, 0x10, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa2, 0x10, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xbd, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd7, 0x10, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xf1, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0b, 0x11, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x29, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x47, 0x11, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x65, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x83, 0x11, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa1, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xbf, 0x11, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xdb, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xca, 0x01, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xf7, 0x11, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x13, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x2b, 0x12, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x43, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5b, 0x12, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x75, 0x12, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc6, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xc6, 0x02, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xac, 0x12, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xc9, 0x12, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x3a, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3a, 0x03, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xe5, 0x12, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x59, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x72, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x72, 0x03, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x1a, 0x13, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xc5, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x16, 0x04, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x51, 0x13, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x50, 0x04, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x6e, 0x13, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x8a, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x8a, 0x04, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x8a, 0x13, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xa9, 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc2, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xc2, 0x04, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xa5, 0x13, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xbb, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xf4, 0x04, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd1, 0x13, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x27, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x27, 0x05, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xf2, 0x13, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x4b, 0x05, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x19, 0x14, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x9a, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xbe, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xbe, 0x05, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x3f, 0x14, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0xe7, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x11, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x11, 0x06, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x6b, 0x14, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x5f, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x5f, 0x06, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x8c, 0x14, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xb3, 0x14, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xd2, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xf6, 0x06, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xf6, 0x06, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xd9, 0x14, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x95, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x95, 0x07, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x24, 0x15, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xb7, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xd4, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xd4, 0x07, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x43, 0x15, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0xf6, 0x07, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x19, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x19, 0x08, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x68, 0x15, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x64, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x64, 0x08, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x8d, 0x15, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x8c, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xb2, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xaf, 0x08, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd7, 0x15, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0xd2, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xf6, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xef, 0x08, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x15, 0x16, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x37, 0x16, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x4a, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x66, 0x09, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x55, 0x16, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x70, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x99, 0x09, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x87, 0x16, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xae, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa7, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xcc, 0x09, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc5, 0x16, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0xe8, 0x09, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xeb, 0x16, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0f, 0x17, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x2e, 0x0a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x39, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x56, 0x0a, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5b, 0x17, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x7d, 0x17, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x96, 0x0a, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x98, 0x17, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xaf, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xb4, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc9, 0x0a, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd0, 0x17, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xe3, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xed, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xfe, 0x0a, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0a, 0x18, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x19, 0x0b, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x2d, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3a, 0x0b, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x5c, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x75, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x7e, 0x0b, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x9a, 0x18, 0x00, 0x00, + 0x25, 0x00, 0x00, 0x00, 0xa1, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xbf, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc4, 0x0b, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdb, 0x18, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xde, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xf8, 0x18, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf9, 0x0b, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x15, 0x19, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x14, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x33, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x51, 0x19, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x4c, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x6d, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x66, 0x0c, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8a, 0x19, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x81, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xa7, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x9c, 0x0c, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc5, 0x19, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xe3, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xd4, 0x0c, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xee, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x1c, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x09, 0x0d, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x39, 0x1a, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x24, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x57, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x72, 0x1a, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x59, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x8e, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x73, 0x0d, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xaa, 0x1a, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xc7, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xa8, 0x0d, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe3, 0x1a, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xc2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xdd, 0x0d, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1d, 0x1b, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x3b, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x14, 0x0e, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x57, 0x1b, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x74, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x49, 0x0e, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x91, 0x1b, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x64, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xaf, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xcd, 0x1b, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x9c, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0xe9, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xb6, 0x0e, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xd1, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x23, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xec, 0x0e, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x41, 0x1c, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x28, 0x00, 0x00, 0x24, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x24, 0x0f, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x31, 0x0f, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x31, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x2c, 0x00, 0x00, 0x3e, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x5b, 0x0f, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x5b, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x2c, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x0c, 0x00, 0x00, 0x1b, 0x07, 0x00, 0x00, 0x12, 0x03, 0x94, 0xbf, 0x78, 0x00, 0x00, 0x00, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, + 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, + 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2e, 0x70, 0x30, 0x6c, + 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, + 0x2e, 0x70, 0x30, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, + 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, + 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, + 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, + 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, + 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, + 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, + 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, + 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x6c, 0x6c, + 0x76, 0x6d, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, + 0x2e, 0x66, 0x61, 0x64, 0x64, 0x2e, 0x76, 0x34, 0x66, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, + 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, + 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, 0x69, 0x31, 0x36, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x61, + 0x72, 0x6d, 0x36, 0x34, 0x2d, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x73, 0x2d, 0x6d, 0x73, 0x76, 0x63, 0x31, 0x39, 0x2e, 0x33, 0x33, 0x2e, 0x30, + 0x2f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x2f, 0x43, 0x6c, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x4c, 0x75, 0x69, 0x73, 0x61, 0x43, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x73, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2f, 0x66, 0x61, 0x6c, + 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2f, 0x66, 0x61, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x70, + 0x69, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x77, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x73, 0x2e, 0x61, 0x72, 0x6d, 0x36, 0x34, 0x2e, 0x6c, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, + 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, + 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, + 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, + 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, + 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x34, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, + 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, + 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, + 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, + 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x69, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, + 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, + 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, + 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, + 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, + 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, + 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, + 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x6c, + 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.windows.x86_64.inl b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.windows.x86_64.inl new file mode 100644 index 000000000..07f61e14e --- /dev/null +++ b/src/backends/fallback/fallback_builtin/fallback_device_api_wrappers.windows.x86_64.inl @@ -0,0 +1,1918 @@ + +static const unsigned char luisa_fallback_backend_device_builtin_module[30640] = { + 0x42, 0x43, 0xc0, 0xde, 0x35, 0x14, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x62, 0x0c, 0x30, 0x24, + 0x4a, 0x59, 0xbe, 0x66, 0xdd, 0xfb, 0xb5, 0x7f, 0x0b, 0x51, 0x80, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x21, 0x0c, 0x00, 0x00, 0x72, 0x13, 0x00, 0x00, 0x0b, 0x02, 0x21, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x1c, 0x45, 0x02, + 0x42, 0x92, 0x0b, 0x42, 0xe4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x72, 0x88, + 0x48, 0x70, 0xc4, 0x21, 0x23, 0x44, 0x12, 0x87, 0x8c, 0x10, 0x41, 0x92, 0x02, 0x64, 0xc8, 0x08, + 0xb1, 0x14, 0x20, 0x43, 0x46, 0x88, 0x20, 0xc9, 0x01, 0x32, 0x72, 0x84, 0x58, 0x0e, 0x90, 0x91, + 0x23, 0x44, 0x90, 0xa1, 0x82, 0xa2, 0x02, 0x19, 0xc3, 0x07, 0xcb, 0x15, 0x19, 0x72, 0x8c, 0x8c, + 0x25, 0x10, 0x1d, 0x3a, 0x74, 0xc8, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, + 0x22, 0x66, 0x04, 0x10, 0xb2, 0x42, 0x82, 0xc9, 0x11, 0x52, 0x42, 0x82, 0xc9, 0x91, 0x71, 0xc2, + 0x50, 0x48, 0x0a, 0x09, 0x26, 0x47, 0xc6, 0x05, 0x42, 0x72, 0x26, 0x08, 0x4a, 0x81, 0x46, 0x00, + 0x0a, 0x11, 0x00, 0x00, 0x00, 0x73, 0x04, 0xa0, 0x50, 0x86, 0xc0, 0x00, 0x30, 0x47, 0x10, 0x94, + 0x22, 0x00, 0x00, 0x0c, 0x0a, 0x65, 0x08, 0x00, 0x00, 0x33, 0x00, 0x45, 0x40, 0x00, 0xe6, 0x08, + 0xc0, 0xa0, 0x18, 0x01, 0x00, 0x60, 0xa0, 0x50, 0xdc, 0x22, 0x4d, 0x11, 0x25, 0x4c, 0x3e, 0xd2, + 0x4c, 0x38, 0x22, 0x14, 0x0a, 0x85, 0xe2, 0x18, 0x69, 0x8a, 0x28, 0x61, 0xf2, 0x29, 0xa4, 0x99, + 0x70, 0x44, 0x28, 0x14, 0x0a, 0xc5, 0x35, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0x17, 0x8b, 0x03, 0x4c, + 0x38, 0x22, 0x10, 0x08, 0x04, 0xa2, 0x18, 0x01, 0xc0, 0x40, 0xa1, 0x00, 0x94, 0x23, 0x00, 0x00, + 0x0c, 0x14, 0x0a, 0x45, 0x39, 0x02, 0x80, 0x81, 0x42, 0xa1, 0x00, 0x94, 0x22, 0x00, 0x50, 0x00, + 0x00, 0xc5, 0x08, 0x00, 0x00, 0x0a, 0x04, 0xa2, 0x18, 0x01, 0x80, 0x02, 0x80, 0x00, 0x94, 0x23, + 0x00, 0x00, 0x28, 0x10, 0x08, 0x44, 0x39, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x25, 0x00, + 0x00, 0x28, 0x10, 0x08, 0x04, 0x02, 0x81, 0x28, 0x48, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x08, 0x40, + 0x59, 0x02, 0x00, 0x80, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x44, 0x41, 0x02, 0x00, 0x80, 0x02, + 0x81, 0x40, 0x20, 0x4a, 0x13, 0x00, 0x00, 0x14, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x88, + 0xe2, 0x04, 0x00, 0x00, 0x05, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x51, 0x8a, 0x00, + 0x00, 0xa0, 0x50, 0x14, 0x23, 0x00, 0x00, 0x28, 0x14, 0x8a, 0x62, 0x04, 0x00, 0x0a, 0x80, 0x02, + 0x50, 0x8e, 0x00, 0x00, 0xa0, 0x50, 0x28, 0x14, 0xa5, 0x08, 0x00, 0x14, 0x0a, 0x40, 0x21, 0x02, + 0x00, 0x05, 0xa0, 0x18, 0x01, 0x00, 0x00, 0xa1, 0x00, 0x94, 0x22, 0x00, 0x00, 0x28, 0x00, 0x85, + 0x08, 0x00, 0x14, 0x8a, 0x42, 0x04, 0x00, 0x8a, 0x42, 0x19, 0x14, 0x00, 0x45, 0x19, 0x06, 0x80, + 0x41, 0x19, 0x10, 0x00, 0x44, 0x21, 0x14, 0x00, 0x85, 0xa2, 0x10, 0x03, 0xc0, 0x60, 0x50, 0x08, + 0x04, 0x00, 0x81, 0x28, 0x83, 0x42, 0xa1, 0x98, 0x23, 0x80, 0xca, 0xe0, 0x72, 0xb9, 0x86, 0x11, + 0x08, 0xa4, 0x0c, 0x08, 0x04, 0x6c, 0x18, 0x41, 0x70, 0x83, 0x32, 0xc8, 0x64, 0xb2, 0x81, 0x80, + 0x61, 0x04, 0x01, 0x99, 0x23, 0x40, 0x86, 0x11, 0x04, 0x65, 0x18, 0x81, 0x50, 0x86, 0x11, 0x06, + 0x64, 0x18, 0x61, 0x50, 0x6e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0x7f, 0x43, 0x9a, 0x61, 0x21, 0x24, + 0x89, 0x5d, 0x9c, 0x09, 0x11, 0x80, 0x01, 0x00, 0x70, 0x8b, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x40, + 0xe3, 0x34, 0x88, 0x40, 0x28, 0x14, 0x8a, 0x83, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0xf7, 0x98, 0x20, + 0x22, 0x88, 0x15, 0xc0, 0xd0, 0x00, 0x83, 0xf1, 0x32, 0x40, 0x71, 0x90, 0x34, 0x45, 0x94, 0x30, + 0xf9, 0x1e, 0x13, 0x44, 0x04, 0x11, 0x22, 0x13, 0x42, 0x10, 0x08, 0x04, 0x02, 0xa1, 0x50, 0xf8, + 0x6e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xdf, 0x63, 0x82, 0x88, 0x20, 0x56, 0x00, 0x0b, 0x91, 0x09, + 0x09, 0xbd, 0x5f, 0x32, 0x20, 0x8e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0x5f, 0x13, 0x04, 0x62, 0x11, + 0x1b, 0x69, 0x02, 0x1a, 0x81, 0x40, 0x46, 0xd0, 0x66, 0xb3, 0x29, 0x00, 0x46, 0x50, 0x14, 0x8c, + 0x30, 0x28, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x7d, 0x03, 0x00, 0x00, 0x1b, 0xf6, 0x24, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x10, 0x00, 0x53, 0x00, 0xfc, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0x00, + 0x09, 0xe8, 0x83, 0xc0, 0x16, 0x86, 0x20, 0x0c, 0x04, 0x22, 0x1c, 0xe0, 0x01, 0x1e, 0xe4, 0xe1, + 0x1d, 0xf0, 0xa1, 0x0d, 0xcc, 0xa1, 0x1e, 0xdc, 0x61, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, + 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x68, 0x87, + 0x74, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x38, 0x87, 0x70, 0x60, 0x87, 0x36, 0xb0, 0x87, 0x72, + 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x83, 0x7b, 0x48, 0x07, 0x72, 0xa0, 0x07, 0x74, 0x00, + 0xe0, 0x00, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, + 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, + 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, + 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, + 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, + 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, + 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, + 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, + 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, + 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, + 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0x00, 0x1f, 0xf0, 0xc0, 0x0e, 0xda, 0xc0, 0x0e, 0xe8, + 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, + 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x58, 0x83, 0x71, 0x68, 0x87, 0x77, 0xb0, + 0x07, 0x36, 0x58, 0x83, 0x71, 0xc0, 0x07, 0x3c, 0x60, 0x83, 0x35, 0x30, 0x07, 0x7c, 0x98, 0x07, + 0x79, 0x60, 0x83, 0x35, 0x68, 0x87, 0x76, 0xc0, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, + 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x07, 0x39, 0x60, 0x83, 0x35, 0xc0, 0x07, 0x3c, 0xb8, + 0x03, 0x80, 0xa0, 0x87, 0x7a, 0x70, 0x87, 0x72, 0x68, 0x83, 0x71, 0x80, 0x87, 0x7a, 0x00, 0xce, + 0xa1, 0x1c, 0xdc, 0xa1, 0x1c, 0xe4, 0x21, 0x1d, 0xc6, 0x01, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, + 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, + 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x03, 0x22, 0x04, 0xc0, 0x02, 0x90, 0x02, 0x50, + 0x6d, 0x40, 0x06, 0x01, 0x58, 0x00, 0x52, 0x00, 0xaa, 0x0d, 0x08, 0x31, 0x00, 0x0b, 0x40, 0x0a, + 0x00, 0x1d, 0x6c, 0x78, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x53, 0x00, 0xfc, 0x00, 0xf8, + 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, 0x85, 0x61, 0x03, 0x61, 0x04, 0x00, 0x1f, 0x6c, 0x20, 0x0e, + 0x01, 0x58, 0x36, 0x34, 0xc8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xc0, 0x29, 0x00, 0x7e, 0x00, 0x48, + 0x40, 0x1f, 0x04, 0xb6, 0x30, 0x6c, 0x40, 0x92, 0x00, 0x48, 0x80, 0x05, 0xa0, 0x83, 0x0d, 0x88, + 0x22, 0x00, 0x09, 0xb0, 0x00, 0xd5, 0x06, 0x62, 0x21, 0x00, 0x3e, 0xd8, 0x80, 0x30, 0x02, 0xb0, + 0x00, 0xa4, 0x00, 0xd0, 0xc1, 0x86, 0x3d, 0x69, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x04, 0xc0, + 0x14, 0x00, 0x3f, 0x00, 0xe0, 0x00, 0xf8, 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, 0x85, 0x20, 0x08, + 0x03, 0x81, 0x08, 0x07, 0x78, 0x80, 0x07, 0x79, 0x78, 0x07, 0x7c, 0x68, 0x03, 0x73, 0xa8, 0x07, + 0x77, 0x18, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, + 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xda, 0x21, 0x1d, 0xdc, 0xa1, 0x0d, 0xd8, 0xa1, 0x1c, + 0xce, 0x21, 0x1c, 0xd8, 0xa1, 0x0d, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, + 0xe0, 0x1e, 0xd2, 0x81, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x38, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, + 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, + 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xdc, + 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, + 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, + 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, 0x87, + 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, + 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x80, 0x1e, 0xe4, 0x21, 0x1c, 0xe0, 0x01, 0x1e, + 0xd2, 0xc1, 0x1d, 0xce, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, + 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, 0x7a, 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, + 0x78, 0x07, 0x7a, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, 0x7a, 0x30, + 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, 0x7d, 0x28, 0x07, 0x00, 0x0f, 0x00, + 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, 0xc6, 0x01, 0x1e, 0xea, 0x01, + 0xc0, 0x07, 0x3c, 0xb0, 0x83, 0x36, 0xb0, 0x03, 0x3a, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, + 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, + 0x79, 0x00, 0xd6, 0x60, 0x1c, 0xda, 0xe1, 0x1d, 0xec, 0x81, 0x0d, 0xd6, 0x60, 0x1c, 0xf0, 0x01, + 0x0f, 0xd8, 0x60, 0x0d, 0xcc, 0x01, 0x1f, 0xe6, 0x41, 0x1e, 0xd8, 0x60, 0x0d, 0xda, 0xa1, 0x1d, + 0xf0, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xd8, 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xca, + 0x41, 0x0e, 0xd8, 0x60, 0x0d, 0xf0, 0x01, 0x0f, 0xee, 0x00, 0x20, 0xe8, 0xa1, 0x1e, 0xdc, 0xa1, + 0x1c, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x80, 0x73, 0x28, 0x07, 0x77, 0x28, 0x07, 0x79, 0x48, + 0x87, 0x71, 0x00, 0x88, 0x7a, 0x70, 0x87, 0x79, 0x08, 0x07, 0x73, 0x28, 0x87, 0x36, 0x30, 0x07, + 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, + 0xd8, 0x50, 0x38, 0x40, 0x70, 0x0b, 0x27, 0xb4, 0x01, 0x4e, 0x9e, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0x00, 0x01, 0x30, 0x05, 0x40, 0x0a, 0xc2, 0x40, 0x20, 0xc2, 0x01, 0x1e, 0xe0, 0x41, 0x1e, 0xde, + 0x01, 0x1f, 0xda, 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, + 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x76, 0x48, + 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x73, 0x08, 0x07, 0x76, 0x68, 0x03, 0x7b, 0x28, 0x87, + 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, 0x07, 0x7a, 0x40, 0x07, 0x00, + 0x0e, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, + 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, + 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, + 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, + 0xdc, 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, + 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, + 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, + 0x07, 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, + 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, + 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, + 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, + 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, + 0x68, 0x83, 0x71, 0x80, 0x87, 0x7a, 0x00, 0xf0, 0x01, 0x0f, 0xec, 0xa0, 0x0d, 0xec, 0x80, 0x0e, + 0x00, 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0xa1, 0x1c, 0xc2, + 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0x80, 0x35, 0x18, 0x87, 0x76, 0x78, 0x07, 0x7b, + 0x60, 0x83, 0x35, 0x18, 0x07, 0x7c, 0xc0, 0x03, 0x36, 0x58, 0x03, 0x73, 0xc0, 0x87, 0x79, 0x90, + 0x07, 0x36, 0x58, 0x83, 0x76, 0x68, 0x07, 0x7c, 0x60, 0x83, 0x35, 0x98, 0x87, 0x79, 0x28, 0x07, + 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x90, 0x03, 0x36, 0x58, 0x03, 0x7c, 0xc0, 0x83, 0x3b, + 0x00, 0x08, 0x7a, 0xa8, 0x07, 0x77, 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, 0xa8, 0x07, 0xe0, 0x1c, + 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, + 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, + 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0xbc, 0x08, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x03, + 0x20, 0x11, 0xe1, 0x00, 0x0f, 0xf0, 0x20, 0x0f, 0xef, 0x80, 0x0f, 0x6d, 0x60, 0x0e, 0xf5, 0xe0, + 0x0e, 0xe3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, + 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa4, 0x83, 0x3b, 0x98, 0xc3, + 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, + 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, + 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, + 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1, 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, + 0x90, 0x43, 0x1b, 0xe8, 0x43, 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, + 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, + 0xf0, 0x0e, 0x6d, 0x40, 0x0f, 0xf2, 0x10, 0x0e, 0xf0, 0x00, 0x0f, 0xe9, 0xe0, 0x0e, 0xe7, 0xd0, + 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xcc, + 0x03, 0x3d, 0x84, 0xc3, 0x38, 0xac, 0x43, 0x1b, 0xc0, 0x83, 0x3c, 0xbc, 0x03, 0x3d, 0x94, 0xc3, + 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, + 0xb4, 0xc1, 0x3c, 0xa4, 0x83, 0x3e, 0x94, 0x03, 0x80, 0x07, 0x00, 0x41, 0x0f, 0xe1, 0x20, 0x0f, + 0xe7, 0x50, 0x0e, 0xf4, 0xd0, 0x06, 0xe3, 0x00, 0x0f, 0xf5, 0x00, 0xe0, 0x03, 0x1e, 0xd8, 0x41, + 0x1b, 0xd8, 0x01, 0x1d, 0x00, 0x04, 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, + 0x98, 0x43, 0x39, 0x84, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6b, 0x30, 0x0e, + 0xed, 0xf0, 0x0e, 0xf6, 0xc0, 0x06, 0x6b, 0x30, 0x0e, 0xf8, 0x80, 0x07, 0x6c, 0xb0, 0x06, 0xe6, + 0x80, 0x0f, 0xf3, 0x20, 0x0f, 0x6c, 0xb0, 0x06, 0xed, 0xd0, 0x0e, 0xf8, 0xc0, 0x06, 0x6b, 0x30, + 0x0f, 0xf3, 0x50, 0x0e, 0x6c, 0xb0, 0x06, 0xf3, 0x30, 0x0f, 0xe5, 0x20, 0x07, 0x6c, 0xb0, 0x06, + 0xf8, 0x80, 0x07, 0x77, 0x00, 0x10, 0xf4, 0x50, 0x0f, 0xee, 0x50, 0x0e, 0x6d, 0x30, 0x0e, 0xf0, + 0x50, 0x0f, 0xc0, 0x39, 0x94, 0x83, 0x3b, 0x94, 0x83, 0x3c, 0xa4, 0xc3, 0x38, 0x00, 0x44, 0x3d, + 0xb8, 0xc3, 0x3c, 0x84, 0x83, 0x39, 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, + 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x6c, 0x60, 0xa2, 0x00, 0xd8, + 0x05, 0x20, 0x17, 0x8c, 0x8e, 0x09, 0x02, 0x68, 0x03, 0x21, 0x09, 0x00, 0x29, 0x6c, 0x20, 0xa6, + 0x01, 0x20, 0x85, 0x0d, 0x04, 0x45, 0x00, 0xa4, 0xb0, 0x81, 0xa8, 0x0a, 0x80, 0x14, 0x36, 0x30, + 0x56, 0x00, 0xec, 0x02, 0x90, 0x0b, 0x46, 0xd7, 0x04, 0x01, 0xb4, 0x81, 0xb9, 0x02, 0x60, 0x17, + 0x80, 0x5c, 0x30, 0x3a, 0x27, 0x08, 0xa0, 0x0d, 0x08, 0x36, 0x00, 0x0b, 0x40, 0x0a, 0x40, 0xb5, + 0x81, 0xc8, 0x02, 0x80, 0x14, 0x36, 0x10, 0x9a, 0x01, 0x90, 0xc2, 0x06, 0x64, 0x23, 0x80, 0x05, + 0x20, 0x05, 0x80, 0x0e, 0x36, 0x1c, 0x1c, 0x01, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0xe1, 0xe8, + 0x0a, 0x80, 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x88, 0x57, 0x00, 0x0b, 0x40, 0x0a, 0x00, 0x1d, + 0x6c, 0x38, 0x3e, 0x03, 0x20, 0x85, 0xe0, 0x16, 0x4e, 0x68, 0x03, 0x02, 0x06, 0x04, 0xb0, 0x00, + 0xa4, 0x00, 0x54, 0x1b, 0x90, 0x30, 0x28, 0x80, 0x05, 0x20, 0x05, 0xa0, 0xda, 0x80, 0x88, 0x81, + 0x01, 0x2c, 0x00, 0x29, 0x00, 0x74, 0xb0, 0xe1, 0x18, 0x83, 0x03, 0x20, 0x85, 0xe0, 0x16, 0x4e, + 0x68, 0xc3, 0x41, 0x06, 0x08, 0x40, 0x0a, 0xc1, 0x2d, 0x9c, 0xd0, 0x86, 0xa3, 0x0c, 0x12, 0x80, + 0x14, 0x82, 0x5b, 0x38, 0xa1, 0x0d, 0x88, 0x19, 0x1c, 0xc0, 0x02, 0x90, 0x02, 0x40, 0x07, 0x1b, + 0x8e, 0x33, 0x50, 0x00, 0x52, 0x08, 0x6e, 0xe1, 0x84, 0x36, 0x1c, 0x68, 0xb0, 0x00, 0xa4, 0x10, + 0xdc, 0xc2, 0x09, 0x6d, 0x38, 0xd2, 0x80, 0x01, 0x48, 0x21, 0xb8, 0x85, 0x13, 0xda, 0x70, 0xa8, + 0x41, 0x03, 0x90, 0x42, 0x70, 0x0b, 0x27, 0xb4, 0x61, 0x4f, 0xd6, 0xe0, 0xff, 0xff, 0xff, 0xff, + 0x07, 0x40, 0x00, 0x4c, 0x01, 0xf0, 0x03, 0x00, 0x0e, 0x80, 0x3f, 0x00, 0x24, 0xa0, 0x0f, 0x02, + 0x5b, 0x98, 0x82, 0x30, 0x10, 0x88, 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, + 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, + 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, + 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, + 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x80, 0x03, 0x80, 0x70, + 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, + 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, + 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, + 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, + 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, + 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, + 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, + 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, + 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, + 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, + 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, + 0xe0, 0xa1, 0x1e, 0x00, 0x7c, 0xc0, 0x03, 0x3b, 0x68, 0x03, 0x3b, 0xa0, 0x03, 0x80, 0xa0, 0x87, + 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, + 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, 0x0d, 0xc6, 0xa1, 0x1d, 0xde, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, + 0xc6, 0x01, 0x1f, 0xf0, 0x80, 0x0d, 0xd6, 0xc0, 0x1c, 0xf0, 0x61, 0x1e, 0xe4, 0x81, 0x0d, 0xd6, + 0xa0, 0x1d, 0xda, 0x01, 0x1f, 0xd8, 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xca, 0x81, 0x0d, 0xd6, 0x60, + 0x1e, 0xe6, 0xa1, 0x1c, 0xe4, 0x80, 0x0d, 0xd6, 0x00, 0x1f, 0xf0, 0xe0, 0x0e, 0x00, 0x82, 0x1e, + 0xea, 0xc1, 0x1d, 0xca, 0xa1, 0x0d, 0xc6, 0x01, 0x1e, 0xea, 0x01, 0x38, 0x87, 0x72, 0x70, 0x87, + 0x72, 0x90, 0x87, 0x74, 0x18, 0x07, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, + 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, + 0xea, 0xa1, 0x1c, 0x80, 0x0d, 0x07, 0x1b, 0x0c, 0x00, 0x29, 0x04, 0xb7, 0x70, 0x42, 0x1b, 0xf6, + 0xa4, 0x0d, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x04, 0xc0, 0x14, 0x00, 0x3f, 0x00, 0xe0, 0x00, + 0xf8, 0x03, 0x40, 0x02, 0xfa, 0x20, 0xb0, 0x85, 0x31, 0x08, 0xc2, 0x40, 0x20, 0xc2, 0x01, 0x1e, + 0xe0, 0x41, 0x1e, 0xde, 0x01, 0x1f, 0xda, 0xc0, 0x1c, 0xea, 0xc1, 0x1d, 0xc6, 0xa1, 0x0d, 0xcc, + 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x88, 0x76, 0x48, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28, 0x87, 0x73, 0x08, 0x07, 0x76, 0x68, + 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0xb8, 0x87, 0x74, 0x20, 0x07, + 0x7a, 0x40, 0x07, 0x00, 0x0e, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd2, 0xc1, 0x1d, 0xcc, 0x61, + 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, + 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, + 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, + 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, + 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, + 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, + 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, + 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, + 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, + 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, + 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, + 0x73, 0x28, 0x07, 0x7a, 0x68, 0x83, 0x71, 0x80, 0x87, 0x7a, 0x00, 0xf0, 0x01, 0x0f, 0xec, 0xa0, + 0x0d, 0xec, 0x80, 0x0e, 0x00, 0x82, 0x1e, 0xc2, 0x41, 0x1e, 0xce, 0xa1, 0x1c, 0xe8, 0xa1, 0x0d, + 0xcc, 0xa1, 0x1c, 0xc2, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x61, 0x1e, 0x80, 0x35, 0x18, 0x87, + 0x76, 0x78, 0x07, 0x7b, 0x60, 0x83, 0x35, 0x18, 0x07, 0x7c, 0xc0, 0x03, 0x36, 0x58, 0x03, 0x73, + 0xc0, 0x87, 0x79, 0x90, 0x07, 0x36, 0x58, 0x83, 0x76, 0x68, 0x07, 0x7c, 0x60, 0x83, 0x35, 0x98, + 0x87, 0x79, 0x28, 0x07, 0x36, 0x58, 0x83, 0x79, 0x98, 0x87, 0x72, 0x90, 0x03, 0x36, 0x58, 0x03, + 0x7c, 0xc0, 0x83, 0x3b, 0x00, 0x08, 0x7a, 0xa8, 0x07, 0x77, 0x28, 0x87, 0x36, 0x18, 0x07, 0x78, + 0xa8, 0x07, 0xe0, 0x1c, 0xca, 0xc1, 0x1d, 0xca, 0x41, 0x1e, 0xd2, 0x61, 0x1c, 0x00, 0xa2, 0x1e, + 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, + 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x36, 0x18, 0x6e, 0x30, 0x00, + 0xa4, 0x00, 0x88, 0xc1, 0x86, 0x3c, 0x79, 0x83, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x01, 0x30, + 0x05, 0xc0, 0x0f, 0x00, 0x38, 0x00, 0x24, 0xa0, 0x0f, 0x02, 0x5b, 0x18, 0x82, 0x30, 0x10, 0x88, + 0x70, 0x80, 0x07, 0x78, 0x90, 0x87, 0x77, 0xc0, 0x87, 0x36, 0x30, 0x87, 0x7a, 0x70, 0x87, 0x71, + 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, + 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1d, 0xd2, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0xe1, 0x1c, 0xc2, + 0x81, 0x1d, 0xda, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xee, 0x21, + 0x1d, 0xc8, 0x81, 0x1e, 0xd0, 0x01, 0x80, 0x03, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70, + 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, + 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1d, 0xc2, 0xc1, + 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, + 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x98, 0x87, 0x74, 0x38, 0x07, + 0x77, 0x28, 0x07, 0x72, 0x68, 0x03, 0x7d, 0x28, 0x07, 0x79, 0x78, 0x87, 0x79, 0x68, 0x03, 0x73, + 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, + 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe8, 0x41, 0x1e, 0xc2, 0x01, 0x1e, 0xe0, 0x21, 0x1d, 0xdc, + 0xe1, 0x1c, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, + 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, + 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, + 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, + 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0x60, 0x1c, 0xe0, 0xa1, 0x1e, 0x00, 0x7c, 0xc0, + 0x03, 0x3b, 0x68, 0x03, 0x3b, 0xa0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, + 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0x60, + 0x0d, 0xc6, 0xa1, 0x1d, 0xde, 0xc1, 0x1e, 0xd8, 0x60, 0x0d, 0xc6, 0x01, 0x1f, 0xf0, 0x80, 0x0d, + 0xd6, 0xc0, 0x1c, 0xf0, 0x61, 0x1e, 0xe4, 0x81, 0x0d, 0xd6, 0xa0, 0x1d, 0xda, 0x01, 0x1f, 0xd8, + 0x60, 0x0d, 0xe6, 0x61, 0x1e, 0xca, 0x81, 0x0d, 0xd6, 0x60, 0x1e, 0xe6, 0xa1, 0x1c, 0xe4, 0x80, + 0x0d, 0xd6, 0x00, 0x1f, 0xf0, 0xe0, 0x0e, 0x00, 0x82, 0x1e, 0xea, 0xc1, 0x1d, 0xca, 0xa1, 0x0d, + 0xc6, 0x01, 0x1e, 0xea, 0x01, 0x38, 0x87, 0x72, 0x70, 0x87, 0x72, 0x90, 0x87, 0x74, 0x18, 0x07, + 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, + 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0x0d, 0x06, + 0x1c, 0x04, 0xc0, 0x02, 0x90, 0xc2, 0x86, 0x23, 0x0e, 0x04, 0x80, 0x14, 0x82, 0x5b, 0x38, 0xa1, + 0x0d, 0x91, 0x1c, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x9c, 0x02, 0xe0, 0x07, 0xc0, 0x1f, 0x00, + 0x12, 0x50, 0x07, 0x40, 0x1f, 0x04, 0xb6, 0x00, 0x6c, 0x20, 0xe6, 0xe0, 0xff, 0xff, 0xff, 0xff, + 0x07, 0x40, 0xda, 0x40, 0xd0, 0x81, 0x00, 0x9c, 0xc1, 0x06, 0xa7, 0x0e, 0x02, 0x60, 0x17, 0x80, + 0x33, 0x00, 0x72, 0xc1, 0xe8, 0x98, 0x20, 0x80, 0x36, 0x30, 0x76, 0x10, 0x00, 0xa4, 0x00, 0x9c, + 0x41, 0x10, 0x40, 0x41, 0x1a, 0x40, 0x1b, 0x98, 0x3b, 0x10, 0x00, 0x52, 0x00, 0xce, 0x20, 0x08, + 0xa0, 0x20, 0x0d, 0xa0, 0x0d, 0x0e, 0x1e, 0x04, 0xc0, 0x2e, 0x00, 0x67, 0x00, 0xe4, 0x82, 0xd1, + 0x35, 0x41, 0x00, 0x6d, 0x70, 0xf2, 0x20, 0x00, 0x76, 0x01, 0x38, 0x03, 0x20, 0x17, 0x8c, 0xce, + 0x09, 0x02, 0x68, 0x83, 0xa1, 0x07, 0x05, 0x40, 0x0a, 0xc0, 0x19, 0x6c, 0x30, 0xf6, 0xc0, 0x00, + 0x48, 0x01, 0x38, 0x83, 0x0d, 0x06, 0x1f, 0x08, 0x00, 0x29, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x18, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, + 0x1c, 0x13, 0x08, 0x24, 0x51, 0x96, 0x09, 0x43, 0x20, 0x30, 0x13, 0x86, 0xc6, 0x11, 0x26, 0x10, + 0x8f, 0x30, 0x10, 0x13, 0x0c, 0x28, 0x92, 0x26, 0xaa, 0x9a, 0x60, 0x40, 0x96, 0x34, 0x51, 0xd5, + 0x04, 0x03, 0xba, 0xa4, 0x89, 0xaa, 0x26, 0x10, 0x8f, 0x30, 0x60, 0x13, 0x0c, 0x28, 0x93, 0x26, + 0xaa, 0x9a, 0x70, 0x40, 0x91, 0x34, 0x51, 0x95, 0x36, 0xe1, 0x80, 0x2c, 0x69, 0xa2, 0x2a, 0x6d, + 0xc2, 0x01, 0x5d, 0xd2, 0x44, 0x55, 0xda, 0x84, 0x03, 0xca, 0xa4, 0x89, 0xaa, 0xb4, 0x09, 0xc5, + 0x23, 0x48, 0xd8, 0x36, 0xc1, 0x80, 0x2e, 0x69, 0xe2, 0xba, 0x09, 0xc6, 0x23, 0x48, 0x18, 0xe7, + 0x4d, 0x38, 0xa0, 0x4b, 0x9a, 0xb8, 0xee, 0x9b, 0x70, 0x3c, 0x82, 0x84, 0x81, 0x41, 0x18, 0x88, + 0xc1, 0x04, 0x05, 0xba, 0xa4, 0x89, 0xeb, 0xbe, 0x31, 0x20, 0x83, 0x32, 0x98, 0x80, 0x3c, 0x82, + 0x84, 0x81, 0x41, 0x18, 0x7c, 0x66, 0x30, 0x61, 0x81, 0x2e, 0x69, 0xe2, 0xba, 0x6f, 0x0c, 0xc8, + 0xa0, 0x0c, 0xce, 0x60, 0x02, 0x02, 0x5d, 0xd2, 0xc4, 0x75, 0xdf, 0x18, 0x4c, 0x68, 0xa0, 0x4b, + 0x9a, 0xb8, 0xee, 0x1b, 0x03, 0x32, 0x28, 0x83, 0x33, 0x40, 0x83, 0x34, 0x98, 0xe0, 0x40, 0x97, + 0x34, 0x71, 0xdd, 0x37, 0x06, 0x64, 0x50, 0x06, 0x67, 0x80, 0x06, 0x69, 0xa0, 0x06, 0x13, 0x0a, + 0xe8, 0x92, 0x26, 0x6a, 0x82, 0xf1, 0x08, 0x12, 0x46, 0x79, 0x13, 0x8a, 0x35, 0x10, 0xa4, 0x69, + 0x9b, 0x40, 0xac, 0x81, 0x20, 0x11, 0x13, 0x8c, 0x47, 0x18, 0xd8, 0x80, 0xf2, 0x26, 0x0c, 0x50, + 0x26, 0x4d, 0x28, 0x1e, 0x61, 0x98, 0xb6, 0x09, 0x44, 0x1b, 0x08, 0x12, 0x36, 0x81, 0x68, 0x03, + 0x41, 0x9a, 0x26, 0x10, 0x6d, 0x20, 0x48, 0x6e, 0x30, 0x61, 0x78, 0x03, 0x38, 0x90, 0x26, 0x10, + 0x6f, 0xe0, 0xc0, 0x41, 0x1c, 0x4c, 0x20, 0xde, 0x00, 0x0e, 0xa4, 0x69, 0x42, 0xf1, 0x06, 0x0e, + 0x1c, 0xc4, 0x01, 0x1b, 0x4c, 0x08, 0xe4, 0x60, 0x82, 0x30, 0x07, 0x74, 0x30, 0xc1, 0x98, 0x83, + 0x3a, 0x90, 0x26, 0xaa, 0x9a, 0x20, 0xd8, 0xc1, 0x1d, 0x4c, 0x30, 0xe6, 0x00, 0x0f, 0xa4, 0x89, + 0xaa, 0x26, 0x18, 0x73, 0x90, 0x07, 0xd2, 0x44, 0x55, 0x13, 0x8c, 0x39, 0xc8, 0xa4, 0x89, 0xd2, + 0x83, 0x09, 0xc7, 0x1c, 0xd4, 0x81, 0x34, 0x51, 0x95, 0x36, 0xe1, 0x98, 0x03, 0x3c, 0x90, 0x26, + 0xaa, 0xd2, 0x26, 0x1c, 0x73, 0x90, 0x07, 0xd2, 0x44, 0x55, 0xda, 0x84, 0x63, 0x0e, 0x32, 0x69, + 0xa2, 0xaa, 0x3d, 0x98, 0x60, 0xcc, 0x41, 0x1e, 0x48, 0x13, 0xd7, 0x4d, 0x38, 0xe6, 0x20, 0x0f, + 0xa4, 0x89, 0xeb, 0xbe, 0x09, 0xca, 0x1c, 0xe4, 0x81, 0x34, 0x71, 0xdd, 0x37, 0x06, 0x64, 0x50, + 0x06, 0x13, 0x96, 0x39, 0xc8, 0x03, 0x69, 0xe2, 0xba, 0x6f, 0x0c, 0xc8, 0xa0, 0x0c, 0xce, 0x60, + 0x02, 0x32, 0x07, 0x79, 0x20, 0x4d, 0x5c, 0xf7, 0x8d, 0xc1, 0x84, 0x66, 0x0e, 0xf2, 0x40, 0x9a, + 0xb8, 0xee, 0x1b, 0x03, 0x32, 0x28, 0x83, 0x33, 0x40, 0x83, 0x34, 0x98, 0xe0, 0xcc, 0x41, 0x1e, + 0x48, 0x13, 0xd7, 0x7d, 0x63, 0x40, 0x06, 0x65, 0x70, 0x06, 0x68, 0x90, 0x06, 0x6a, 0x30, 0xa1, + 0x98, 0x83, 0x3c, 0x90, 0x26, 0x6a, 0xc2, 0x30, 0x07, 0x19, 0x1f, 0x00, 0x13, 0xc4, 0x00, 0x1f, + 0xf0, 0xc0, 0x0e, 0x7e, 0xc1, 0x0e, 0xe8, 0xa0, 0x0d, 0xea, 0xc1, 0x1d, 0xd6, 0xc1, 0x1d, 0xde, + 0xe1, 0x1e, 0xdc, 0xa1, 0x0d, 0xee, 0x21, 0x1d, 0xdc, 0x81, 0x1c, 0xde, 0xe1, 0x1e, 0xe6, 0xa1, + 0x0d, 0xda, 0x61, 0x1e, 0xec, 0x61, 0x1c, 0xe2, 0x20, 0x0f, 0xdc, 0x60, 0x0e, 0xe6, 0xc0, 0x0d, + 0xe0, 0x60, 0xc3, 0x2b, 0x94, 0x43, 0x1b, 0xb4, 0x83, 0x1e, 0xdc, 0x43, 0x1b, 0xc0, 0x83, 0x1c, + 0xdc, 0x01, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xb4, 0x01, 0x3c, 0xc8, + 0xc1, 0x1d, 0xc4, 0x81, 0x1e, 0xcc, 0x81, 0x1c, 0xe8, 0xc1, 0x1c, 0xc8, 0x41, 0x1b, 0xc0, 0x83, + 0x1c, 0xdc, 0x81, 0x1c, 0xe8, 0x81, 0x1d, 0xd0, 0x81, 0x1e, 0xd8, 0x01, 0x1d, 0xb4, 0x41, 0x3a, + 0xd8, 0x01, 0x1d, 0xe8, 0x81, 0x1d, 0xd0, 0x41, 0x1b, 0xa4, 0x43, 0x1c, 0xc8, 0x01, 0x1e, 0xe8, + 0x41, 0x1c, 0xc8, 0x01, 0x1e, 0xb4, 0x81, 0x39, 0xe0, 0x01, 0x1c, 0xe8, 0x41, 0x1c, 0xc8, 0x01, + 0x1e, 0xb4, 0x81, 0x3b, 0xe0, 0x81, 0x1e, 0xc4, 0x81, 0x1d, 0xe8, 0xc1, 0x1c, 0xc8, 0x81, 0x1e, + 0xd8, 0x01, 0x1d, 0xb4, 0xc1, 0x2c, 0xc4, 0x81, 0x1c, 0xe0, 0x81, 0x46, 0x08, 0x93, 0x43, 0x7e, + 0x78, 0x55, 0xe7, 0x65, 0xf9, 0xfc, 0xd5, 0x4e, 0xaf, 0xcb, 0xaf, 0x21, 0x3b, 0xfd, 0x76, 0x43, + 0xe5, 0x6f, 0x75, 0x79, 0x4c, 0x9f, 0xbf, 0x98, 0xf5, 0xf4, 0x3c, 0x3c, 0x7c, 0xb7, 0xe1, 0x75, + 0x7a, 0xf9, 0x35, 0x97, 0x8f, 0x5f, 0xe2, 0xf0, 0x78, 0x5d, 0x76, 0x93, 0xe7, 0x2f, 0x73, 0x98, + 0xcd, 0x16, 0x87, 0xc7, 0xeb, 0x97, 0x39, 0xcc, 0x66, 0x8b, 0xc3, 0xe3, 0xf5, 0x57, 0x5c, 0x4f, + 0xb3, 0xe9, 0x69, 0xf7, 0xcb, 0x1c, 0x66, 0xb3, 0xc5, 0xe1, 0xf1, 0xfa, 0x4b, 0x2e, 0xdb, 0xd3, + 0xe3, 0xf2, 0x37, 0x0c, 0x4f, 0x7f, 0xef, 0xf2, 0x30, 0x1c, 0x5e, 0x96, 0xcf, 0x5d, 0xf7, 0xb4, + 0x9b, 0xfc, 0xbe, 0xcf, 0x5d, 0x78, 0x9c, 0xed, 0x6b, 0xa3, 0xb9, 0xd8, 0xec, 0x21, 0x15, 0x90, + 0x09, 0x00, 0x90, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, + 0xca, 0x2c, 0x02, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, + 0x86, 0x54, 0x6f, 0x50, 0x19, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x30, 0xa4, 0x22, 0x05, 0x8a, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x2e, 0x64, 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xe2, 0x21, 0x13, 0x00, 0x20, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xa5, 0x12, 0x99, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xb1, 0xc8, + 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, + 0xf1, 0x45, 0x26, 0x00, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0xaa, 0x36, 0xb0, 0x03, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x20, 0x03, 0x86, 0x54, 0xed, 0x81, 0x1d, 0x00, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x2a, 0x11, 0xec, 0x00, 0x80, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x8f, 0x70, 0x02, 0x00, 0x24, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xf2, 0x84, 0x13, 0x00, + 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x55, 0x2b, + 0x9c, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0xaa, 0x78, 0xe1, 0x04, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x0c, 0x18, 0x52, 0xb5, 0x0c, 0x27, 0x00, 0x40, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x64, 0xc0, 0x90, 0x2a, 0x6d, 0x38, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xa5, 0xa3, 0x25, 0x00, 0x90, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xfa, 0x1d, 0x2d, 0x01, 0x80, 0xa4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0xfe, 0x68, 0x09, + 0x00, 0x24, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x66, + 0xc8, 0x3a, 0x00, 0x20, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, + 0x48, 0x95, 0x46, 0xd6, 0x01, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x01, 0x43, 0xaa, 0x3f, 0xb2, 0x0e, 0x00, 0x48, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xd5, 0x12, 0x26, 0x00, 0x40, 0x62, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xaa, 0x9d, 0xba, 0x05, 0x08, 0x80, 0x03, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x2a, 0x95, 0x09, 0x00, 0x90, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x1a, 0x2b, 0x6f, + 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, + 0x68, 0x69, 0x02, 0x00, 0x24, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, + 0x0c, 0xa9, 0x76, 0xeb, 0x5b, 0x80, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x32, 0x60, 0x48, 0xa5, 0x5f, 0x9b, 0x00, 0x00, 0x89, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x1a, 0x03, 0x83, 0x07, 0x08, 0x80, 0x05, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x75, 0xa6, 0x09, 0x00, 0x90, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x7a, 0xb5, 0xef, 0x01, + 0x02, 0x60, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xbb, + 0x65, 0x02, 0x00, 0x24, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, + 0xa9, 0x4e, 0xce, 0x7b, 0x80, 0x00, 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x32, 0x60, 0x48, 0x55, 0x76, 0x98, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0xbe, 0xeb, 0x20, 0x20, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xe9, 0x5e, 0x26, 0x00, 0x40, 0x62, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x6a, 0xfe, 0x3c, 0x08, 0x08, 0x80, + 0x06, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x31, 0x18, 0x68, + 0x02, 0x00, 0x24, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, + 0xd6, 0x30, 0xf8, 0x20, 0x20, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x0c, 0x18, 0x52, 0xa9, 0x62, 0xb0, 0x09, 0x00, 0x90, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x2a, 0xc7, 0x00, 0x0c, 0x22, 0x20, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x95, 0x64, 0xa0, 0x09, 0x00, 0x90, + 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xfa, 0xc9, 0xe0, + 0x8b, 0x80, 0x00, 0x78, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0xe5, 0x97, 0x41, 0x26, 0x00, 0x40, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x64, 0xc0, 0x90, 0xea, 0x36, 0x03, 0x2f, 0x02, 0x02, 0xe0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x7d, 0x06, 0xd4, 0x01, 0x00, 0x09, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x14, 0x0d, 0xa8, 0x03, 0x00, 0x12, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x3d, 0x1a, 0x7c, + 0x12, 0x00, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, + 0xf8, 0x34, 0x20, 0x83, 0x09, 0x08, 0x80, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x20, 0x03, 0x86, 0x54, 0xe0, 0x1a, 0x94, 0x01, 0x05, 0x00, 0x89, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x92, 0x0d, 0xd4, 0xa0, 0x02, 0x02, 0x60, 0x02, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0xdb, 0x06, 0x64, 0x60, + 0x01, 0x40, 0x42, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x6a, + 0x76, 0x83, 0x34, 0xb8, 0x80, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x32, 0x60, 0x48, 0xc5, 0xbf, 0x81, 0x1a, 0x60, 0x00, 0x90, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x32, 0xe3, 0xe0, 0x0d, 0x32, 0x20, 0x00, 0x2e, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xd5, 0x72, 0xf0, 0x49, 0x00, + 0x90, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xa2, 0xe7, + 0x80, 0x0c, 0x2a, 0x20, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0xe1, 0x74, 0x50, 0x06, 0x14, 0x00, 0x24, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xfa, 0x3a, 0x50, 0x03, 0x0d, 0x08, 0x00, 0x0c, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xe7, 0x1d, 0x90, 0x81, 0x05, 0x00, + 0x09, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x15, 0x0f, + 0xd2, 0x60, 0x03, 0x02, 0x20, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, + 0x21, 0x15, 0x9d, 0x07, 0x6a, 0x80, 0x01, 0x40, 0x62, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0xd7, 0x83, 0x37, 0xe0, 0x80, 0x00, 0xd0, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xd5, 0xf2, 0x41, 0x27, 0x01, 0x40, 0x02, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x4a, 0xed, 0x03, 0x31, + 0xe8, 0x80, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0xc5, 0xfa, 0x41, 0x27, 0x01, 0x40, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x64, 0xc0, 0x90, 0x2a, 0xfd, 0x03, 0x31, 0xf0, 0x80, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xb5, 0x82, 0xc2, 0x18, 0x7c, 0x00, 0x90, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x72, 0x43, 0x01, 0x0d, 0x3c, + 0x20, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xd9, + 0xa2, 0x30, 0x06, 0x1f, 0x00, 0x24, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x06, 0x0c, 0xa9, 0xf2, 0x51, 0x40, 0x03, 0x30, 0x00, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x58, 0x0a, 0x63, 0x10, 0x06, 0x00, 0x90, 0x74, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x22, 0x4d, 0x61, 0x0c, + 0xc2, 0x00, 0x00, 0x92, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, + 0x54, 0xe7, 0x29, 0x74, 0x62, 0x00, 0x00, 0x89, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x90, 0x01, 0x43, 0x2a, 0x12, 0x15, 0x3a, 0x31, 0x00, 0x80, 0xc4, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x98, 0x0a, 0x60, 0x30, 0x06, 0x00, 0x90, + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x0a, 0x55, 0xc1, + 0x3b, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, + 0x52, 0xfd, 0xaa, 0xc0, 0x8d, 0x01, 0x00, 0x24, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xf6, 0x55, 0xd0, 0x0e, 0x20, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x35, 0x2b, 0x64, 0x64, 0x00, 0x00, 0x49, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0x6d, 0x85, + 0x8a, 0x0c, 0x00, 0x20, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0x8d, 0xae, 0xe0, 0x89, 0x01, 0x00, 0x24, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xc2, 0x57, 0xe0, 0xc4, 0x00, 0x00, 0x12, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xfd, 0x2b, 0x90, 0x81, 0x18, 0x00, + 0x40, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x2a, 0x8c, + 0x05, 0x31, 0x10, 0x03, 0x00, 0x48, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x20, 0x03, 0x86, 0x54, 0xa3, 0x2c, 0xa0, 0x41, 0x19, 0x00, 0x40, 0x32, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x5a, 0x67, 0x01, 0x0c, 0xca, 0x00, 0x00, + 0x92, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0x4a, + 0x0b, 0x60, 0x60, 0x06, 0x00, 0x90, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x06, 0x0c, 0xa9, 0xd6, 0x5a, 0xc8, 0xce, 0x00, 0x00, 0x92, 0x32, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x15, 0x69, 0x0b, 0xda, 0x19, 0x00, 0x40, 0x52, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xf2, 0x6d, 0x41, + 0x43, 0x03, 0x00, 0x48, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, + 0x86, 0x54, 0xf8, 0x2d, 0x6c, 0x68, 0x00, 0x00, 0x49, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x6a, 0xc6, 0x85, 0x2d, 0x0d, 0x00, 0x20, 0x31, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xb9, 0xb9, 0x10, 0x06, 0x6a, + 0x00, 0x00, 0xc9, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, + 0xea, 0xd5, 0x05, 0x31, 0x50, 0x03, 0x00, 0x48, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xf1, 0x2e, 0x88, 0xc1, 0x1a, 0x00, 0x40, 0x72, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x9a, 0x79, 0x61, 0x0c, 0xd6, + 0x00, 0x00, 0x92, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, + 0x95, 0xdd, 0x0b, 0x63, 0xc0, 0x06, 0x00, 0x90, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x72, 0x5f, 0xd0, 0xce, 0x00, 0x00, 0x92, 0x32, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0xd5, 0xfc, 0x0b, 0xdb, 0x19, 0x00, + 0x40, 0x52, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0x72, + 0xc1, 0x61, 0x43, 0x03, 0x00, 0x48, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x20, 0x03, 0x86, 0x54, 0x69, 0x38, 0x70, 0x68, 0x00, 0x00, 0x49, 0x19, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xaa, 0x14, 0x07, 0x2e, 0x0d, 0x00, 0x20, 0x31, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x85, 0xe3, 0xa0, + 0x9d, 0x01, 0x00, 0x24, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, + 0x43, 0xaa, 0x7d, 0x1c, 0xb6, 0x33, 0x00, 0x80, 0xa4, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0x65, 0x93, 0xc3, 0x86, 0x06, 0x00, 0x90, 0x94, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xe2, 0x72, 0xe0, 0xd0, 0x00, + 0x00, 0x92, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, + 0x6b, 0x0e, 0x5c, 0x1a, 0x00, 0x40, 0x62, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x19, 0x30, 0xa4, 0x4a, 0xcf, 0x41, 0x3b, 0x03, 0x00, 0x48, 0xca, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0x23, 0x3a, 0x6c, 0x67, 0x00, 0x00, 0x49, + 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0xca, 0x47, 0x87, + 0x0d, 0x0d, 0x00, 0x20, 0x29, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, + 0x18, 0x52, 0xe5, 0xe9, 0xc0, 0xa1, 0x01, 0x00, 0x24, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x5a, 0x1d, 0xb2, 0x33, 0x00, 0x80, 0xa4, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, 0xe5, 0xae, 0x83, 0x76, 0x06, + 0x00, 0x90, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, + 0x50, 0x76, 0xd0, 0xd0, 0x00, 0x00, 0x92, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0xc8, 0x80, 0x21, 0x95, 0xd8, 0x0e, 0x1b, 0x1a, 0x00, 0x40, 0x52, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xea, 0xdb, 0x41, 0x3b, 0x03, 0x00, 0x48, + 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x03, 0x86, 0x54, 0xb7, 0x3b, + 0x6c, 0x67, 0x00, 0x00, 0x49, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x64, + 0xc0, 0x90, 0x4a, 0x7e, 0x87, 0x0d, 0x0d, 0x00, 0x20, 0x29, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0xb5, 0xf0, 0xc0, 0xa1, 0x01, 0x00, 0x24, 0x65, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, 0xaa, 0x34, 0x1e, 0xb4, 0x33, + 0x00, 0x80, 0xa4, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x32, 0x60, 0x48, + 0x35, 0xca, 0xc3, 0x76, 0x06, 0x00, 0x90, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x06, 0x0c, 0xa9, 0x7c, 0x79, 0xd8, 0xd0, 0x00, 0x00, 0x92, 0x32, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc8, 0x80, 0x21, 0x55, 0x3e, 0x0f, 0x1c, 0x1a, 0x00, 0x40, + 0x52, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x19, 0x30, 0xa4, 0xaa, 0xe9, + 0x81, 0x4b, 0x03, 0x00, 0x48, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, + 0x03, 0x86, 0x54, 0x71, 0x3d, 0x68, 0x67, 0x00, 0x00, 0x49, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x64, 0xc0, 0x90, 0x6a, 0xb5, 0x87, 0xed, 0x0c, 0x00, 0x20, 0x29, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0c, 0x18, 0x52, 0x99, 0xf7, 0xb0, 0xa1, + 0x01, 0x00, 0x24, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x01, 0x43, + 0xaa, 0x10, 0x1f, 0x38, 0x34, 0x00, 0x80, 0xa4, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x32, 0x60, 0x48, 0xd5, 0xe3, 0x03, 0x97, 0x06, 0x00, 0x90, 0x98, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x06, 0x0c, 0xa9, 0xf2, 0x7c, 0x68, 0xda, 0x00, 0x08, + 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x80, 0x21, 0x95, 0xa9, + 0x0f, 0xcd, 0x1b, 0x00, 0x01, 0x90, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x30, 0xa4, 0x9a, 0xf5, 0xa1, 0x8b, 0x03, 0x20, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x86, 0x54, 0xf0, 0x3e, 0x3c, 0x73, 0x00, 0x04, 0x40, 0x1a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x80, 0xc4, 0x06, 0x81, 0xa2, 0x1b, + 0x13, 0x00, 0x00, 0x59, 0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x20, + 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x52, 0x94, 0x40, 0x11, 0x14, + 0x44, 0x39, 0x14, 0x20, 0x20, 0x02, 0x00, 0x00, 0xb1, 0x18, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, + 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, + 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, + 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, + 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, + 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, + 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, + 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, + 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, + 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, + 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, + 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, + 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, + 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, + 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, + 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, + 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, + 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, + 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, + 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, + 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, + 0x98, 0x81, 0x5c, 0xe3, 0x10, 0x0e, 0xec, 0xc0, 0x0e, 0xe5, 0x50, 0x0e, 0xf3, 0x30, 0x23, 0xc1, + 0xd2, 0x41, 0x1e, 0xe4, 0xe1, 0x17, 0xd8, 0xe1, 0x1d, 0xde, 0x01, 0x1e, 0x66, 0x48, 0x19, 0x3b, + 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0x84, 0xc3, 0x38, 0x8c, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb8, + 0xc1, 0x39, 0xc8, 0xc3, 0x3b, 0xd4, 0x03, 0x3c, 0xcc, 0x48, 0xb4, 0x71, 0x08, 0x07, 0x76, 0x60, + 0x07, 0x71, 0x08, 0x87, 0x71, 0x58, 0x87, 0x19, 0xdb, 0xc6, 0x0e, 0xec, 0x60, 0x0f, 0xed, 0xe0, + 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0f, 0xe5, 0x20, 0x0f, 0xf6, 0x50, 0x0e, 0x6e, 0x10, 0x0e, + 0xe3, 0x30, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, 0xf8, + 0x30, 0x23, 0xe2, 0xec, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0xe1, 0x17, 0xec, 0x21, 0x1d, 0xe6, + 0x21, 0x1d, 0xc4, 0x21, 0x1d, 0xd8, 0x21, 0x1d, 0xe8, 0x21, 0x1f, 0x66, 0x20, 0x9d, 0x3b, 0xbc, + 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x83, 0x39, 0xcc, 0x58, 0xbc, 0x70, 0x70, 0x07, 0x77, 0x78, + 0x07, 0x7a, 0x08, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x19, 0xcb, 0xe7, 0x0e, 0xef, 0x30, + 0x0f, 0xe1, 0xe0, 0x0e, 0xe9, 0x40, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0x30, 0xc3, 0x01, 0x03, 0x73, + 0xa8, 0x07, 0x77, 0x18, 0x87, 0x5f, 0x98, 0x87, 0x70, 0x70, 0x87, 0x74, 0xa0, 0x87, 0x74, 0xd0, + 0x87, 0x72, 0x98, 0x81, 0x84, 0x41, 0x39, 0xe0, 0xc3, 0x38, 0xb0, 0x43, 0x3d, 0x90, 0x43, 0x39, + 0xcc, 0x40, 0xc4, 0xa0, 0x1d, 0xca, 0xa1, 0x1d, 0xe0, 0x41, 0x1e, 0xde, 0xc1, 0x1c, 0x66, 0x24, + 0x63, 0x30, 0x0e, 0xe1, 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0xe9, 0x40, 0x0f, 0xe5, 0x30, 0x43, 0x21, + 0x83, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x98, 0xb1, + 0x94, 0x01, 0x3c, 0x8c, 0xc3, 0x3c, 0x94, 0xc3, 0x38, 0xd0, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0xcc, + 0xc3, 0x8c, 0xc5, 0x0c, 0x48, 0x21, 0x15, 0x42, 0x61, 0x1e, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, + 0x52, 0x81, 0x14, 0x66, 0x4c, 0x67, 0x30, 0x0e, 0xef, 0x20, 0x0f, 0xef, 0xe0, 0x06, 0xef, 0x50, + 0x0f, 0xf4, 0x30, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, + 0xe5, 0x30, 0xa3, 0x40, 0x83, 0x76, 0x68, 0x07, 0x79, 0x08, 0x07, 0x00, 0x79, 0x20, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x72, 0x1e, 0x48, 0x20, 0x43, 0x88, 0x0c, 0x19, 0x09, 0x72, 0x32, 0x48, + 0x20, 0x23, 0x81, 0x8c, 0x91, 0x91, 0xd1, 0x44, 0xa0, 0x10, 0x28, 0x64, 0x3c, 0x31, 0x32, 0x42, + 0x8e, 0x90, 0x21, 0xa3, 0x58, 0x10, 0xa6, 0x00, 0x4a, 0x72, 0x2c, 0x1d, 0x77, 0x63, 0x68, 0x61, + 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x49, 0x43, 0x20, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x75, + 0x77, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x78, 0x54, 0x4c, 0x53, 0x41, 0x6c, 0x69, 0x67, + 0x6e, 0x48, 0x6f, 0x6d, 0x65, 0x62, 0x72, 0x65, 0x77, 0x20, 0x63, 0x6c, 0x61, 0x6e, 0x67, 0x20, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x00, 0x00, + 0x23, 0x08, 0x4a, 0x4a, 0x8c, 0x20, 0x28, 0x2a, 0x31, 0x82, 0xa0, 0xac, 0xc4, 0x08, 0x82, 0xc2, + 0x12, 0x23, 0x08, 0x4a, 0x4b, 0xcc, 0x30, 0x18, 0xc1, 0x31, 0xc3, 0x80, 0x08, 0xc7, 0x0c, 0x43, + 0x32, 0x1c, 0x33, 0x0c, 0x06, 0xa1, 0xcc, 0x10, 0x14, 0x32, 0x12, 0x98, 0xa0, 0x9c, 0xd8, 0xd8, + 0xec, 0xda, 0x5c, 0xd8, 0xd2, 0xdc, 0xd6, 0xca, 0xe4, 0x5c, 0xde, 0xe0, 0xe8, 0xd2, 0xde, 0xdc, + 0xe6, 0x46, 0x01, 0x32, 0x62, 0x63, 0xb3, 0x6b, 0x73, 0x69, 0x7b, 0x23, 0xab, 0x63, 0x2b, 0x73, + 0x31, 0x63, 0x0b, 0x3b, 0x9b, 0x1b, 0x85, 0x50, 0x16, 0xa6, 0x49, 0x85, 0x8d, 0xcd, 0xae, 0xcd, + 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x94, 0xc0, 0x01, 0x00, 0x00, 0x00, 0xa9, 0x18, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x0b, 0x0a, 0x72, 0x28, 0x87, 0x77, 0x80, 0x07, 0x7a, 0x58, 0x70, 0x98, + 0x43, 0x3d, 0xb8, 0xc3, 0x38, 0xb0, 0x43, 0x39, 0xd0, 0xc3, 0x82, 0xe6, 0x1c, 0xc6, 0xa1, 0x0d, + 0xe8, 0x41, 0x1e, 0xc2, 0xc1, 0x1d, 0xe6, 0x21, 0x1d, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x16, + 0x34, 0xe3, 0x60, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x20, 0x0f, 0xe4, 0x40, 0x0f, 0xe1, 0x20, 0x0f, + 0xe7, 0x50, 0x0e, 0xf4, 0xb0, 0x80, 0x81, 0x07, 0x79, 0x28, 0x87, 0x70, 0x60, 0x07, 0x76, 0x78, + 0x87, 0x71, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x58, 0x70, 0x9c, 0xc3, 0x38, 0xb4, 0x01, 0x3b, + 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x6b, 0x1c, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xdc, 0x20, + 0x1c, 0xe4, 0x61, 0x1c, 0xdc, 0x20, 0x1c, 0xe8, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd0, 0xa1, 0x1c, + 0xc8, 0x61, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0xc1, 0x01, 0x0f, 0xf4, 0x20, 0x0f, 0xe1, 0x50, + 0x0f, 0xf4, 0x80, 0x0e, 0x0b, 0x88, 0x75, 0x18, 0x07, 0x73, 0x48, 0x87, 0x05, 0xcf, 0x38, 0xbc, + 0x83, 0x3b, 0xd8, 0x43, 0x39, 0xc8, 0xc3, 0x39, 0x94, 0x83, 0x3b, 0x8c, 0x43, 0x39, 0x8c, 0x03, + 0x3d, 0xc8, 0x03, 0x3b, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x07, 0xcc, 0x3c, 0xa4, 0x83, 0x3b, 0x9c, 0x03, 0x3b, 0x94, 0x03, 0x3d, 0xa0, 0x83, 0x3c, 0x94, + 0x43, 0x38, 0x90, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xaa, + 0x8d, 0x06, 0xd0, 0x6d, 0x04, 0x60, 0x2c, 0x21, 0x08, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x88, 0xcf, + 0x26, 0x20, 0x05, 0x05, 0x35, 0x42, 0x49, 0x8d, 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, + 0x83, 0x0c, 0x43, 0x72, 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4e, 0x40, + 0x00, 0x0b, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xaa, 0x8d, 0x06, 0xd0, 0x6d, + 0x04, 0x60, 0x2c, 0x21, 0x08, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x88, 0xcf, 0x26, 0x20, 0x05, 0x05, + 0x35, 0x42, 0x49, 0x8d, 0x0c, 0x32, 0x04, 0x87, 0x81, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x43, 0x72, + 0x60, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4e, 0x40, 0x00, 0x3e, 0x9b, 0xe0, + 0x34, 0x3e, 0x9b, 0x00, 0x39, 0x24, 0xd5, 0x08, 0x2d, 0x35, 0x42, 0x43, 0x8d, 0x0c, 0x32, 0x04, + 0x11, 0x84, 0x01, 0x21, 0xfe, 0x83, 0x0c, 0xc3, 0x14, 0x61, 0x50, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x1b, 0x10, 0x4a, 0x40, 0x00, 0x0b, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x22, 0xd8, 0x68, 0x00, 0xe1, 0x46, 0x00, 0xc6, 0x22, 0x82, 0x20, 0x08, 0xc6, 0x22, 0x04, 0x41, + 0x10, 0x00, 0x00, 0x00, 0x94, 0xc0, 0x8a, 0xcf, 0x26, 0x28, 0x07, 0x05, 0xb0, 0xe2, 0xb3, 0x09, + 0x0c, 0x42, 0x01, 0xac, 0x50, 0x03, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, 0x70, 0x88, 0xff, 0x20, + 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc6, 0xc3, 0x60, 0x80, + 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x55, 0x50, 0x00, 0x0b, 0x61, 0x20, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x90, 0x02, 0x22, 0xd8, 0x68, 0x00, 0xe1, 0x46, 0x00, 0xc6, 0x22, 0x82, 0x20, 0x08, + 0xc6, 0x22, 0x04, 0x41, 0x10, 0x00, 0x00, 0x00, 0x94, 0xc0, 0x8a, 0xcf, 0x26, 0x28, 0x07, 0x05, + 0xb0, 0xe2, 0xb3, 0x09, 0x0c, 0x42, 0x01, 0xac, 0x50, 0x03, 0x2b, 0x83, 0x0c, 0x81, 0x92, 0x60, + 0x70, 0x88, 0xff, 0x20, 0xc3, 0xc0, 0x28, 0x18, 0x1c, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, + 0xc6, 0xc3, 0x60, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x55, 0x50, 0x00, 0x3e, + 0x9b, 0x50, 0x51, 0x3e, 0x9b, 0x70, 0x55, 0x94, 0xc1, 0x0a, 0x41, 0xb0, 0x42, 0x0f, 0xac, 0x10, + 0x01, 0x2b, 0x83, 0x0c, 0x01, 0x76, 0x61, 0x50, 0x88, 0xff, 0x20, 0xc3, 0xa0, 0x61, 0x18, 0x18, + 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x46, 0xa7, 0x61, 0x80, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x1b, 0x10, 0x4e, 0x50, 0x00, 0x3e, 0x9b, 0x30, 0x06, 0x61, 0xe0, 0xb3, 0x09, 0x65, 0x20, + 0x06, 0x74, 0x06, 0xb0, 0x42, 0x1e, 0xac, 0x50, 0x07, 0x2b, 0x44, 0xc0, 0xca, 0x20, 0x43, 0x60, + 0x06, 0x65, 0x80, 0x41, 0x21, 0xfe, 0x83, 0x0c, 0x03, 0x1a, 0x98, 0x01, 0x06, 0x86, 0xf8, 0xe3, + 0x10, 0x80, 0xff, 0x20, 0x83, 0xb1, 0x06, 0x68, 0x80, 0x01, 0x22, 0xfe, 0x38, 0x04, 0xe0, 0x3f, + 0x6c, 0x40, 0x38, 0x41, 0x01, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x2a, 0x30, 0x82, 0x8d, 0x06, 0x10, 0x6e, 0x04, 0x60, 0x2c, 0x22, 0x08, 0x82, 0x60, 0x2c, 0x42, + 0x10, 0x04, 0x61, 0x2c, 0x62, 0x18, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xc0, 0x8a, 0xcf, + 0x26, 0x30, 0x09, 0x05, 0xb0, 0xe2, 0xb3, 0x09, 0x8e, 0x42, 0x01, 0xac, 0xf8, 0x6c, 0x02, 0xb4, + 0x50, 0x00, 0x2b, 0x14, 0xc1, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, + 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, + 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x5c, 0x50, 0x00, 0x0b, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x2a, 0x30, 0x82, 0x8d, 0x06, 0x10, 0x6e, 0x04, 0x60, 0x2c, 0x22, 0x08, 0x82, 0x60, 0x2c, 0x42, + 0x10, 0x04, 0x61, 0x2c, 0x62, 0x18, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xc0, 0x8a, 0xcf, + 0x26, 0x30, 0x09, 0x05, 0xb0, 0xe2, 0xb3, 0x09, 0x8e, 0x42, 0x01, 0xac, 0xf8, 0x6c, 0x02, 0xb4, + 0x50, 0x00, 0x2b, 0x14, 0xc1, 0xca, 0x20, 0x43, 0xd0, 0x30, 0x18, 0x24, 0xe2, 0x3f, 0xc8, 0x30, + 0x3c, 0x0d, 0x06, 0x89, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x83, 0x21, 0x3d, 0x18, 0x28, 0xe2, + 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, 0x15, 0x61, 0xb0, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x1b, 0x10, 0x5c, 0x50, 0x00, 0x3e, 0x9b, 0xc0, 0x6d, 0x3e, 0x9b, 0xe0, 0x71, 0x04, 0x06, 0xb0, + 0x42, 0x15, 0xac, 0x10, 0x05, 0x2b, 0x34, 0xc1, 0x0a, 0x15, 0xb0, 0x32, 0xc8, 0x10, 0x7c, 0x1e, + 0x06, 0x86, 0xf8, 0x0f, 0x32, 0x0c, 0x61, 0xf0, 0x61, 0x70, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, + 0x32, 0x18, 0x64, 0x10, 0x06, 0x18, 0x24, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0xc9, 0x19, + 0x8c, 0x01, 0x06, 0x8b, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x21, 0x05, 0x05, 0xe0, 0xb3, + 0x09, 0x6e, 0xc0, 0x06, 0x3e, 0x9b, 0x00, 0x07, 0x6d, 0x40, 0x72, 0x00, 0x2b, 0x74, 0x06, 0xb0, + 0x42, 0x66, 0x00, 0x2b, 0x54, 0x06, 0xb0, 0x42, 0x05, 0xac, 0x0c, 0x32, 0x04, 0x71, 0x00, 0x07, + 0x18, 0x18, 0xe2, 0x3f, 0xc8, 0x30, 0xcc, 0x41, 0x1c, 0x60, 0x70, 0x88, 0x3f, 0x0e, 0x01, 0xf8, + 0x0f, 0x32, 0x18, 0x76, 0x30, 0x07, 0x18, 0x24, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x49, + 0x1e, 0xd4, 0x01, 0x06, 0x8b, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x21, 0x05, 0x05, 0xe0, + 0xb3, 0x09, 0xa0, 0xd0, 0x07, 0x3e, 0x9b, 0x20, 0x0a, 0x7e, 0x40, 0xa4, 0x00, 0x2b, 0x94, 0x07, + 0xb0, 0x42, 0x78, 0x00, 0x2b, 0x74, 0x07, 0xb0, 0x42, 0x05, 0xac, 0x0c, 0x32, 0x04, 0xa3, 0x20, + 0x0a, 0x18, 0x18, 0xe2, 0x3f, 0xc8, 0x30, 0x94, 0xc2, 0x28, 0x60, 0x70, 0x88, 0x3f, 0x0e, 0x01, + 0xf8, 0x0f, 0x32, 0x18, 0xa8, 0x50, 0x0a, 0x18, 0x24, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, + 0xc9, 0x2a, 0x9c, 0x02, 0x06, 0x8b, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0xb0, 0x01, 0x21, 0x05, 0x05, + 0xb0, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xba, 0x8d, 0x25, 0x00, 0xc2, + 0x58, 0x42, 0x30, 0x00, 0x54, 0xd4, 0x88, 0xcf, 0x26, 0x18, 0x04, 0x05, 0x35, 0x32, 0xc8, 0x30, + 0x04, 0xc5, 0xb0, 0x01, 0x81, 0x04, 0x04, 0x30, 0xc8, 0x40, 0x08, 0x85, 0xcf, 0x26, 0x24, 0xc8, + 0xb0, 0x01, 0x11, 0x08, 0x04, 0xb0, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x22, 0xc5, 0x08, 0x40, 0x19, 0x8c, 0x06, 0x90, 0x6e, 0x8e, 0x41, 0x26, 0x66, 0x82, 0x26, 0xc6, + 0x1a, 0x80, 0x60, 0xa0, 0xdc, 0x68, 0x00, 0xe1, 0xe6, 0x20, 0x64, 0x22, 0x25, 0x54, 0x82, 0x26, + 0x48, 0x51, 0x08, 0xa4, 0x9b, 0x63, 0x48, 0x89, 0x9c, 0xa0, 0x89, 0xb1, 0x06, 0x20, 0x20, 0x48, + 0x51, 0x0a, 0xa4, 0x9b, 0x63, 0x50, 0x09, 0x9e, 0xa0, 0x89, 0xb1, 0x06, 0x20, 0x28, 0x00, 0x00, + 0x14, 0xe5, 0x8a, 0xcf, 0x26, 0x48, 0x10, 0x05, 0xb9, 0xe2, 0xb3, 0x09, 0x54, 0x44, 0x41, 0xae, + 0x0c, 0x32, 0x14, 0xc3, 0x33, 0xc8, 0x10, 0x08, 0xcf, 0x20, 0x43, 0xf0, 0x38, 0xc3, 0x06, 0x04, + 0x16, 0x14, 0xc0, 0x20, 0x03, 0x62, 0x34, 0x83, 0x0c, 0x41, 0xd1, 0xf8, 0x6c, 0x82, 0x96, 0x0d, + 0x32, 0x08, 0x93, 0x34, 0x6c, 0x40, 0x08, 0x41, 0x01, 0x0c, 0x32, 0x30, 0x8a, 0x33, 0xc8, 0x10, + 0x24, 0x8e, 0xcf, 0x26, 0x78, 0xdc, 0x20, 0x83, 0x70, 0x59, 0xc3, 0x06, 0x84, 0x10, 0x14, 0xc0, + 0x02, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0x52, 0x8c, + 0x00, 0x14, 0xc2, 0x68, 0x00, 0xe1, 0xe6, 0x20, 0x66, 0x82, 0x26, 0x6a, 0xa2, 0x26, 0xe6, 0x20, + 0x66, 0x22, 0x25, 0x68, 0xa2, 0x26, 0xc6, 0x22, 0x80, 0x40, 0x20, 0x48, 0x51, 0x0a, 0x84, 0x9b, + 0x83, 0x48, 0x89, 0x9c, 0xa8, 0x89, 0x9a, 0x98, 0x83, 0x98, 0x89, 0x94, 0xc8, 0x89, 0x9a, 0x18, + 0x8b, 0x00, 0x02, 0xa1, 0x20, 0x45, 0x31, 0x10, 0x6e, 0x0e, 0x42, 0x25, 0x7a, 0xa2, 0x26, 0x6a, + 0x62, 0x0e, 0x62, 0x26, 0x52, 0xa2, 0x27, 0x6a, 0x62, 0x2c, 0x02, 0x08, 0x04, 0x83, 0x14, 0x65, + 0x40, 0xb8, 0x39, 0x88, 0xb0, 0x60, 0x89, 0x9a, 0xa8, 0x89, 0x39, 0x88, 0x99, 0x48, 0x09, 0x96, + 0xa8, 0x89, 0xb1, 0x08, 0x20, 0x10, 0x0e, 0x00, 0x74, 0xc1, 0x8a, 0xcf, 0x26, 0x60, 0x16, 0x05, + 0xb0, 0xe2, 0xb3, 0x09, 0xda, 0x45, 0x01, 0xac, 0xf8, 0x6c, 0x02, 0x87, 0x51, 0x00, 0x2b, 0x83, + 0x0c, 0x47, 0x61, 0x0d, 0x32, 0x04, 0x84, 0x35, 0xc8, 0x10, 0x0c, 0xd6, 0xb0, 0x01, 0x01, 0x06, + 0x41, 0x01, 0x0c, 0x32, 0x28, 0x48, 0x35, 0xc8, 0x10, 0x1c, 0xd5, 0x20, 0x43, 0x60, 0x54, 0x3e, + 0x9b, 0x30, 0x06, 0x62, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x0c, 0x32, 0x38, 0x4c, 0x35, 0xc8, + 0x10, 0x2c, 0xd5, 0x20, 0x43, 0xa0, 0x54, 0x3e, 0x9b, 0x70, 0x06, 0x65, 0x30, 0x6c, 0x40, 0x04, + 0x42, 0x01, 0x0c, 0x32, 0x48, 0x50, 0x35, 0xc8, 0x10, 0x3c, 0xd5, 0x20, 0x43, 0xe0, 0x54, 0x3e, + 0x9b, 0xb0, 0x06, 0x68, 0x30, 0x6c, 0x40, 0x04, 0x42, 0x01, 0x2c, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x54, 0x1b, 0x0d, 0xa0, 0xdb, 0x08, 0xc0, 0x58, 0x42, 0x10, 0xd0, 0xa0, 0x20, 0x00, 0x00, 0x00, + 0x74, 0xd4, 0x08, 0x1d, 0x35, 0x32, 0xc8, 0x10, 0x18, 0x05, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, + 0x49, 0x40, 0x00, 0x83, 0x0c, 0x03, 0x62, 0x60, 0x50, 0x88, 0xbf, 0xcf, 0x26, 0x2c, 0xc7, 0xb0, + 0x01, 0x11, 0x08, 0x04, 0xb0, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x0d, 0x20, + 0xdc, 0x08, 0x00, 0x0d, 0x0a, 0x84, 0x70, 0x63, 0x11, 0x41, 0x10, 0x04, 0x34, 0x28, 0x20, 0xc2, + 0x8d, 0x45, 0x08, 0x82, 0x20, 0x00, 0x00, 0x00, 0x94, 0xc0, 0x0a, 0x25, 0xb0, 0x32, 0xc8, 0x10, + 0x20, 0x07, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x4b, 0x50, 0x00, 0x3e, 0x9b, 0xb0, 0x20, 0x83, + 0x0c, 0xc4, 0x82, 0x60, 0x60, 0x88, 0xff, 0xb0, 0x01, 0x31, 0x04, 0x05, 0xe0, 0xb3, 0x09, 0x4e, + 0x32, 0xc8, 0x70, 0x38, 0x09, 0x06, 0x89, 0xf8, 0x0f, 0x1b, 0x10, 0x43, 0x50, 0x00, 0x0b, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x0d, 0x20, 0xdc, 0x08, 0xc0, 0x58, 0x44, 0x10, 0x04, 0x01, + 0x0d, 0x0a, 0x84, 0x70, 0x63, 0x11, 0x82, 0x20, 0x08, 0x34, 0x28, 0x20, 0xc2, 0x8d, 0x45, 0x0c, + 0xc3, 0x30, 0xd0, 0xa0, 0xc0, 0x00, 0x00, 0x00, 0xb4, 0xc0, 0x0a, 0x2d, 0xb0, 0x32, 0xc8, 0x10, + 0x28, 0x09, 0x06, 0x83, 0xf8, 0x0f, 0x1b, 0x10, 0x4d, 0x50, 0x00, 0x83, 0x0c, 0x03, 0xa3, 0x60, + 0x50, 0x88, 0xbf, 0xcf, 0x26, 0x3c, 0xcb, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0xc8, 0x60, 0x3c, + 0x0b, 0x06, 0x88, 0xf8, 0xfb, 0x6c, 0x82, 0xc4, 0x0c, 0x1b, 0x10, 0x81, 0x50, 0x00, 0x83, 0x0c, + 0x89, 0xc4, 0x60, 0xb0, 0x88, 0xbf, 0xcf, 0x26, 0x54, 0xcd, 0xb0, 0x01, 0x11, 0x08, 0x05, 0xb0, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xaa, 0x8d, 0x06, 0xd0, 0x6d, + 0x04, 0x60, 0x2c, 0x21, 0x08, 0x00, 0x00, 0x00, 0x64, 0xd4, 0x88, 0xcf, 0x26, 0x1c, 0x05, 0x05, + 0x35, 0x42, 0x4a, 0x8d, 0xf8, 0x6c, 0xc2, 0x82, 0x50, 0x50, 0x23, 0x83, 0x0c, 0x46, 0x82, 0x20, + 0x11, 0x88, 0xff, 0x20, 0x83, 0xb1, 0x28, 0x48, 0x04, 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0xc3, 0x06, + 0x04, 0x14, 0x10, 0x80, 0xcf, 0x26, 0x40, 0x0f, 0x4d, 0x35, 0x42, 0x49, 0x8d, 0x0c, 0x32, 0x38, + 0xd1, 0x83, 0x43, 0x20, 0xfe, 0x83, 0x0c, 0xce, 0x14, 0x21, 0x11, 0x88, 0x3f, 0x06, 0x03, 0xf8, + 0x0f, 0x1b, 0x10, 0x48, 0x40, 0x00, 0x0b, 0x00, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0xa2, 0xdc, 0x68, 0x00, 0xe1, 0x46, 0x00, 0xc6, 0x22, 0x82, 0x20, 0x08, 0xc6, 0x22, 0x04, 0x41, + 0x10, 0x00, 0x00, 0x00, 0x84, 0xe4, 0x8a, 0xcf, 0x26, 0x24, 0x07, 0x05, 0xb9, 0xe2, 0xb3, 0x09, + 0x0b, 0x42, 0x41, 0xae, 0x90, 0x03, 0x2b, 0x3e, 0x9b, 0xf0, 0x30, 0x14, 0xc0, 0x8a, 0xcf, 0x26, + 0x44, 0x0d, 0x05, 0xb0, 0x32, 0xc8, 0x80, 0x38, 0x0d, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x30, 0xd0, + 0x83, 0x48, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0xc8, 0xb0, 0x4c, 0x12, 0x1e, 0x81, 0xf8, 0xe3, + 0x10, 0x80, 0xff, 0xb0, 0x01, 0x91, 0x05, 0x05, 0xe0, 0xb3, 0x09, 0x19, 0x46, 0x1c, 0xac, 0x90, + 0x03, 0x2b, 0xd4, 0xc0, 0xca, 0x20, 0x03, 0xa5, 0x61, 0x38, 0x04, 0xe2, 0x3f, 0xc8, 0x80, 0x71, + 0x1a, 0x1a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0xc3, 0xf5, 0x75, 0x78, 0x04, 0xe2, 0x8f, + 0x43, 0x00, 0xfe, 0xc3, 0x06, 0x04, 0x13, 0x14, 0x80, 0xcf, 0x26, 0x94, 0xc1, 0x18, 0x10, 0x1a, + 0xc0, 0x0a, 0x69, 0xb0, 0x42, 0x19, 0xac, 0x0c, 0x32, 0x80, 0x81, 0x19, 0x8c, 0x01, 0x0e, 0x81, + 0xf8, 0x0f, 0x32, 0x90, 0x01, 0x1a, 0x94, 0x01, 0x1a, 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, + 0xc3, 0x18, 0xac, 0x01, 0x1a, 0xe0, 0x11, 0x88, 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x4c, + 0x50, 0x00, 0x0b, 0x00, 0x61, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0x82, 0x8d, + 0x06, 0x10, 0x6e, 0x04, 0x60, 0x2c, 0x22, 0x08, 0x82, 0x60, 0x2c, 0x42, 0x10, 0x04, 0x61, 0x2c, + 0x62, 0x18, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0xa4, 0xc0, 0x8a, 0xcf, 0x26, 0x2c, 0x09, 0x05, + 0xb0, 0xe2, 0xb3, 0x09, 0x8d, 0x42, 0x01, 0xac, 0xf8, 0x6c, 0xc2, 0xb3, 0x50, 0x00, 0x2b, 0x24, + 0xc1, 0x8a, 0xcf, 0x26, 0x4c, 0x10, 0x05, 0xb0, 0xe2, 0xb3, 0x09, 0x55, 0x44, 0x01, 0xac, 0xf8, + 0x6c, 0xc2, 0x25, 0x51, 0x00, 0x2b, 0x83, 0x0c, 0xce, 0x24, 0x21, 0x12, 0x88, 0xff, 0x20, 0x83, + 0x53, 0x51, 0x88, 0x04, 0xe2, 0x8f, 0xc1, 0x00, 0xfe, 0x83, 0x0c, 0x0f, 0x76, 0x61, 0x12, 0x88, + 0x3f, 0x0e, 0x01, 0xf8, 0x0f, 0x32, 0x40, 0x9b, 0x86, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, + 0x6c, 0x40, 0x88, 0x41, 0x50, 0x00, 0x3e, 0x9b, 0x20, 0x06, 0x61, 0x40, 0x65, 0x00, 0x2b, 0x34, + 0xc1, 0x0a, 0x49, 0xb0, 0x42, 0x11, 0xac, 0x0c, 0x32, 0x78, 0x63, 0x10, 0x06, 0x58, 0x04, 0xe2, + 0x3f, 0xc8, 0xe0, 0x95, 0xc1, 0x18, 0xa0, 0x11, 0x88, 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x32, 0x7c, + 0x68, 0x60, 0x06, 0x88, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0x83, 0x0c, 0x60, 0xb0, 0x06, 0x69, + 0x80, 0x4a, 0x20, 0xfe, 0x38, 0x04, 0xe0, 0x3f, 0x6c, 0x40, 0x40, 0x41, 0x01, 0xf8, 0x6c, 0x82, + 0x1c, 0xc0, 0x01, 0xd5, 0x01, 0xac, 0xd0, 0x18, 0xc0, 0x0a, 0x89, 0x01, 0xac, 0x50, 0x18, 0xc0, + 0xca, 0x20, 0x83, 0x1b, 0xcc, 0x01, 0x1c, 0x60, 0x11, 0x88, 0xff, 0x20, 0x83, 0x1b, 0xd4, 0x81, + 0x1c, 0xa0, 0x11, 0x88, 0x3f, 0x06, 0x03, 0xf8, 0x0f, 0x32, 0xbc, 0x01, 0x1e, 0xd4, 0x01, 0x22, + 0x81, 0xf8, 0xe3, 0x10, 0x80, 0xff, 0x20, 0x03, 0x1c, 0xec, 0x01, 0x1e, 0xa0, 0x12, 0x88, 0x3f, + 0x0e, 0x01, 0xf8, 0x0f, 0x1b, 0x10, 0x50, 0x50, 0x00, 0x3e, 0x9b, 0x20, 0x0a, 0x7f, 0x40, 0xa5, + 0x00, 0x2b, 0x34, 0x07, 0xb0, 0x42, 0x72, 0x00, 0x2b, 0x14, 0x07, 0xb0, 0x32, 0xc8, 0xe0, 0x07, + 0xa3, 0xf0, 0x07, 0x58, 0x04, 0xe2, 0x3f, 0xc8, 0xe0, 0x07, 0xa5, 0x10, 0x0a, 0x68, 0x04, 0xe2, + 0x8f, 0xc1, 0x00, 0xfe, 0x83, 0x0c, 0x7f, 0x80, 0x0a, 0xa4, 0x80, 0x48, 0x20, 0xfe, 0x38, 0x04, + 0xe0, 0x3f, 0xc8, 0x00, 0x0a, 0xab, 0x70, 0x0a, 0xa8, 0x04, 0xe2, 0x8f, 0x43, 0x00, 0xfe, 0xc3, + 0x06, 0x04, 0x14, 0x14, 0xc0, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0xaa, + 0x8d, 0x06, 0xd0, 0x6d, 0x2c, 0x21, 0x00, 0x48, 0x31, 0x1a, 0x40, 0xb7, 0x39, 0x84, 0x94, 0x90, + 0x09, 0x1a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xd4, 0x88, 0xcf, 0x26, 0x20, 0x07, 0x05, + 0x35, 0x32, 0xc8, 0x10, 0x20, 0x07, 0x06, 0x84, 0xf8, 0x0f, 0x32, 0x04, 0xca, 0x81, 0x42, 0x10, + 0xfe, 0x63, 0x08, 0x01, 0xc2, 0x01, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, + 0x1a, 0x01, 0xa0, 0xdc, 0x68, 0x00, 0xdd, 0xc6, 0x12, 0x02, 0x61, 0x2c, 0x41, 0x08, 0xa8, 0x36, + 0x1a, 0x40, 0x8a, 0xd1, 0x00, 0xba, 0xcd, 0x21, 0xa4, 0x84, 0x4d, 0x8c, 0x25, 0x08, 0xc4, 0x58, + 0x42, 0x00, 0x8c, 0x25, 0x00, 0x03, 0x00, 0x00, 0xd4, 0xe4, 0x8a, 0xcf, 0x26, 0x38, 0x0d, 0x05, + 0xb9, 0xe2, 0xb3, 0x09, 0x90, 0x43, 0x41, 0xae, 0x8c, 0x21, 0x0c, 0xcf, 0x20, 0x83, 0xf0, 0x38, + 0x83, 0x0c, 0x07, 0xe4, 0xa0, 0x10, 0x88, 0xff, 0x20, 0x43, 0xf0, 0x34, 0x28, 0x04, 0xe1, 0x3f, + 0x86, 0x10, 0x54, 0x18, 0x1c, 0xe2, 0x3f, 0xc8, 0xb0, 0x58, 0xd5, 0x20, 0x83, 0xe2, 0x44, 0x28, + 0x04, 0xe2, 0x3f, 0xc8, 0x00, 0x31, 0x13, 0x12, 0x81, 0xf8, 0x0f, 0x32, 0x04, 0x18, 0x85, 0x44, + 0x10, 0xfe, 0x83, 0x0c, 0x14, 0x54, 0xa1, 0x10, 0x88, 0xff, 0x20, 0x43, 0xc0, 0x69, 0x28, 0x04, + 0xe0, 0x3f, 0x86, 0x10, 0x88, 0x01, 0x06, 0x0d, 0xf8, 0x73, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x90, 0x02, 0x2b, 0xa8, 0xc2, 0x2a, 0x82, 0x32, 0x20, 0xd8, 0x68, 0x00, 0xdd, 0xc6, + 0x12, 0x86, 0x81, 0x14, 0xa3, 0x01, 0x74, 0x9b, 0x43, 0xb8, 0x09, 0x95, 0xa0, 0xc1, 0x08, 0x00, + 0xdd, 0xc6, 0x12, 0x04, 0x81, 0x14, 0x65, 0x40, 0xb7, 0x39, 0x84, 0x9b, 0xd8, 0x09, 0x1a, 0x14, + 0x52, 0x09, 0xd0, 0x6d, 0x0e, 0xe1, 0x26, 0x52, 0x62, 0x2c, 0x21, 0x08, 0xa8, 0x36, 0x1a, 0x40, + 0x8a, 0x11, 0x00, 0xc2, 0xcd, 0x41, 0x88, 0x85, 0x58, 0xa4, 0xc4, 0x4d, 0x8c, 0x45, 0x04, 0x45, + 0x51, 0x8c, 0x45, 0x08, 0x86, 0x61, 0x8c, 0x45, 0x0c, 0xc7, 0x71, 0x10, 0x6c, 0x2c, 0x02, 0x04, + 0x41, 0x10, 0xff, 0x40, 0x10, 0x04, 0xf1, 0x5f, 0x00, 0x41, 0x10, 0xc4, 0x3f, 0x10, 0x04, 0x41, + 0xfc, 0x17, 0x08, 0x31, 0x46, 0x00, 0x82, 0x20, 0x08, 0x82, 0x02, 0x00, 0xb4, 0xc1, 0x8a, 0xcf, + 0x26, 0x70, 0x1b, 0x05, 0xb0, 0xe2, 0xb3, 0x09, 0x1e, 0x47, 0x01, 0xac, 0xf8, 0x6c, 0x02, 0x18, + 0x74, 0x14, 0x20, 0x88, 0xcf, 0x26, 0x88, 0x81, 0x47, 0x01, 0x62, 0x8c, 0x21, 0x1c, 0xdf, 0x18, + 0x02, 0xf2, 0x0d, 0x32, 0x1c, 0x9f, 0x37, 0xc8, 0xa0, 0x80, 0x41, 0x37, 0xc7, 0x10, 0x1c, 0x1d, + 0x0e, 0x81, 0xf8, 0x0f, 0x32, 0x2c, 0x63, 0xe0, 0x0d, 0x32, 0x38, 0x64, 0xd0, 0xcd, 0x31, 0x04, + 0x49, 0x18, 0xe0, 0x10, 0x88, 0x3f, 0x16, 0x41, 0xf8, 0x23, 0xb3, 0x88, 0x3f, 0x3e, 0x8b, 0xf8, + 0xa3, 0x10, 0x84, 0xbf, 0xcf, 0x26, 0xc8, 0xc1, 0x18, 0x50, 0x80, 0x18, 0x63, 0x08, 0x17, 0x19, + 0x0c, 0x32, 0x60, 0x6e, 0x40, 0x06, 0x73, 0x0c, 0xc1, 0xb0, 0x06, 0x18, 0x05, 0xe2, 0x3f, 0xc8, + 0x90, 0xc5, 0x81, 0x19, 0x60, 0xd0, 0x88, 0x3f, 0x0e, 0x41, 0xf8, 0x23, 0x76, 0x88, 0x3f, 0x26, + 0x97, 0xf8, 0xa3, 0x10, 0x84, 0x3f, 0x52, 0x88, 0xf8, 0xe3, 0x71, 0x89, 0x3f, 0x0a, 0x41, 0xf8, + 0x23, 0x18, 0x34, 0xe2, 0x8f, 0x8f, 0x27, 0xfe, 0x28, 0x04, 0xe1, 0x3f, 0xc8, 0x60, 0xc5, 0xc1, + 0x1b, 0xcc, 0x31, 0x04, 0xd4, 0x1f, 0x0c, 0x32, 0x30, 0x73, 0x10, 0x07, 0x73, 0x0c, 0x81, 0x12, + 0x0a, 0x83, 0x0c, 0x48, 0x1d, 0xcc, 0xc1, 0x1c, 0x43, 0x60, 0x8c, 0xc2, 0x20, 0x43, 0x1b, 0xbc, + 0x01, 0x1d, 0x0c, 0x32, 0xb8, 0x01, 0x1c, 0xd0, 0xc1, 0x20, 0xc3, 0x1b, 0xc4, 0x01, 0x1d, 0x20, + 0x32, 0x88, 0x3f, 0x16, 0x82, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0x16, 0x89, 0xf8, 0xa3, 0x10, 0x84, + 0x3f, 0xde, 0x41, 0x1e, 0x88, 0x3f, 0x06, 0x82, 0xf8, 0x8f, 0x18, 0x1c, 0x40, 0x08, 0x82, 0x85, + 0x7f, 0xc4, 0xc1, 0x2e, 0xe8, 0x41, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x08, 0xaa, 0x8d, 0x06, 0x90, 0x62, 0x34, 0x80, 0x6e, 0x73, 0x08, 0x29, 0x21, 0x13, + 0x34, 0x18, 0x01, 0x28, 0x01, 0x42, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0xc1, 0x46, 0x03, + 0x08, 0x37, 0x02, 0x30, 0x07, 0x91, 0x12, 0x32, 0x21, 0x13, 0x2a, 0x41, 0x83, 0x22, 0x00, 0x00, + 0xd4, 0xd4, 0x88, 0xcf, 0x26, 0x38, 0x0c, 0x05, 0x35, 0x32, 0xc8, 0x10, 0x34, 0x0b, 0x06, 0x84, + 0xf8, 0x8f, 0x21, 0x04, 0xcc, 0x18, 0x02, 0xd1, 0x8c, 0x21, 0x1c, 0x0d, 0x0a, 0x81, 0xf8, 0x23, + 0x11, 0x84, 0x3f, 0x3e, 0x01, 0xf9, 0x1b, 0x01, 0xfe, 0x66, 0x80, 0xff, 0x1c, 0x43, 0x34, 0x50, + 0x83, 0x0c, 0x81, 0x14, 0x0d, 0x32, 0x34, 0x4f, 0x34, 0xc7, 0x10, 0x14, 0xd6, 0x1c, 0x43, 0x50, + 0x48, 0x48, 0x04, 0xe2, 0x3f, 0x6c, 0x40, 0x7c, 0x01, 0x01, 0x2c, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x90, 0x02, 0x1a, 0x01, 0x28, 0x81, 0x22, 0xa0, 0xdc, 0x68, 0x00, 0xdd, 0xc6, 0x12, + 0x02, 0x61, 0x2c, 0x41, 0x20, 0xa8, 0x36, 0x1a, 0x40, 0xb7, 0xb1, 0x84, 0x00, 0x20, 0xc4, 0x18, + 0x01, 0x08, 0x82, 0x20, 0xfe, 0xd1, 0x6d, 0x04, 0x80, 0x06, 0x05, 0x41, 0xb7, 0xb1, 0x04, 0x40, + 0x18, 0x4b, 0x10, 0x86, 0xb1, 0x04, 0x01, 0x18, 0x4b, 0x00, 0x0a, 0x1a, 0x14, 0x0c, 0xdd, 0xc6, + 0x12, 0x80, 0x60, 0x2c, 0x21, 0x18, 0x68, 0x50, 0x50, 0x00, 0x00, 0x00, 0x74, 0xe5, 0x8a, 0xcf, + 0x26, 0x60, 0x16, 0x05, 0xb9, 0xe2, 0xb3, 0x09, 0xda, 0x45, 0x41, 0xae, 0x8c, 0x21, 0x14, 0xd8, + 0x18, 0x02, 0x81, 0x8d, 0x21, 0x14, 0xd8, 0x18, 0x82, 0xb1, 0x8d, 0x21, 0x24, 0xdb, 0x18, 0x82, + 0xb2, 0x8d, 0x21, 0x1c, 0x1e, 0x16, 0x83, 0xf8, 0xe3, 0x31, 0x88, 0x3f, 0x0a, 0x41, 0xf8, 0x63, + 0x40, 0x88, 0xff, 0x20, 0x03, 0x03, 0x06, 0xdf, 0x20, 0xc3, 0x13, 0x7d, 0x28, 0x04, 0xe2, 0x3f, + 0xc8, 0x30, 0x45, 0x61, 0x80, 0x44, 0x20, 0xfe, 0x83, 0x0c, 0x81, 0x18, 0x84, 0x01, 0x06, 0x44, + 0xf8, 0x8f, 0x21, 0x04, 0x6a, 0x80, 0xc1, 0x24, 0xfe, 0x63, 0x08, 0xc3, 0x1a, 0x60, 0x20, 0x89, + 0x3f, 0x0e, 0x0c, 0xf8, 0x63, 0x20, 0x80, 0x3f, 0xa2, 0x41, 0x40, 0xfe, 0x73, 0x0c, 0x6b, 0x10, + 0xc4, 0xc1, 0x20, 0x43, 0xc0, 0x06, 0x69, 0x80, 0x81, 0x22, 0xfe, 0xc3, 0x06, 0xc4, 0x1d, 0x04, + 0x05, 0x80, 0xc4, 0x24, 0xfe, 0x3e, 0x9b, 0x80, 0x07, 0x6b, 0x30, 0x6c, 0x40, 0x04, 0x02, 0x01, + 0xf8, 0x6c, 0x42, 0x1e, 0xe0, 0xc1, 0x20, 0x03, 0x18, 0xd0, 0x01, 0x1b, 0x0c, 0x32, 0x8c, 0x41, + 0x19, 0xb0, 0x01, 0x0a, 0x81, 0xf8, 0x0f, 0x32, 0x8c, 0xc1, 0x1d, 0xb4, 0xc1, 0x20, 0x83, 0x19, + 0xa0, 0x41, 0x1b, 0xa0, 0x10, 0x88, 0x3f, 0x12, 0x41, 0xf8, 0x23, 0x13, 0x88, 0xff, 0xb0, 0x01, + 0x91, 0x04, 0x05, 0x80, 0x64, 0x20, 0x06, 0xe2, 0x8f, 0x66, 0x80, 0x06, 0xe2, 0x8f, 0x42, 0x10, + 0xfe, 0x28, 0x05, 0xe2, 0xef, 0xb3, 0x09, 0xa6, 0x40, 0x07, 0xc3, 0x06, 0x44, 0x20, 0x10, 0x80, + 0xcf, 0x26, 0x9c, 0x42, 0x29, 0x0c, 0x32, 0xb8, 0x81, 0x28, 0xd4, 0xc1, 0x20, 0xc3, 0x1c, 0xc4, + 0x41, 0x1d, 0xa0, 0x10, 0x88, 0xff, 0x20, 0x43, 0x20, 0x0a, 0xa1, 0x30, 0xc8, 0x40, 0x07, 0x76, + 0x80, 0x07, 0x58, 0x04, 0xe2, 0x8f, 0x43, 0x10, 0xfe, 0xa8, 0x05, 0xe2, 0x3f, 0x6c, 0x40, 0x24, + 0x41, 0x01, 0x20, 0x1d, 0xd4, 0x81, 0xf8, 0xe3, 0x1c, 0xc8, 0x81, 0xf8, 0xa3, 0x10, 0x84, 0x3f, + 0x82, 0x41, 0x20, 0xfe, 0x3e, 0x9b, 0x40, 0x0b, 0x7f, 0x30, 0x6c, 0x40, 0x04, 0x02, 0x01, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x02, 0x2a, 0x30, 0xc2, 0x8d, + 0x45, 0x0c, 0xc3, 0x70, 0x8c, 0x45, 0x08, 0x86, 0x60, 0x8c, 0x45, 0x08, 0x82, 0x60, 0x8c, 0x45, + 0x0c, 0xc7, 0x70, 0x8c, 0x45, 0x04, 0x45, 0x50, 0x8c, 0x45, 0x04, 0x41, 0x50, 0x8c, 0x45, 0x00, + 0x04, 0x40, 0x8c, 0x45, 0x00, 0x00, 0x40, 0x10, 0x6c, 0x34, 0x80, 0x70, 0x63, 0x11, 0x80, 0x10, + 0x0c, 0x63, 0x11, 0x00, 0x41, 0x10, 0x63, 0x11, 0x41, 0x51, 0x14, 0x63, 0x11, 0x82, 0x61, 0x18, + 0x63, 0x11, 0xc3, 0x71, 0x1c, 0x04, 0x1b, 0x8b, 0x00, 0x41, 0x10, 0xc4, 0x3f, 0x10, 0x04, 0x41, + 0xfc, 0x17, 0x40, 0x10, 0x04, 0xf1, 0x0f, 0x04, 0x41, 0x10, 0xff, 0x85, 0xb1, 0x08, 0x10, 0x04, + 0x41, 0xfc, 0x17, 0x40, 0x10, 0x04, 0xf1, 0x0f, 0x04, 0x41, 0x10, 0xff, 0x05, 0x10, 0x04, 0x41, + 0xfc, 0x23, 0xc5, 0x08, 0x40, 0x21, 0x8c, 0x06, 0x10, 0x6e, 0x0e, 0x62, 0x2c, 0xc8, 0xa2, 0x2c, + 0xca, 0x62, 0x0e, 0x62, 0x2c, 0x52, 0x82, 0x2c, 0xca, 0x62, 0x2c, 0x02, 0x08, 0x04, 0x82, 0x10, + 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x28, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x0d, 0x46, + 0x00, 0x08, 0x37, 0x02, 0x00, 0x00, 0x00, 0x00, 0xf4, 0xc1, 0x8a, 0xcf, 0x26, 0x80, 0x81, 0x47, + 0x01, 0xac, 0xf8, 0x6c, 0x82, 0x18, 0x7c, 0x14, 0xc0, 0x8a, 0xcf, 0x26, 0x90, 0x01, 0x18, 0x50, + 0x00, 0x2b, 0x83, 0x0c, 0xc1, 0x10, 0x06, 0x83, 0x0c, 0x84, 0x11, 0x06, 0x28, 0x04, 0xe2, 0x3f, + 0xc8, 0x40, 0x18, 0x62, 0x30, 0xc8, 0x70, 0x24, 0x62, 0x80, 0x42, 0x20, 0xfe, 0x48, 0x04, 0xe1, + 0x3f, 0xc8, 0xa0, 0x30, 0x64, 0x80, 0x48, 0x20, 0xfe, 0x83, 0x0c, 0x0a, 0x53, 0x06, 0x18, 0x18, + 0xe2, 0x8f, 0x43, 0x10, 0xfe, 0x98, 0x14, 0xe2, 0x8f, 0x04, 0x23, 0xfe, 0x28, 0x04, 0xe1, 0x3f, + 0xc8, 0x20, 0x51, 0x6a, 0x80, 0x50, 0x20, 0xfe, 0x83, 0x0c, 0x12, 0xb5, 0x06, 0x18, 0x38, 0xe2, + 0x8f, 0x43, 0x10, 0xfe, 0x18, 0x15, 0xe2, 0x8f, 0x04, 0x25, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x0e, + 0x22, 0xfe, 0x78, 0x44, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0x83, 0x0c, 0xd4, 0x1c, 0xc8, 0xc1, 0x20, + 0x03, 0x44, 0x07, 0x73, 0x30, 0xc8, 0xe0, 0xd4, 0x01, 0x1d, 0x0c, 0x32, 0x28, 0x76, 0x50, 0x07, + 0x83, 0x0c, 0xc8, 0x1d, 0xd8, 0xc1, 0x20, 0x83, 0x81, 0x07, 0x77, 0x30, 0xc8, 0x50, 0x06, 0x67, + 0x70, 0x07, 0x83, 0x0c, 0x66, 0x80, 0x06, 0x77, 0x30, 0xc8, 0x70, 0x06, 0x69, 0x70, 0x07, 0x83, + 0x0c, 0x68, 0xa0, 0x06, 0x77, 0x80, 0xca, 0x20, 0xfe, 0x98, 0x08, 0xe2, 0x8f, 0x81, 0x00, 0xfe, + 0x58, 0x30, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0xf8, 0x24, 0xe2, 0x8f, 0xcc, 0x21, 0xfe, 0x18, 0x08, + 0xe0, 0x8f, 0xca, 0x23, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0x93, 0x23, 0xfe, 0x08, 0x31, 0xe2, 0x8f, + 0x81, 0x00, 0xfe, 0x08, 0x51, 0xe2, 0x8f, 0x42, 0x10, 0xfe, 0x78, 0x4d, 0xe2, 0x8f, 0x95, 0x24, + 0xfe, 0x18, 0x08, 0xe0, 0x8f, 0x15, 0x26, 0xfe, 0x28, 0x04, 0xe1, 0x8f, 0xd0, 0x2a, 0x88, 0x3f, + 0x32, 0xab, 0x20, 0xfe, 0x88, 0xb4, 0x82, 0xf8, 0x23, 0xd1, 0x0a, 0xe2, 0x3f, 0xc8, 0x40, 0x0c, + 0xaa, 0x30, 0xc8, 0x10, 0x0c, 0xaa, 0x30, 0xc8, 0x10, 0x0c, 0xaa, 0x80, 0x81, 0x29, 0x88, 0xff, + 0x88, 0xc1, 0x01, 0x84, 0x20, 0x58, 0xf8, 0x47, 0x1c, 0xb4, 0xc3, 0x2a, 0x04, 0xb8, 0x0a, 0x01, + 0xf9, 0xcf, 0x31, 0xec, 0x42, 0xb0, 0x0a, 0x83, 0x0c, 0x01, 0x2f, 0xac, 0x02, 0x06, 0x8c, 0xf8, + 0x0f, 0x1b, 0x10, 0xea, 0x10, 0x14, 0x00, 0x0a, 0x8c, 0xf8, 0xfb, 0x6c, 0xc2, 0x3a, 0xa8, 0xc3, + 0xb0, 0x01, 0x11, 0x08, 0x05, 0x80, 0x44, 0x23, 0xfe, 0x3e, 0x9b, 0xd0, 0x0e, 0xeb, 0x30, 0x6c, + 0x40, 0x04, 0x42, 0x01, 0xa0, 0xe1, 0x88, 0xbf, 0xcf, 0x26, 0xbc, 0x03, 0x3b, 0x0c, 0x1b, 0x10, + 0x81, 0x50, 0x00, 0x1b, 0x12, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x86, 0x00, 0x38, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x42, + 0x28, 0x08, 0x2a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8c, 0x92, 0x12, 0xa5, 0x30, 0x62, + 0x60, 0xa8, 0x01, 0x08, 0x82, 0x01, 0x51, 0x13, 0x45, 0xe0, 0xb3, 0x09, 0x07, 0x41, 0x81, 0x62, + 0x50, 0xa2, 0x20, 0x3e, 0x9b, 0xb0, 0x18, 0x14, 0x0c, 0x08, 0x35, 0x80, 0x32, 0x62, 0x90, 0xac, + 0x01, 0x08, 0x82, 0xc1, 0x32, 0x12, 0x47, 0x20, 0x10, 0xc5, 0x88, 0x01, 0xc2, 0x06, 0x20, 0x08, + 0x06, 0x86, 0x4e, 0x30, 0xc7, 0x82, 0x8c, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0xe4, 0xc4, + 0x72, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x42, 0x28, 0x08, 0x2a, 0x8c, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8d, 0x92, 0x12, 0xa5, 0x30, 0x62, 0x60, 0xa8, 0x01, 0x08, + 0x82, 0x01, 0x51, 0x13, 0x45, 0xe0, 0xb3, 0x09, 0x07, 0x41, 0x81, 0x62, 0x50, 0xa2, 0x20, 0x3e, + 0x9b, 0xb0, 0x18, 0x14, 0x0c, 0x08, 0x35, 0x80, 0x32, 0x62, 0x90, 0xb4, 0x01, 0x08, 0x82, 0xc1, + 0x12, 0x12, 0x47, 0x20, 0x10, 0xc5, 0x88, 0x01, 0xc2, 0x06, 0x20, 0x08, 0x06, 0x86, 0x4e, 0x30, + 0xc7, 0x82, 0x8c, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0xe4, 0xc4, 0x72, 0x2c, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x42, 0x28, 0x08, 0x2a, 0x8c, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x30, 0x62, 0x60, 0xa8, 0x01, 0x08, 0x82, 0x01, 0x51, 0x13, + 0x45, 0xe0, 0xb3, 0x09, 0x07, 0x41, 0x81, 0x62, 0x50, 0xa2, 0x20, 0x3e, 0x9b, 0xb0, 0x18, 0x14, + 0x0c, 0x08, 0x35, 0x80, 0x32, 0x62, 0x90, 0xb8, 0x01, 0x08, 0x82, 0xc1, 0xf2, 0x0f, 0x47, 0x20, + 0x10, 0xc5, 0x88, 0x01, 0xc2, 0x06, 0x20, 0x08, 0x06, 0x86, 0x4e, 0x30, 0xc7, 0x82, 0x8c, 0x18, + 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0xe4, 0xc4, 0x72, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x10, 0x2a, 0x8c, 0x00, 0xd0, 0xa0, 0x10, 0x0a, 0x02, 0x00, 0x33, 0x11, 0x8e, 0x92, + 0x12, 0xa5, 0x30, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, 0x41, 0x13, 0x81, 0x51, 0x10, 0x3e, + 0x9b, 0x70, 0x0c, 0x14, 0x28, 0x06, 0x25, 0x0a, 0xe2, 0xb3, 0x09, 0x4b, 0x41, 0xc1, 0x80, 0x50, + 0x03, 0x28, 0x23, 0x06, 0xc9, 0x1b, 0x80, 0x20, 0x18, 0x3c, 0xfd, 0x10, 0x08, 0x44, 0x71, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x10, 0x2a, 0x8c, 0x00, 0xd0, 0xa0, + 0x10, 0x0a, 0x02, 0x00, 0x33, 0x11, 0x8d, 0x92, 0x12, 0xa5, 0x30, 0x62, 0x80, 0xb0, 0x01, 0x08, + 0x82, 0x81, 0x41, 0x13, 0x81, 0x51, 0x10, 0x3e, 0x9b, 0x70, 0x0c, 0x14, 0x28, 0x06, 0x25, 0x0a, + 0xe2, 0xb3, 0x09, 0x4b, 0x41, 0xc1, 0x80, 0x50, 0x03, 0x28, 0x23, 0x06, 0xc9, 0x1b, 0x80, 0x20, + 0x18, 0x3c, 0xfb, 0x10, 0x08, 0x44, 0x71, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x10, 0x2a, 0x8c, 0x00, 0xd0, 0xa0, 0x10, 0x0a, 0x02, 0x00, 0x33, 0x11, 0x8c, 0x92, + 0x12, 0xa5, 0x30, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, 0x41, 0x13, 0x81, 0x51, 0x10, 0x3e, + 0x9b, 0x70, 0x0c, 0x14, 0x28, 0x06, 0x25, 0x0a, 0xe2, 0xb3, 0x09, 0x4b, 0x41, 0xc1, 0x80, 0x50, + 0x03, 0x28, 0x23, 0x06, 0xc9, 0x1b, 0x80, 0x20, 0x18, 0x3c, 0xf9, 0x10, 0x08, 0x44, 0x71, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x2a, 0x8c, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8c, 0x92, 0x12, 0xa5, 0x30, 0x62, 0x60, 0xa8, 0x01, 0x08, + 0x82, 0x01, 0x51, 0x13, 0x45, 0xe0, 0xb3, 0x09, 0x07, 0x41, 0x81, 0x82, 0xf8, 0x6c, 0x42, 0x52, + 0x50, 0xa0, 0x18, 0xb4, 0x28, 0x8a, 0xcf, 0x26, 0x34, 0x09, 0x05, 0x03, 0x42, 0x0f, 0xa0, 0x8c, + 0x18, 0x28, 0x70, 0x00, 0x82, 0x60, 0x00, 0xe5, 0x43, 0x12, 0x08, 0x44, 0x71, 0x8c, 0x18, 0x20, + 0x6c, 0x00, 0x82, 0x60, 0x60, 0xf0, 0x84, 0x93, 0x34, 0xca, 0x88, 0x81, 0xa1, 0x06, 0x20, 0x08, + 0x06, 0xc4, 0x4e, 0x34, 0xc9, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, + 0x28, 0x04, 0x2a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8d, 0x92, 0x12, 0xa5, 0x30, 0x62, + 0x60, 0xa8, 0x01, 0x08, 0x82, 0x01, 0x51, 0x13, 0x45, 0xe0, 0xb3, 0x09, 0x07, 0x41, 0x81, 0x82, + 0xf8, 0x6c, 0x42, 0x52, 0x50, 0xa0, 0x18, 0xb4, 0x28, 0x8a, 0xcf, 0x26, 0x34, 0x09, 0x05, 0x03, + 0x42, 0x0f, 0xa0, 0x8c, 0x18, 0x28, 0x71, 0x00, 0x82, 0x60, 0x00, 0xdd, 0x43, 0x12, 0x08, 0x44, + 0x71, 0x8c, 0x18, 0x20, 0x6c, 0x00, 0x82, 0x60, 0x60, 0xf0, 0x84, 0x93, 0x34, 0xca, 0x88, 0x81, + 0xa1, 0x06, 0x20, 0x08, 0x06, 0xc4, 0x4e, 0x34, 0xc9, 0x02, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x2a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, + 0x12, 0xa5, 0x30, 0x62, 0x60, 0xa8, 0x01, 0x08, 0x82, 0x01, 0x51, 0x13, 0x45, 0xe0, 0xb3, 0x09, + 0x07, 0x41, 0x81, 0x82, 0xf8, 0x6c, 0x42, 0x52, 0x50, 0xa0, 0x18, 0xb4, 0x28, 0x8a, 0xcf, 0x26, + 0x34, 0x09, 0x05, 0x03, 0x42, 0x0f, 0xa0, 0x8c, 0x18, 0x28, 0x72, 0x00, 0x82, 0x60, 0x00, 0xd5, + 0x43, 0x12, 0x08, 0x44, 0x71, 0x8c, 0x18, 0x20, 0x6c, 0x00, 0x82, 0x60, 0x60, 0xf0, 0x84, 0x93, + 0x34, 0xca, 0x88, 0x81, 0xa1, 0x06, 0x20, 0x08, 0x06, 0xc4, 0x4e, 0x34, 0xc9, 0x02, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x10, 0x2a, 0x8c, 0x00, 0xd0, 0xa0, 0x20, 0x0a, 0x01, 0x00, + 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x30, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, 0x41, 0x13, + 0x81, 0x51, 0x10, 0x3e, 0x9b, 0x70, 0x0c, 0x14, 0x28, 0x88, 0xcf, 0x26, 0x24, 0x04, 0x05, 0x8a, + 0x41, 0x8b, 0xa2, 0xf8, 0x6c, 0x42, 0x83, 0x50, 0x30, 0x20, 0xf4, 0x00, 0xca, 0x88, 0x81, 0x32, + 0x07, 0x20, 0x08, 0x06, 0xd1, 0x3c, 0x04, 0x02, 0x51, 0x1c, 0xc9, 0x02, 0x61, 0x20, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x10, 0x2a, 0x8c, 0x00, 0xd0, 0xa0, 0x20, 0x0a, 0x01, 0x00, 0x33, 0x11, 0x8d, 0x92, + 0x12, 0xa5, 0x30, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, 0x41, 0x13, 0x81, 0x51, 0x10, 0x3e, + 0x9b, 0x70, 0x0c, 0x14, 0x28, 0x88, 0xcf, 0x26, 0x24, 0x04, 0x05, 0x8a, 0x41, 0x8b, 0xa2, 0xf8, + 0x6c, 0x42, 0x83, 0x50, 0x30, 0x20, 0xf4, 0x00, 0xca, 0x88, 0x81, 0x32, 0x07, 0x20, 0x08, 0x06, + 0x51, 0x3c, 0x04, 0x02, 0x51, 0x1c, 0xc9, 0x02, 0x61, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x10, 0x2a, + 0x8c, 0x00, 0xd0, 0xa0, 0x20, 0x0a, 0x01, 0x00, 0x33, 0x11, 0x8c, 0x92, 0x12, 0xa5, 0x30, 0x62, + 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, 0x41, 0x13, 0x81, 0x51, 0x10, 0x3e, 0x9b, 0x70, 0x0c, 0x14, + 0x28, 0x88, 0xcf, 0x26, 0x24, 0x04, 0x05, 0x8a, 0x41, 0x8b, 0xa2, 0xf8, 0x6c, 0x42, 0x83, 0x50, + 0x30, 0x20, 0xf4, 0x00, 0xca, 0x88, 0x81, 0x32, 0x07, 0x20, 0x08, 0x06, 0xd1, 0x3b, 0x04, 0x02, + 0x51, 0x1c, 0xc9, 0x02, 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x52, 0x94, 0xff, 0xff, 0x41, + 0x81, 0xd0, 0xa0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x9b, 0x60, 0x10, 0x14, 0x28, 0xc8, 0x05, + 0x85, 0x9e, 0x50, 0xe0, 0xb0, 0x01, 0x91, 0x08, 0x04, 0xe0, 0xb3, 0x09, 0x49, 0x31, 0x6c, 0x40, + 0x04, 0xc2, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x52, + 0x94, 0xff, 0xff, 0x41, 0x81, 0xd0, 0xa0, 0x30, 0x0a, 0x01, 0x00, 0x00, 0x3e, 0x9b, 0x70, 0x14, + 0x14, 0x28, 0xc8, 0x05, 0x86, 0x9e, 0x60, 0xa0, 0xcf, 0x26, 0x2c, 0x06, 0x05, 0x8a, 0x71, 0x81, + 0xa2, 0xc3, 0x06, 0x44, 0x53, 0x14, 0x80, 0xcf, 0x26, 0x34, 0xc8, 0xb0, 0x01, 0x11, 0x14, 0x03, + 0xe0, 0xb3, 0x09, 0x4e, 0x33, 0x6c, 0x40, 0x04, 0x03, 0x01, 0x2c, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x52, 0x14, 0x42, 0x79, 0x50, 0x61, 0x04, 0x00, 0x00, 0x00, + 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0b, 0xa0, 0xe4, 0x32, 0x08, 0xdf, 0x4e, 0x10, 0x02, + 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc5, 0x67, 0x13, 0x86, 0x85, 0x82, 0x01, 0x19, 0x31, 0x30, + 0xd4, 0x00, 0x04, 0xc1, 0x80, 0xf8, 0x09, 0x07, 0xf1, 0xd9, 0x04, 0x88, 0xa1, 0x00, 0x31, 0x48, + 0x42, 0x90, 0x24, 0x14, 0x70, 0xc1, 0x83, 0x17, 0x3c, 0x3a, 0x62, 0x90, 0xd0, 0x01, 0x08, 0x82, + 0xc1, 0x34, 0x0f, 0x4e, 0x12, 0x10, 0xc5, 0x88, 0x01, 0xc2, 0x06, 0x20, 0x08, 0x06, 0x06, 0x59, + 0x54, 0x0e, 0xf5, 0x8c, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0x8c, 0x05, 0xe5, 0x2c, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x52, 0x14, 0x42, 0x79, 0x50, 0x61, + 0x04, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0c, 0xa0, 0x24, 0x33, 0x08, + 0xdf, 0x4e, 0x10, 0x02, 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc5, 0x67, 0x13, 0x86, 0x85, 0x82, + 0x01, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0x00, 0x0b, 0x07, 0xf1, 0xd9, 0x84, 0x88, + 0xa1, 0x00, 0x31, 0x68, 0x42, 0x90, 0x24, 0x14, 0x70, 0xc1, 0x83, 0x17, 0x3c, 0x3a, 0x62, 0xa0, + 0xd4, 0x01, 0x08, 0x82, 0x41, 0x25, 0x0f, 0x4e, 0x12, 0x10, 0x85, 0x35, 0x62, 0x80, 0xb0, 0x01, + 0x08, 0x82, 0x81, 0x51, 0x16, 0x95, 0x43, 0x3d, 0x23, 0x06, 0x86, 0x1a, 0x80, 0x20, 0x18, 0x10, + 0x64, 0x41, 0x39, 0x0b, 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x52, 0x14, + 0x42, 0x79, 0x50, 0x61, 0x04, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0d, + 0xa0, 0x64, 0x33, 0x08, 0xdf, 0x4e, 0x10, 0x02, 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc5, 0x67, + 0x13, 0x86, 0x85, 0x82, 0x01, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0x08, 0x0b, 0x07, + 0xf1, 0xd9, 0x04, 0x88, 0xa1, 0x00, 0x31, 0x48, 0x42, 0x10, 0x9f, 0x4d, 0xa0, 0x1e, 0x0a, 0x10, + 0x83, 0x2c, 0x04, 0xf1, 0xd9, 0x04, 0x4c, 0xa2, 0x00, 0x31, 0x48, 0x43, 0x90, 0x54, 0x14, 0x70, + 0x41, 0x85, 0x17, 0x54, 0x3a, 0x62, 0xd0, 0xd8, 0x01, 0x08, 0x82, 0xc1, 0x75, 0x0f, 0xd4, 0x13, + 0x10, 0xc5, 0x81, 0x28, 0xcb, 0x88, 0x01, 0xc2, 0x06, 0x20, 0x08, 0x06, 0x06, 0x5b, 0x6c, 0x94, + 0x56, 0x8d, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0xac, 0x85, 0x46, 0x2d, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x82, 0x28, 0x04, 0x52, 0x14, 0x42, 0x79, 0x50, 0x61, + 0x04, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0e, 0xa0, 0xa4, 0x33, 0x08, + 0xdf, 0x4e, 0x10, 0x02, 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc5, 0x67, 0x13, 0x86, 0x85, 0x82, + 0x01, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0x10, 0x0b, 0x07, 0xf1, 0xd9, 0x84, 0x88, + 0xa1, 0x00, 0x31, 0x68, 0x42, 0x10, 0x9f, 0x4d, 0xa8, 0x1e, 0x0a, 0x10, 0x83, 0x2e, 0x04, 0xf1, + 0xd9, 0x84, 0x4c, 0xa2, 0x00, 0x31, 0x68, 0x43, 0x90, 0x54, 0x14, 0x70, 0x41, 0x85, 0x17, 0x54, + 0x3a, 0x62, 0xe0, 0xdc, 0x01, 0x08, 0x82, 0x41, 0x66, 0x0f, 0xd4, 0x13, 0x10, 0xc5, 0x81, 0x28, + 0x0b, 0x37, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, 0xd1, 0x16, 0x1b, 0xa5, 0x55, 0x23, 0x06, + 0x86, 0x1a, 0x80, 0x20, 0x18, 0x10, 0x6c, 0xa1, 0x51, 0x0b, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x98, 0x82, 0x28, 0x90, 0x42, 0x20, 0x45, 0x79, 0x50, 0x61, 0x04, 0x00, 0x00, 0x00, + 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0b, 0xa0, 0xe4, 0x32, 0x08, 0xdf, 0x4e, 0x10, 0x02, + 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc4, 0x67, 0x13, 0x86, 0x85, 0x82, 0x01, 0x19, 0x31, 0x30, + 0xd4, 0x00, 0x04, 0xc1, 0x80, 0xf8, 0x09, 0x06, 0xf1, 0xd9, 0x04, 0xa8, 0xa1, 0x00, 0x41, 0x7c, + 0x36, 0x41, 0x6a, 0x28, 0x40, 0x0c, 0xa2, 0x10, 0x25, 0x0d, 0x05, 0x5c, 0x00, 0xe9, 0x88, 0x81, + 0x52, 0x07, 0x20, 0x08, 0x06, 0x15, 0x3b, 0x3c, 0x4a, 0x30, 0x10, 0xc6, 0x88, 0x01, 0xc2, 0x06, + 0x20, 0x08, 0x06, 0x46, 0x59, 0x58, 0xcf, 0x04, 0x8d, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, + 0x90, 0xc5, 0xf4, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x98, 0x82, + 0x28, 0x90, 0x42, 0x20, 0x45, 0x79, 0x50, 0x61, 0x04, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, + 0x12, 0xa5, 0x40, 0x0c, 0xa0, 0x24, 0x33, 0x08, 0xdf, 0x4e, 0x10, 0x02, 0x9f, 0x4d, 0x08, 0x14, + 0x0a, 0x00, 0xc4, 0x67, 0x13, 0x86, 0x85, 0x82, 0x01, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, + 0x80, 0x00, 0x0b, 0x06, 0xf1, 0xd9, 0x84, 0xa8, 0xa1, 0x00, 0x41, 0x7c, 0x36, 0x61, 0x6a, 0x28, + 0x40, 0x0c, 0xaa, 0x10, 0x25, 0x0d, 0x05, 0x5c, 0x00, 0xe9, 0x88, 0xc1, 0x82, 0x07, 0x20, 0x08, + 0x06, 0xda, 0x3a, 0x3c, 0x4a, 0x30, 0x10, 0xc6, 0x35, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, 0x81, + 0x61, 0x16, 0xd6, 0x33, 0x41, 0x23, 0x06, 0x86, 0x1a, 0x80, 0x20, 0x18, 0x10, 0x65, 0x31, 0x3d, + 0x0b, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x98, 0x82, 0x28, 0x90, 0x42, 0x20, + 0x45, 0x79, 0x50, 0x61, 0x04, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0d, + 0xa0, 0x64, 0x33, 0x08, 0xdf, 0x4e, 0x10, 0x02, 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc4, 0x67, + 0x13, 0x86, 0x85, 0x82, 0x01, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0x08, 0x0b, 0x06, + 0xf1, 0xd9, 0x04, 0xa8, 0xa1, 0x00, 0x41, 0x7c, 0x36, 0x41, 0x6a, 0x28, 0x40, 0x0c, 0xa2, 0x10, + 0xc5, 0x67, 0x13, 0x2c, 0x89, 0x02, 0x04, 0xf1, 0xd9, 0x04, 0x4c, 0xa2, 0x00, 0x31, 0x48, 0x43, + 0x14, 0x9f, 0x4d, 0xe0, 0x2e, 0x0a, 0x10, 0xc4, 0x67, 0x13, 0xbc, 0x8b, 0x02, 0xc4, 0x20, 0x30, + 0x40, 0x94, 0x84, 0x14, 0x70, 0x81, 0xa6, 0x23, 0x06, 0x50, 0x1e, 0x80, 0x20, 0x18, 0x6c, 0xf4, + 0x90, 0x51, 0xc1, 0x40, 0x18, 0x48, 0xb2, 0x34, 0x0e, 0x34, 0x62, 0x80, 0xb0, 0x01, 0x08, 0x82, + 0x81, 0x11, 0x17, 0x60, 0x90, 0x75, 0xda, 0x88, 0x81, 0xa1, 0x06, 0x20, 0x08, 0x06, 0x04, 0x5c, + 0x74, 0xd9, 0x02, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x28, 0x98, 0x82, 0x28, 0x90, 0x42, 0x20, + 0x45, 0x79, 0x50, 0x61, 0x04, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0e, + 0xa0, 0xa4, 0x33, 0x08, 0xdf, 0x4e, 0x10, 0x02, 0x9f, 0x4d, 0x08, 0x14, 0x0a, 0x00, 0xc4, 0x67, + 0x13, 0x86, 0x85, 0x82, 0x01, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0x10, 0x0b, 0x06, + 0xf1, 0xd9, 0x84, 0xa8, 0xa1, 0x00, 0x41, 0x7c, 0x36, 0x61, 0x6a, 0x28, 0x40, 0x0c, 0xaa, 0x10, + 0xc5, 0x67, 0x13, 0x2e, 0x89, 0x02, 0x04, 0xf1, 0xd9, 0x84, 0x4c, 0xa2, 0x00, 0x31, 0x68, 0x43, + 0x14, 0x9f, 0x4d, 0xe8, 0x2e, 0x0a, 0x10, 0xc4, 0x67, 0x13, 0xbe, 0x8b, 0x02, 0xc4, 0xa0, 0x30, + 0x40, 0x94, 0x84, 0x14, 0x70, 0x81, 0xa6, 0x23, 0x06, 0x91, 0x1e, 0x80, 0x20, 0x18, 0x70, 0xf3, + 0x90, 0x51, 0xc1, 0x40, 0x18, 0x48, 0xb2, 0x34, 0x0e, 0x14, 0x06, 0x23, 0x06, 0x08, 0x1b, 0x80, + 0x20, 0x18, 0x18, 0x72, 0x01, 0x06, 0x59, 0xa7, 0x8d, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, + 0xc4, 0x45, 0x97, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x42, + 0xa0, 0xc2, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x08, + 0xa0, 0x24, 0x32, 0x08, 0xdf, 0x6e, 0x10, 0x02, 0x87, 0x02, 0x40, 0x19, 0x31, 0x30, 0xd4, 0x00, + 0x04, 0xc1, 0x80, 0xc8, 0x09, 0xa4, 0xf0, 0xd9, 0x04, 0xe5, 0xa0, 0x40, 0x31, 0x88, 0x51, 0x90, + 0x11, 0x03, 0x64, 0x0f, 0x40, 0x10, 0x0c, 0x3a, 0x5d, 0x40, 0x88, 0x40, 0x18, 0x31, 0x40, 0xd8, + 0x00, 0x04, 0xc1, 0xc0, 0xd8, 0x09, 0x06, 0x59, 0x92, 0x11, 0x03, 0x43, 0x0d, 0x40, 0x10, 0x0c, + 0x08, 0x9d, 0x58, 0x90, 0x05, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa4, 0x28, 0x03, 0x1a, + 0x14, 0x48, 0x41, 0x14, 0x02, 0x15, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, + 0x12, 0xa5, 0x40, 0x0a, 0xa0, 0xa4, 0x32, 0x08, 0xdf, 0x6e, 0x10, 0x02, 0x84, 0x02, 0x00, 0x19, + 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0xd8, 0x89, 0xa4, 0xf0, 0xd9, 0x04, 0x06, 0xa1, 0x40, + 0x41, 0x7c, 0x36, 0xc1, 0x49, 0x28, 0x50, 0x0c, 0x82, 0x14, 0x65, 0xc4, 0x20, 0x71, 0x03, 0x10, + 0x04, 0x03, 0x8f, 0x17, 0x14, 0x23, 0x10, 0x88, 0x11, 0x03, 0x84, 0x0d, 0x40, 0x10, 0x0c, 0x8c, + 0x9f, 0x80, 0x14, 0x67, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0xf0, 0x09, 0x47, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x90, 0x42, 0xa0, 0xc2, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x09, 0xa0, 0x64, 0x32, 0x08, + 0xdf, 0x6e, 0x10, 0x82, 0x87, 0x02, 0x40, 0x19, 0x31, 0x30, 0xd4, 0x00, 0x04, 0xc1, 0x80, 0xd0, + 0x09, 0xa4, 0xf0, 0xd9, 0x84, 0xe5, 0xa0, 0x40, 0x31, 0xa8, 0x51, 0x90, 0x11, 0x83, 0xc4, 0x0d, + 0x40, 0x10, 0x0c, 0xbc, 0x5b, 0x40, 0x88, 0x40, 0x68, 0x46, 0x0c, 0x10, 0x36, 0x00, 0x41, 0x30, + 0x30, 0x78, 0x82, 0x41, 0x96, 0x64, 0xc4, 0xc0, 0x50, 0x03, 0x10, 0x04, 0x03, 0x62, 0x27, 0x16, + 0x64, 0x01, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa4, 0x28, 0x03, 0x1a, 0x14, 0x48, 0x41, 0x14, + 0x02, 0x15, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x8e, 0x92, 0x12, 0xa5, 0x40, 0x0b, + 0xa0, 0xe4, 0x32, 0x08, 0xdf, 0x6e, 0x10, 0x02, 0x84, 0x02, 0x00, 0x19, 0x31, 0x30, 0xd4, 0x00, + 0x04, 0xc1, 0x80, 0xe0, 0x89, 0xa4, 0xf0, 0xd9, 0x84, 0x06, 0xa1, 0x40, 0x41, 0x7c, 0x36, 0xe1, + 0x49, 0x28, 0x50, 0x0c, 0x8a, 0x14, 0x65, 0xc4, 0x40, 0x91, 0x03, 0x10, 0x04, 0x03, 0x30, 0xc8, + 0x05, 0xc5, 0x08, 0x04, 0x22, 0x1a, 0x31, 0x40, 0xd8, 0x00, 0x04, 0xc1, 0xc0, 0x00, 0x0b, 0x48, + 0x71, 0x96, 0x11, 0x03, 0x43, 0x0d, 0x40, 0x10, 0x0c, 0x88, 0x9f, 0x70, 0x94, 0x05, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0xa2, 0x28, 0x04, 0x00, 0x00, 0x74, 0x00, 0x4a, 0x1e, + 0x83, 0xf0, 0xed, 0x06, 0x21, 0x68, 0x28, 0x00, 0x14, 0x9f, 0x4d, 0x08, 0x0e, 0x0a, 0x5c, 0x24, + 0x03, 0x45, 0x5c, 0xc0, 0xa0, 0xcf, 0x26, 0x14, 0x0a, 0x05, 0x2e, 0x91, 0x81, 0x22, 0x2e, 0x80, + 0x70, 0xc4, 0xc0, 0x00, 0x42, 0x10, 0x0c, 0xda, 0x80, 0x2b, 0xb0, 0x11, 0x03, 0x03, 0x08, 0x41, + 0x30, 0x68, 0x83, 0x4e, 0xc8, 0x86, 0x0d, 0x08, 0x49, 0x20, 0x00, 0x9f, 0x4d, 0x90, 0x9e, 0x61, + 0x03, 0x22, 0x10, 0x06, 0x60, 0x01, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x28, 0x03, 0x1a, + 0x14, 0x44, 0x51, 0x14, 0x46, 0x21, 0x00, 0x00, 0x94, 0x00, 0x4a, 0x26, 0x83, 0xf0, 0xed, 0x06, + 0x21, 0x38, 0x28, 0x00, 0x10, 0x9f, 0x4d, 0x08, 0x10, 0x0a, 0x5c, 0x24, 0x03, 0x45, 0x5c, 0xe0, + 0xa0, 0xcf, 0x26, 0x14, 0x0b, 0x05, 0x2e, 0x91, 0x81, 0x22, 0x2e, 0x90, 0xd0, 0x67, 0x13, 0x12, + 0x87, 0x02, 0xd7, 0xc8, 0x40, 0x11, 0x17, 0x58, 0x38, 0x62, 0x60, 0x00, 0x21, 0x08, 0x06, 0x6d, + 0x20, 0x06, 0x89, 0x37, 0x62, 0x60, 0x00, 0x21, 0x08, 0x06, 0x6d, 0x30, 0x06, 0xc6, 0x37, 0x62, + 0x60, 0x00, 0x21, 0x08, 0x06, 0x6d, 0x40, 0x06, 0x03, 0x18, 0x0c, 0x1b, 0x10, 0xd9, 0x50, 0x00, + 0x3e, 0x9b, 0x90, 0x51, 0xc3, 0x06, 0x44, 0x30, 0x0c, 0x80, 0xcf, 0x26, 0x68, 0xd8, 0xb0, 0x01, + 0x11, 0x0c, 0x04, 0xb0, 0x21, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x0c, 0x62, 0x10, + 0x02, 0xa0, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x92, + 0x8d, 0x25, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x4a, 0x16, 0x83, 0xf0, 0xed, 0x06, + 0x21, 0x58, 0x28, 0x00, 0x14, 0x9f, 0x4d, 0x08, 0x0c, 0x0a, 0x64, 0x64, 0xc4, 0xc0, 0x00, 0x42, + 0x10, 0x0c, 0xe6, 0x20, 0x0a, 0x8e, 0x0c, 0x6e, 0x31, 0x6c, 0x40, 0x2c, 0x01, 0x01, 0x2c, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xa4, 0x28, 0x03, 0x1a, 0x14, 0x44, 0x61, 0x90, 0xab, 0x04, 0x48, 0x36, + 0x96, 0x10, 0x04, 0x00, 0x84, 0x00, 0x4a, 0x22, 0x83, 0xf0, 0xed, 0x06, 0x21, 0x38, 0x28, 0x00, + 0x10, 0x9f, 0x4d, 0x08, 0x10, 0x9f, 0x4d, 0x10, 0x10, 0x0a, 0x5c, 0x63, 0xc4, 0xc0, 0x00, 0x42, + 0x10, 0x0c, 0xde, 0xe0, 0x0a, 0x92, 0x0c, 0x14, 0x41, 0x85, 0x8c, 0x8c, 0x18, 0x18, 0x40, 0x08, + 0x82, 0xc1, 0x1c, 0x60, 0xc1, 0x92, 0xc1, 0x2d, 0x86, 0x0d, 0x08, 0x29, 0x28, 0x00, 0x9f, 0x4d, + 0x90, 0xa0, 0x61, 0x03, 0x22, 0x28, 0x08, 0x60, 0x43, 0x62, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0b, 0x86, 0x00, 0x40, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xd0, 0x80, 0x02, 0x29, 0x83, 0x02, 0x2a, 0xa4, 0x82, 0x22, 0xc5, 0x08, 0x00, 0x0d, + 0x0a, 0xab, 0x10, 0x03, 0x48, 0x51, 0x03, 0x34, 0x28, 0xc8, 0x80, 0xc2, 0x0c, 0x28, 0xbc, 0x42, + 0x28, 0x08, 0x00, 0x00, 0x33, 0x11, 0xa0, 0xa0, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6a, 0x00, + 0x82, 0x60, 0x40, 0x88, 0x05, 0x14, 0xf8, 0x6c, 0x02, 0xf5, 0x50, 0x05, 0x2b, 0xc3, 0x06, 0xc4, + 0x10, 0x14, 0x00, 0x09, 0xb0, 0x32, 0xc7, 0x10, 0x58, 0x91, 0xcf, 0x26, 0x14, 0xd3, 0xb0, 0x01, + 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x4c, 0x3e, 0x9b, 0x70, 0x4c, 0xc3, 0x06, 0x44, 0x20, 0x14, + 0x80, 0xcf, 0x26, 0x20, 0xd3, 0xb0, 0x01, 0x11, 0x68, 0x03, 0xe0, 0xb3, 0x09, 0xc9, 0x34, 0x6c, + 0x40, 0x04, 0x13, 0x01, 0xf8, 0x6c, 0x82, 0x22, 0x0d, 0x1b, 0x10, 0x01, 0x35, 0x00, 0x3e, 0x9b, + 0xb0, 0x48, 0xc3, 0x06, 0x44, 0x20, 0x0d, 0x80, 0xcf, 0x26, 0x30, 0xd1, 0xb0, 0x01, 0x11, 0x4c, + 0x04, 0xe0, 0xb3, 0x09, 0x4d, 0x34, 0x6c, 0x40, 0x04, 0xd4, 0x00, 0x90, 0x18, 0x00, 0xca, 0x88, + 0x81, 0xc1, 0x07, 0x20, 0x08, 0x06, 0x87, 0x38, 0x04, 0x0f, 0x09, 0x8a, 0x41, 0x85, 0x62, 0xf8, + 0x6c, 0x42, 0x44, 0xd1, 0x82, 0x28, 0xc3, 0x06, 0xc4, 0x18, 0x10, 0x04, 0xe0, 0xb3, 0x09, 0x63, + 0x50, 0x0d, 0x1b, 0x10, 0x01, 0x31, 0x00, 0x3e, 0x9b, 0x40, 0x06, 0x15, 0x11, 0xb5, 0x31, 0x6c, + 0x40, 0x08, 0x01, 0x01, 0xf8, 0x6c, 0x82, 0x19, 0x90, 0xc1, 0xb0, 0x01, 0x11, 0x14, 0x04, 0x30, + 0x62, 0x60, 0xa8, 0x01, 0x08, 0x82, 0x01, 0x61, 0x17, 0x66, 0x70, 0x2d, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x34, 0x28, 0xb0, 0x02, 0x29, 0x83, 0x02, 0x2a, 0xa4, 0x82, 0x22, 0xc5, + 0x08, 0x00, 0x0d, 0x0a, 0x8b, 0x10, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x7d, 0xa0, + 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0xf0, 0x84, 0x12, 0xf8, 0x6c, + 0x82, 0x93, 0xd0, 0x03, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb0, 0x32, 0xc7, 0x10, + 0x40, 0x8b, 0xcf, 0x26, 0x14, 0xcd, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x34, 0x3e, + 0x9b, 0x70, 0x34, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0xcf, 0x26, 0x20, 0xcd, 0xb0, 0x01, 0x11, + 0x50, 0x03, 0xe0, 0xb3, 0x09, 0x49, 0x33, 0x6c, 0x40, 0x04, 0x0d, 0x01, 0xf8, 0x6c, 0x82, 0xc2, + 0x0c, 0x1b, 0x10, 0x81, 0x33, 0x00, 0x94, 0x01, 0xca, 0x88, 0x81, 0xc1, 0x07, 0x20, 0x08, 0x06, + 0xc7, 0x2d, 0x04, 0x0c, 0x15, 0x88, 0x32, 0x1c, 0x11, 0x38, 0x84, 0x7f, 0x64, 0x60, 0x8b, 0x61, + 0x03, 0x22, 0x0b, 0x02, 0x60, 0xc4, 0xc0, 0x50, 0x03, 0x10, 0x04, 0x03, 0x02, 0x2d, 0xb0, 0x67, + 0x01, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x34, 0x28, 0xd0, 0x80, 0x02, 0x21, 0xc4, 0x08, + 0x00, 0x0d, 0xca, 0xa0, 0x80, 0x0a, 0xa9, 0xa0, 0x48, 0x31, 0x02, 0x40, 0x83, 0xc2, 0x2a, 0xc4, + 0x00, 0x52, 0xd4, 0x00, 0x0d, 0x0a, 0x32, 0xa0, 0x30, 0x03, 0x0a, 0xaf, 0x10, 0x0a, 0x02, 0x00, + 0x33, 0x11, 0xa0, 0xa0, 0xa4, 0x44, 0x29, 0x8c, 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0x88, + 0x45, 0x14, 0xf8, 0x6c, 0x02, 0x05, 0x51, 0x05, 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, + 0xb0, 0x32, 0xc7, 0x10, 0x48, 0x91, 0xcf, 0x26, 0x14, 0xd4, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, + 0x86, 0x30, 0x4c, 0x3e, 0x9b, 0x70, 0x4c, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0xcf, 0x26, 0x20, + 0xd3, 0xb0, 0x01, 0x11, 0x6c, 0x03, 0xe0, 0xb3, 0x09, 0xc9, 0x34, 0x6c, 0x40, 0x04, 0x13, 0x01, + 0xf8, 0x6c, 0x82, 0x22, 0x0d, 0x1b, 0x10, 0x01, 0x35, 0x00, 0x3e, 0x9b, 0xb0, 0x48, 0xc3, 0x06, + 0x44, 0x20, 0x0d, 0x80, 0xcf, 0x26, 0x30, 0xd1, 0xb0, 0x01, 0x11, 0x4c, 0x04, 0xe0, 0xb3, 0x09, + 0x4d, 0x34, 0x6c, 0x40, 0x04, 0xd4, 0x00, 0x90, 0x18, 0x00, 0xca, 0x88, 0x81, 0xc1, 0x07, 0x20, + 0x08, 0x06, 0x87, 0x38, 0x04, 0x0f, 0x09, 0x8a, 0x41, 0x85, 0x62, 0xf8, 0x6c, 0x42, 0x44, 0xd1, + 0x82, 0x28, 0xc3, 0x06, 0x04, 0x19, 0x10, 0x04, 0xe0, 0xb3, 0x09, 0x64, 0x50, 0x0d, 0x1b, 0x10, + 0x01, 0x31, 0x00, 0x3e, 0x9b, 0x50, 0x06, 0x15, 0x11, 0xb5, 0x31, 0x6c, 0x40, 0x08, 0x01, 0x01, + 0xf8, 0x6c, 0xc2, 0x19, 0x94, 0xc1, 0xb0, 0x01, 0x11, 0x14, 0x04, 0x30, 0x62, 0x60, 0xa8, 0x01, + 0x08, 0x82, 0x01, 0x61, 0x17, 0x67, 0x70, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x28, 0xb0, 0x02, 0x21, 0xc4, 0x08, 0x00, 0x0d, 0xca, 0xa0, 0x80, 0x0a, 0xa9, 0xa0, 0x48, + 0x31, 0x02, 0x40, 0x83, 0xc2, 0x02, 0x00, 0x00, 0x33, 0x11, 0x7d, 0xa0, 0xa4, 0x44, 0x29, 0x8c, + 0x18, 0x18, 0x6a, 0x00, 0x82, 0x60, 0x40, 0xec, 0x84, 0x12, 0xf8, 0x6c, 0x42, 0x93, 0x90, 0x03, + 0x2b, 0xc3, 0x06, 0xc4, 0x10, 0x14, 0x00, 0x09, 0xb0, 0x32, 0xc7, 0x10, 0x2c, 0x8a, 0xcf, 0x26, + 0x14, 0xcd, 0xb0, 0x01, 0x11, 0x08, 0x05, 0x30, 0x86, 0x30, 0x30, 0x3e, 0x9b, 0x70, 0x30, 0xc3, + 0x06, 0x44, 0x20, 0x14, 0x80, 0xcf, 0x26, 0x20, 0xcc, 0xb0, 0x01, 0x11, 0x50, 0x03, 0xe0, 0xb3, + 0x09, 0x09, 0x33, 0x6c, 0x40, 0x04, 0x0c, 0x01, 0xf8, 0x6c, 0x82, 0xb2, 0x0c, 0x1b, 0x10, 0x41, + 0x33, 0x00, 0x84, 0x01, 0xca, 0x88, 0x81, 0xc1, 0x07, 0x20, 0x08, 0x06, 0x87, 0x2d, 0x04, 0x0c, + 0x15, 0x88, 0x32, 0x1c, 0x11, 0x50, 0x84, 0x7f, 0x64, 0x60, 0x8b, 0x61, 0x03, 0x22, 0x0b, 0x02, + 0x60, 0xc4, 0xc0, 0x50, 0x03, 0x10, 0x04, 0x03, 0xe2, 0x2c, 0xb0, 0x67, 0x01, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x02, 0x29, 0x20, 0x42, 0x8c, 0x00, 0xd0, 0xa0, 0x0c, + 0x48, 0x31, 0x02, 0x50, 0x08, 0xa3, 0x01, 0x65, 0x40, 0xb8, 0x39, 0x08, 0x9b, 0xb8, 0x09, 0x9c, + 0xc8, 0x89, 0xb1, 0x08, 0x20, 0x20, 0x06, 0x42, 0x8c, 0x06, 0x10, 0x6c, 0x0e, 0x82, 0x27, 0x78, + 0x82, 0x27, 0x68, 0x82, 0x14, 0xa5, 0x40, 0xb8, 0x39, 0x08, 0x9f, 0xc0, 0x09, 0x9c, 0xc8, 0x89, + 0x39, 0x08, 0x9b, 0xf0, 0x09, 0x9c, 0xc8, 0x89, 0xb1, 0x08, 0x20, 0x28, 0x06, 0x52, 0x14, 0x03, + 0xe1, 0xe6, 0x20, 0xc4, 0x02, 0x27, 0x70, 0x22, 0x27, 0xe6, 0x20, 0x6c, 0x42, 0x2c, 0x70, 0x22, + 0x27, 0xc6, 0x22, 0x80, 0xc0, 0x18, 0x08, 0x31, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x04, 0x9b, + 0x83, 0xe0, 0x09, 0x9e, 0xe0, 0x09, 0xb3, 0x20, 0xdc, 0x1c, 0x04, 0x4b, 0xe0, 0x04, 0x4e, 0xe4, + 0xc4, 0x1c, 0x84, 0x4d, 0xb0, 0x04, 0x4e, 0xe4, 0xc4, 0x58, 0x04, 0x10, 0x1c, 0x03, 0x0d, 0x0a, + 0x0c, 0x00, 0x00, 0x00, 0x3e, 0x9b, 0xe0, 0x6d, 0x14, 0x00, 0x48, 0x7e, 0x83, 0xf0, 0x09, 0x05, + 0x21, 0xa0, 0x00, 0x56, 0x7c, 0x36, 0x41, 0xf8, 0x28, 0x80, 0x15, 0x9f, 0x4d, 0x20, 0xc0, 0x80, + 0x02, 0x58, 0x99, 0x63, 0x28, 0xc2, 0x00, 0x0c, 0x06, 0x19, 0x02, 0x82, 0x1b, 0x64, 0x08, 0x06, + 0x6e, 0xd8, 0x80, 0x40, 0x83, 0xa0, 0x00, 0x06, 0x19, 0x36, 0x24, 0x1b, 0x64, 0x08, 0x8e, 0x6c, + 0x90, 0x21, 0x30, 0x32, 0x9f, 0x4d, 0x58, 0x83, 0x34, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, + 0x19, 0x3e, 0x26, 0x1b, 0x64, 0x08, 0x96, 0x6c, 0x90, 0x21, 0x50, 0x32, 0x9f, 0x4d, 0x78, 0x03, + 0x36, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x32, 0x08, 0x1b, 0x64, 0x08, 0x1e, 0x6c, + 0x90, 0x21, 0x70, 0x30, 0x9f, 0x4d, 0x98, 0x03, 0x6c, 0xd8, 0x80, 0x08, 0x84, 0x02, 0x58, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x52, 0x14, 0x02, 0x00, 0x00, 0x3e, 0x9b, 0x50, 0x08, + 0x14, 0x00, 0x48, 0x1a, 0x83, 0xf0, 0x09, 0x07, 0x21, 0x20, 0x28, 0x50, 0x8c, 0x61, 0x03, 0x02, + 0x09, 0x06, 0x60, 0x01, 0x61, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x28, 0x08, 0x00, 0x3e, 0x9b, 0x40, 0x04, + 0x14, 0x00, 0x48, 0x16, 0x83, 0xf0, 0x09, 0x07, 0x21, 0x60, 0x28, 0xb0, 0x95, 0x0c, 0x14, 0x31, + 0x6c, 0x40, 0x20, 0xc1, 0x00, 0x2c, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x02, + 0x29, 0xa0, 0x02, 0x23, 0xc5, 0x08, 0x40, 0x21, 0x8c, 0x06, 0x10, 0x6e, 0x0e, 0xa2, 0x26, 0x6c, + 0xe2, 0x26, 0x6e, 0x62, 0x0e, 0xa2, 0x26, 0x52, 0xc2, 0x26, 0x6e, 0x62, 0x2c, 0x02, 0x08, 0x04, + 0x82, 0x14, 0xa5, 0x40, 0xb8, 0x39, 0x88, 0x94, 0xd8, 0x89, 0x9b, 0xb8, 0x89, 0x39, 0x88, 0x9a, + 0x48, 0x89, 0x9d, 0xb8, 0x89, 0xb1, 0x08, 0x20, 0x10, 0x0a, 0x52, 0x14, 0x03, 0xe1, 0xe6, 0x20, + 0x54, 0xe2, 0x27, 0x6e, 0xe2, 0x26, 0xe6, 0x20, 0x6a, 0x22, 0x25, 0x7e, 0xe2, 0x26, 0xc6, 0x22, + 0x80, 0x40, 0x30, 0x68, 0x50, 0x64, 0x64, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x9b, 0x70, 0x51, + 0x14, 0x00, 0x48, 0x62, 0x83, 0xf0, 0x09, 0x05, 0x21, 0xa0, 0x0c, 0x56, 0x7c, 0x36, 0x41, 0xc3, + 0x28, 0x80, 0x15, 0x9f, 0x4d, 0xe0, 0x32, 0x0a, 0x60, 0xc5, 0x67, 0x13, 0x3c, 0x8d, 0x02, 0x58, + 0x19, 0x64, 0x38, 0x0a, 0x6c, 0x90, 0x21, 0x20, 0xb0, 0x41, 0x86, 0x60, 0xc0, 0x86, 0x0d, 0x88, + 0x25, 0x28, 0x80, 0x41, 0x06, 0x05, 0xb9, 0x06, 0x19, 0x82, 0xe3, 0x1a, 0x64, 0x08, 0x8c, 0xcb, + 0x67, 0x13, 0x1c, 0x32, 0x18, 0x36, 0x20, 0x02, 0xa1, 0x00, 0x06, 0x19, 0x1c, 0xe6, 0x1a, 0x64, + 0x08, 0x96, 0x6b, 0x90, 0x21, 0x50, 0x2e, 0x9f, 0x4d, 0x90, 0xce, 0x60, 0xd8, 0x80, 0x08, 0x84, + 0x02, 0xf0, 0xd9, 0x84, 0x09, 0x1b, 0x36, 0x20, 0x02, 0x4c, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x02, 0x2b, 0x32, 0xb2, 0x95, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x9b, 0x70, 0x10, 0x14, 0x00, 0x48, 0x22, 0x83, 0xf0, 0x09, 0x05, 0x21, 0xc8, 0xc4, 0x06, + 0x3e, 0x9b, 0x20, 0x20, 0xc3, 0x06, 0x44, 0x20, 0x14, 0x80, 0xcf, 0x26, 0x0c, 0xc8, 0xb0, 0x01, + 0x11, 0x20, 0x02, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x28, 0x88, 0x42, + 0x2b, 0x32, 0xb2, 0x95, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x9b, 0x70, 0x10, 0x14, 0x00, 0x48, 0x22, + 0x83, 0xf0, 0x09, 0x05, 0x21, 0xf0, 0xd9, 0x84, 0xe0, 0x18, 0x36, 0x20, 0x02, 0x65, 0x00, 0x7c, + 0x36, 0x41, 0x38, 0x86, 0x0d, 0x88, 0xe0, 0x10, 0x80, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x28, 0x88, 0x12, 0x2b, 0x32, 0xb2, 0x95, 0x00, 0x00, 0x00, 0x00, 0x59, 0xd8, 0xc2, 0x67, + 0x13, 0x90, 0x82, 0x02, 0x00, 0xc9, 0x64, 0x10, 0x3e, 0xa1, 0x20, 0x04, 0x3e, 0x9b, 0x10, 0x20, + 0xc3, 0x06, 0x44, 0x60, 0x04, 0x80, 0xcf, 0x26, 0x08, 0xc8, 0xb0, 0x01, 0x11, 0x20, 0x02, 0xb0, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x00, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, + 0x8a, 0x9d, 0x3d, 0x38, 0x86, 0x00, 0x00, 0x84, 0x60, 0xc8, 0x00, 0xb1, 0x1c, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, + 0x20, 0x04, 0x42, 0x30, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x30, + 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x13, 0x04, 0xc1, 0xb8, 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xb8, + 0x41, 0x32, 0x08, 0x01, 0x20, 0x04, 0x42, 0x40, 0x8c, 0x26, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x06, 0x8a, 0xcd, 0x41, 0xb1, + 0xe3, 0x06, 0x49, 0x11, 0x08, 0x80, 0x10, 0x08, 0xc1, 0x30, 0x9a, 0x10, 0x04, 0xa3, 0x09, 0x02, + 0x90, 0x01, 0x62, 0xa7, 0x23, 0x90, 0x60, 0x40, 0x38, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x01, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0b, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x02, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0c, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x03, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x05, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x06, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x08, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0a, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x0e, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x03, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x07, 0x20, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, 0xc1, 0x21, 0x04, 0x09, 0x20, 0x04, 0x04, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x04, 0xc1, 0xec, + 0xc1, 0x21, 0x04, 0x0d, 0x20, 0x04, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x32, 0x0e, 0x10, 0x22, 0x84, 0x00, 0xc6, 0x11, 0x48, 0x90, 0x1d, 0x81, + 0x05, 0xf6, 0x11, 0x68, 0xf0, 0x28, 0x81, 0x07, 0xc6, 0x12, 0x88, 0x60, 0x2e, 0x81, 0x09, 0xc1, + 0x13, 0xa8, 0x20, 0x3d, 0x81, 0x0b, 0xfd, 0x13, 0xc8, 0xb0, 0x4b, 0x81, 0x0d, 0xce, 0x14, 0xe8, + 0x80, 0x4e, 0x81, 0x0f, 0x89, 0x15, 0x08, 0x61, 0x5a, 0x81, 0x11, 0xdd, 0x15, 0x28, 0xa1, 0x6b, + 0x81, 0x13, 0xce, 0x16, 0x48, 0x71, 0x6f, 0x81, 0x15, 0xdb, 0x17, 0x68, 0xf1, 0x7f, 0x81, 0x17, + 0xe5, 0x18, 0x88, 0xa1, 0x9f, 0x81, 0x1a, 0x95, 0x1a, 0xc8, 0x01, 0xab, 0x81, 0x1e, 0xcb, 0x1a, + 0x08, 0x12, 0xae, 0x81, 0x22, 0xf7, 0x1a, 0x48, 0xd2, 0xb8, 0x81, 0x26, 0xaa, 0x1b, 0x88, 0x72, + 0xbc, 0x81, 0x2a, 0xe4, 0x1b, 0xc8, 0xb2, 0xbf, 0x81, 0x2e, 0x92, 0x1c, 0x08, 0x93, 0xca, 0x81, + 0x31, 0xba, 0x1c, 0x28, 0xf3, 0xcc, 0x81, 0x34, 0xf0, 0x1c, 0x68, 0x13, 0xd9, 0x81, 0x38, 0xb8, + 0x1d, 0xa8, 0xf3, 0xdd, 0x81, 0x3c, 0x82, 0x1e, 0xe8, 0x53, 0xea, 0x81, 0x40, 0xd1, 0x1e, 0x28, + 0xe4, 0xef, 0x81, 0x44, 0x9a, 0x1f, 0x68, 0x94, 0xfb, 0x81, 0x48, 0xd5, 0x1f, 0xa8, 0x44, 0xff, + 0x81, 0x4b, 0x8e, 0x20, 0xc8, 0x64, 0x0b, 0x82, 0x4d, 0xc8, 0x20, 0xe8, 0x74, 0x0e, 0x82, 0x50, + 0xa8, 0x21, 0x28, 0x55, 0x1d, 0x82, 0x53, 0x97, 0x22, 0x48, 0x45, 0x2c, 0x82, 0x55, 0x8c, 0x23, + 0x68, 0x95, 0x39, 0x82, 0x57, 0xa6, 0x23, 0x88, 0x05, 0x3e, 0x82, 0x59, 0xf2, 0x23, 0xa8, 0x35, + 0x48, 0x82, 0x5b, 0x95, 0x24, 0xc8, 0xb5, 0x49, 0x82, 0x5d, 0xa1, 0x24, 0xe8, 0x75, 0x4a, 0x82, + 0x5f, 0xad, 0x24, 0x08, 0x46, 0x4b, 0x82, 0x61, 0xbb, 0x24, 0x28, 0x26, 0x4c, 0x82, 0x63, 0xc9, + 0x24, 0x48, 0x06, 0x4d, 0x82, 0x65, 0xdb, 0x24, 0x68, 0x16, 0x4e, 0x82, 0x67, 0xe7, 0x24, 0x88, + 0xd6, 0x4e, 0x82, 0x69, 0xf3, 0x24, 0xa8, 0x96, 0x4f, 0x82, 0x6b, 0xff, 0x24, 0xc8, 0x56, 0x58, + 0x82, 0x6d, 0x8b, 0x25, 0xe8, 0x16, 0x59, 0x82, 0x6f, 0x97, 0x25, 0x08, 0xd7, 0x59, 0x82, 0x71, + 0xa3, 0x25, 0x28, 0x97, 0x5a, 0x82, 0x73, 0xaf, 0x25, 0x48, 0x57, 0x5b, 0x82, 0x75, 0xbb, 0x25, + 0x68, 0x17, 0x5c, 0x82, 0x77, 0xc7, 0x25, 0x88, 0xd7, 0x5c, 0x82, 0x79, 0xd3, 0x25, 0xa8, 0x97, + 0x5d, 0x82, 0x7b, 0xdf, 0x25, 0xc8, 0x57, 0x5e, 0x82, 0x7d, 0xeb, 0x25, 0xe8, 0x17, 0x5f, 0x82, + 0x7f, 0xf7, 0x25, 0x08, 0x18, 0xd0, 0x5f, 0x82, 0x81, 0x01, 0x83, 0x26, 0x28, 0x18, 0x90, 0x68, + 0x82, 0x83, 0x01, 0x8f, 0x26, 0x48, 0x18, 0x50, 0x69, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x65, 0x0c, 0x00, 0x00, 0x4f, 0x03, 0x00, 0x00, 0x12, 0x03, 0x94, 0x70, 0x3a, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x7f, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x0f, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xa7, 0x0f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x3e, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x59, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x74, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x8a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x8f, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xaa, 0x10, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xbc, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc5, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdf, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xed, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf9, 0x10, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x13, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x1d, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x31, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x4f, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x55, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x6d, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8b, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x8d, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xa9, 0x11, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xc7, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc5, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xe3, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xdf, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xff, 0x11, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xf9, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x1b, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x33, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x29, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x4b, 0x12, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x63, 0x12, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x55, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x6d, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x7d, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x8a, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xa3, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xa3, 0x02, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x98, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc1, 0x02, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xdb, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xdb, 0x02, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xb4, 0x12, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xfa, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x15, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x15, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xd1, 0x12, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x35, 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x4f, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x4f, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xed, 0x12, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x6e, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x87, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xa5, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xbd, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xbd, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x22, 0x13, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xda, 0x03, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf3, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf3, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x3d, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x11, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x2b, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2b, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x59, 0x13, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x4a, 0x04, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x65, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x76, 0x13, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x85, 0x04, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x9f, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x9f, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x92, 0x13, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xbe, 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xd7, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xd7, 0x04, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xad, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xf5, 0x04, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc3, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd9, 0x13, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x1d, 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x3c, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3c, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xfa, 0x13, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x60, 0x05, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x85, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x85, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x21, 0x14, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0xaf, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xd3, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xd3, 0x05, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x47, 0x14, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0xfc, 0x05, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x26, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x26, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x73, 0x14, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x55, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x74, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x74, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x94, 0x14, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x98, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xbd, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xbd, 0x06, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xbb, 0x14, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0xe7, 0x06, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x0b, 0x07, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0b, 0x07, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xe1, 0x14, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x34, 0x07, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x5e, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x5e, 0x07, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x0d, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x8d, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xaa, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xaa, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x2c, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xcc, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xe9, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xe9, 0x07, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x4b, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x0b, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x2e, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x70, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x56, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x79, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x79, 0x08, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x95, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xa1, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xba, 0x15, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc4, 0x08, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xdf, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xe7, 0x08, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xfe, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1d, 0x16, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x21, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x41, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x41, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x3f, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x5f, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7b, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x7b, 0x09, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0x5d, 0x16, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x95, 0x09, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x78, 0x16, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xae, 0x09, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x8f, 0x16, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xc3, 0x09, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xaf, 0x16, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xe1, 0x09, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xcd, 0x16, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0xfd, 0x09, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf3, 0x16, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x21, 0x0a, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x17, 0x17, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x43, 0x0a, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x41, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x6b, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x63, 0x17, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x8b, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x85, 0x17, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xab, 0x0a, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa0, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc4, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xbc, 0x17, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xde, 0x0a, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd8, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xf8, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf5, 0x17, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x12, 0x18, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x2e, 0x0b, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x35, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4f, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x59, 0x18, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x71, 0x0b, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7d, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x93, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xa2, 0x18, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0xb6, 0x0b, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xc7, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xd9, 0x0b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xe3, 0x18, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xf3, 0x0b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x1d, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x29, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x3b, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x45, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x59, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x61, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x75, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x7b, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x92, 0x19, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x96, 0x0c, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xaf, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xb1, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xcd, 0x19, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xcd, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xeb, 0x19, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xe9, 0x0c, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x07, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x03, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x24, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x41, 0x1a, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x39, 0x0d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x5f, 0x1a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x55, 0x0d, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x7a, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x6e, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x96, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x88, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xb2, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xa2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xcf, 0x1a, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xbd, 0x0d, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xeb, 0x1a, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xd7, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x08, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf2, 0x0d, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x25, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x0d, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x43, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x29, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x5f, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x43, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x7c, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x5e, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x99, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x79, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xb7, 0x1b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x95, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0xd5, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xb1, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0xf1, 0x1b, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xcb, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x0e, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xe6, 0x0e, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x2b, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, 0x49, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x1d, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x28, 0x00, 0x00, + 0x39, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x39, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x46, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x46, 0x0f, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x53, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x53, 0x0f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x70, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x08, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x0c, 0x00, 0x00, 0x1d, 0x07, 0x00, 0x00, 0x12, 0x03, 0x94, 0xe7, + 0x78, 0x00, 0x00, 0x00, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6c, 0x76, + 0x6d, 0x2e, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x2e, 0x70, 0x30, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x2e, 0x70, + 0x30, 0x2e, 0x70, 0x30, 0x2e, 0x69, 0x36, 0x34, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x6c, 0x69, 0x66, + 0x65, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x65, 0x6e, 0x64, 0x2e, 0x70, 0x30, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, + 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, + 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, + 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, + 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, + 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, + 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, + 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, + 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, + 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, + 0x72, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, + 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, + 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, + 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x69, + 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, + 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, + 0x73, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, + 0x64, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, + 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, + 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6c, 0x6c, 0x76, + 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, + 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x31, 0x36, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x2e, 0x66, 0x61, 0x64, 0x64, 0x2e, 0x76, + 0x34, 0x66, 0x33, 0x32, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x75, 0x6d, 0x61, 0x78, 0x2e, 0x76, 0x32, + 0x69, 0x31, 0x36, 0x31, 0x39, 0x2e, 0x31, 0x2e, 0x33, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x2d, + 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x2d, + 0x6d, 0x73, 0x76, 0x63, 0x31, 0x39, 0x2e, 0x33, 0x33, 0x2e, 0x30, 0x2f, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x2f, 0x43, 0x6c, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x4c, 0x75, 0x69, 0x73, 0x61, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x2f, 0x66, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x2f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, + 0x6b, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x2e, 0x78, 0x38, + 0x36, 0x5f, 0x36, 0x34, 0x2e, 0x6c, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0x32, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, + 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x34, 0x64, 0x2e, 0x6d, 0x75, 0x6c, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6d, + 0x75, 0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x33, 0x64, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x33, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x76, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x34, 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, + 0x64, 0x2e, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x34, 0x64, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x32, 0x64, 0x2e, + 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x33, 0x64, 0x2e, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x34, 0x64, 0x2e, + 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x75, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, + 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, + 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, + 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, + 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x64, 0x2e, 0x73, 0x69, + 0x7a, 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, 0x64, 0x2e, 0x73, 0x69, 0x7a, + 0x65, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x61, 0x6e, 0x79, 0x2e, 0x6d, 0x6f, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, + 0x61, 0x6e, 0x79, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, + 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x2e, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x74, 0x2e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2e, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x64, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, + 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x6c, + 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, + 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, + 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x61, 0x6e, 0x64, 0x2e, 0x75, 0x6c, + 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, + 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, + 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, + 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, + 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6f, 0x72, 0x2e, 0x75, 0x6c, + 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x69, 0x6e, 0x74, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x75, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, + 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x2e, 0x78, 0x6f, 0x72, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6f, + 0x72, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, + 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, + 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x69, 0x6e, 0x74, + 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, 0x75, 0x69, + 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, + 0x6d, 0x69, 0x6e, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, + 0x78, 0x2e, 0x69, 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, + 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x69, + 0x6e, 0x74, 0x2e, 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, + 0x2e, 0x66, 0x65, 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, + 0x4c, 0x6c, 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x75, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x4c, 0x6c, + 0x75, 0x69, 0x73, 0x61, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x2e, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x2e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/backends/fallback/fallback_builtin/generate_and_embed_fallback_device_lib.py b/src/backends/fallback/fallback_builtin/generate_and_embed_fallback_device_lib.py new file mode 100644 index 000000000..614374726 --- /dev/null +++ b/src/backends/fallback/fallback_builtin/generate_and_embed_fallback_device_lib.py @@ -0,0 +1,64 @@ +import os +import subprocess +import platform +import re + + +def generate_and_embed(system_name: str, machine_name: str): + builtin_dir = os.path.dirname(os.path.realpath(__file__)) + file_name = "fallback_device_api_wrappers" + src_path = os.path.join(builtin_dir, f"{file_name}.cpp") + dst_path = os.path.join(builtin_dir, f"{file_name}.{system_name}.{machine_name}.ll") + subprocess.run(["clang++", "-c", "-emit-llvm", "-std=c++20", "-ffast-math", "-O3", + "-S", src_path, "-o", dst_path, "-fomit-frame-pointer", + "-fno-stack-protector", "-fno-rtti", "-fno-exceptions", + f"--target={machine_name}-unknown-{system_name}", + "-nostdinc", "-nostdlib", "-nostdinc++", "-nostdlib++"]) + with open(dst_path, "r", newline="\n") as f: + content = "".join(line for line in f.readlines() + if not line.strip().startswith("@llvm.used") and + not line.strip().startswith("@llvm.compiler.used") and + not line.strip().startswith("; ModuleID") and + not line.strip().startswith("source_filename")) + content = content.replace("\n\n\n", "\n\n") + content = content.replace("define hidden", "define private") + # find all @luisa_fallback_wrapper_(\w+) and collect in a list + impl_prefix = "@luisa_fallback_" + wrapper_prefix = "@luisa_fallback_wrapper_" + functions = re.findall(f"{wrapper_prefix}([a-zA-Z0-9_]+)", content) + for function_name in functions: + dotted_name = function_name.replace("_", ".") + print(f"{wrapper_prefix}{function_name} -> @luisa.{dotted_name}") + content = content.replace(f"{wrapper_prefix}{function_name}(", f"@luisa.{dotted_name}(") + content = content.replace(f"{impl_prefix}{function_name}(", f"@luisa.{dotted_name}.impl(") + with open(dst_path, "w") as f: + f.write(content) + with open(os.path.join(builtin_dir, "..", "fallback_device_api_map_symbols.inl.h"), "w") as f: + for function_name in functions: + dotted_name = function_name.replace("_", ".") + if f"luisa.{dotted_name}.impl(" in content: + f.write(f"map_symbol(\"luisa.{dotted_name}.impl\", &api::luisa_fallback_{function_name});\n") + # compile to bitcode + try: + bc_path = dst_path.replace(".ll", ".bc") + subprocess.run(["llvm-as", dst_path, "-o", bc_path]) + with open(bc_path, "rb") as f: + content = f.read() + except: + print("Failed to compile to bitcode.") + content = content.encode("utf-8") + with open(os.path.join(builtin_dir, f"{file_name}.{system_name}.{machine_name}.inl"), "wb") as f: + data = [f"0x{c:02x}" for c in content] + size = len(data) + f.write( + f'\nstatic const unsigned char luisa_fallback_backend_device_builtin_module[{size}] = {{\n'.encode("utf-8")) + wrapped = [" " + ", ".join(data[i: i + 16]) for i in range(0, len(data), 16)] + f.write(",\n".join(wrapped).encode("utf-8")) + f.write("\n};\n".encode("utf-8")) + + +if __name__ == "__main__": + for system in ["linux", "windows", "darwin"]: + for machine in ["x86_64", "arm64"]: + generate_and_embed(system, machine) + diff --git a/src/backends/fallback/fallback_codegen.cpp b/src/backends/fallback/fallback_codegen.cpp index 996e5ecc8..ec5b6e713 100644 --- a/src/backends/fallback/fallback_codegen.cpp +++ b/src/backends/fallback/fallback_codegen.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -17,6 +18,7 @@ #include #include +#include #include #include #include @@ -24,6 +26,8 @@ #include "fallback_codegen.h" +#include "fallback_accel.h" +#include "fallback_bindless_array.h" #include "fallback_buffer.h" #include "fallback_texture.h" @@ -45,7 +49,7 @@ class FallbackCodegen { // builtin variables #define LUISA_FALLBACK_BACKEND_DECL_BUILTIN_VARIABLE(NAME, INDEX) \ - static constexpr size_t builtin_variable_index_## NAME = INDEX; + static constexpr size_t builtin_variable_index_##NAME = INDEX; LUISA_FALLBACK_BACKEND_DECL_BUILTIN_VARIABLE(thread_id, 0) LUISA_FALLBACK_BACKEND_DECL_BUILTIN_VARIABLE(block_id, 1) LUISA_FALLBACK_BACKEND_DECL_BUILTIN_VARIABLE(dispatch_id, 2) @@ -62,6 +66,7 @@ class FallbackCodegen { luisa::unordered_map> _llvm_struct_types; luisa::unordered_map _llvm_constants; luisa::unordered_map _llvm_functions; + FallbackCodeGenFeedback::PrintInstMap _print_inst_map; private: void _reset() noexcept { @@ -85,8 +90,8 @@ class FallbackCodegen { switch (t->tag()) { case Type::Tag::BUFFER: return sizeof(FallbackBufferView); case Type::Tag::TEXTURE: return sizeof(FallbackTextureView); - case Type::Tag::BINDLESS_ARRAY: return sizeof(void *); - case Type::Tag::ACCEL: return sizeof(void *); + case Type::Tag::BINDLESS_ARRAY: return sizeof(FallbackBindlessArrayView); + case Type::Tag::ACCEL: return sizeof(FallbackAccelView); case Type::Tag::CUSTOM: LUISA_NOT_IMPLEMENTED(); default: break; } @@ -101,8 +106,8 @@ class FallbackCodegen { switch (t->tag()) { case Type::Tag::BUFFER: return alignof(FallbackBufferView); case Type::Tag::TEXTURE: return alignof(FallbackTextureView); - case Type::Tag::BINDLESS_ARRAY: return alignof(void *); - case Type::Tag::ACCEL: return alignof(void *); + case Type::Tag::BINDLESS_ARRAY: return alignof(FallbackBindlessArrayView); + case Type::Tag::ACCEL: return alignof(FallbackAccelView); case Type::Tag::CUSTOM: LUISA_NOT_IMPLEMENTED(); default: break; } @@ -177,10 +182,19 @@ class FallbackCodegen { auto llvm_i64_type = llvm::Type::getInt64Ty(_llvm_context); return llvm::StructType::get(_llvm_context, {llvm_ptr_type, llvm_i64_type}); } - case Type::Tag::TEXTURE: return llvm::VectorType::get(llvm::Type::getFloatTy(_llvm_context), 4u, false);//I don't know why but yeah a texture view is 16bytes - case Type::Tag::BINDLESS_ARRAY: return llvm::PointerType::get(_llvm_context, 0); + case Type::Tag::TEXTURE: { + auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); + auto llvm_i64_type = llvm::Type::getInt64Ty(_llvm_context); + return llvm::StructType::get(_llvm_context, {llvm_ptr_type, llvm_i64_type}); + } + case Type::Tag::BINDLESS_ARRAY: { + auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); + auto llvm_i64_type = llvm::Type::getInt64Ty(_llvm_context); + return llvm::StructType::get(_llvm_context, {llvm_ptr_type, llvm_i64_type}); + } case Type::Tag::ACCEL: { - return llvm::PointerType::get(_llvm_context, 0); + auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); + return llvm::StructType::get(_llvm_context, {llvm_ptr_type, llvm_ptr_type}); } case Type::Tag::CUSTOM: LUISA_NOT_IMPLEMENTED(); } @@ -384,6 +398,7 @@ class FallbackCodegen { } else { LUISA_ASSERT(ptr_type->is_array() || ptr_type->is_vector() || ptr_type->is_matrix(), "Invalid pointer type."); auto llvm_index = _lookup_value(current, b, index); + llvm_index = b.CreateZExtOrTrunc(llvm_index, llvm::Type::getInt64Ty(_llvm_context)); auto llvm_ptr_type = _translate_type(ptr_type, false); auto llvm_zero = b.getInt64(0); llvm_ptr = b.CreateInBoundsGEP(llvm_ptr_type, llvm_ptr, {llvm_zero, llvm_index}); @@ -832,7 +847,7 @@ class FallbackCodegen { "Invalid operand type for rotate left operation: {}.", elem_type->description()); } - auto llvm_elem_type = _translate_type(elem_type, false); + auto llvm_elem_type = _translate_type(elem_type, true); auto llvm_bit_width = llvm::ConstantInt::get(llvm_elem_type, bit_width); if (value_type->is_vector()) { llvm_bit_width = llvm::ConstantVector::getSplat( @@ -871,7 +886,7 @@ class FallbackCodegen { "Invalid operand type for rotate right operation: {}.", elem_type->description()); } - auto llvm_elem_type = _translate_type(elem_type, false); + auto llvm_elem_type = _translate_type(elem_type, true); auto llvm_bit_width = llvm::ConstantInt::get(llvm_elem_type, bit_width); if (value_type->is_vector()) { llvm_bit_width = llvm::ConstantVector::getSplat( @@ -1085,6 +1100,61 @@ class FallbackCodegen { intrinsic_id, operand_type->description()); } + [[nodiscard]] llvm::Value *_translate_unary_fp_math_operation(CurrentFunction ¤t, IRBuilder &b, const xir::Value *operand, const char *func) noexcept { + // Lookup LLVM value for operand + auto llvm_operand = _lookup_value(current, b, operand); + auto operand_type = operand->type(); + + // Type and null checks + LUISA_ASSERT(operand_type != nullptr, "Operand type is null."); + LUISA_ASSERT(operand_type->is_scalar() || operand_type->is_vector(), "Invalid operand type."); + + // Check if the operand is a valid floating-point type + auto elem_type = operand_type->is_vector() ? operand_type->element() : operand_type; + auto func_name = [elem_type, func] { + switch (elem_type->tag()) { + case Type::Tag::FLOAT16: return luisa::format("luisa.{}.f16", func); + case Type::Tag::FLOAT32: return luisa::format("luisa.{}.f32", func); + case Type::Tag::FLOAT64: return luisa::format("luisa.{}.f64", func); + default: break; + } + LUISA_ERROR_WITH_LOCATION("Invalid operand type for unary math operation {}: {}.", + func, elem_type->description()); + }(); + + auto llvm_elem_type = _translate_type(elem_type, true); + auto func_type = llvm::FunctionType::get(llvm_elem_type, {llvm_elem_type}, false); + + // declare the function and mark it as pure + auto f = _llvm_module->getOrInsertFunction(llvm::StringRef{func_name}, func_type); + if (auto decl = llvm::dyn_cast(f.getCallee())) { + // mark that the function is pure: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) + decl->addFnAttr(llvm::Attribute::NoCallback); + decl->addFnAttr(llvm::Attribute::NoUnwind); + decl->setMustProgress(); + decl->setDoesNotFreeMemory(); + decl->setNoSync(); + decl->setDoesNotThrow(); + decl->setSpeculatable(); + decl->setWillReturn(); + decl->setDoesNotAccessMemory(); + } else { + LUISA_ERROR_WITH_LOCATION("Invalid function declaration for unary math operation: {}.", func_name); + } + // call the function + if (operand_type->is_scalar()) { + return b.CreateCall(f, {llvm_operand}); + } + // vector type + auto llvm_result = llvm::cast(llvm::PoisonValue::get(llvm_operand->getType())); + for (auto i = 0u; i < operand_type->dimension(); i++) { + auto elem = b.CreateExtractElement(llvm_operand, i); + auto result_elem = b.CreateCall(f, {elem}); + llvm_result = b.CreateInsertElement(llvm_result, result_elem, i); + } + return llvm_result; + } + [[nodiscard]] llvm::Value *_translate_binary_fp_math_operation(CurrentFunction ¤t, IRBuilder &b, const xir::Value *op0, const xir::Value *op1, llvm::Intrinsic::ID intrinsic_id) noexcept { @@ -1107,6 +1177,62 @@ class FallbackCodegen { intrinsic_id, op0_type->description()); } + [[nodiscard]] llvm::Value *_translate_binary_fp_math_operation(CurrentFunction ¤t, IRBuilder &b, + const xir::Value *op0, const xir::Value *op1, + const char *func) noexcept { + auto llvm_op0 = _lookup_value(current, b, op0); + auto llvm_op1 = _lookup_value(current, b, op1); + auto op0_type = op0->type(); + auto op1_type = op1->type(); + LUISA_ASSERT(op0_type == op1_type, "Type mismatch."); + LUISA_ASSERT(op0_type != nullptr && (op0_type->is_scalar() || op0_type->is_vector()), "Invalid operand type."); + + auto elem_type = op0_type->is_vector() ? op0_type->element() : op0_type; + auto func_name = [elem_type, func] { + switch (elem_type->tag()) { + case Type::Tag::FLOAT16: return luisa::format("luisa.{}.f16", func); + case Type::Tag::FLOAT32: return luisa::format("luisa.{}.f32", func); + case Type::Tag::FLOAT64: return luisa::format("luisa.{}.f64", func); + default: break; + } + LUISA_ERROR_WITH_LOCATION("Invalid operand type for binary math operation {}: {}.", + func, elem_type->description()); + }(); + + auto llvm_elem_type = _translate_type(elem_type, true); + auto func_type = llvm::FunctionType::get(llvm_elem_type, {llvm_elem_type, llvm_elem_type}, false); + + // declare the function and mark it as pure + auto f = _llvm_module->getOrInsertFunction(llvm::StringRef{func_name}, func_type); + if (auto decl = llvm::dyn_cast(f.getCallee())) { + // mark that the function is pure: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) + decl->addFnAttr(llvm::Attribute::NoCallback); + decl->addFnAttr(llvm::Attribute::NoUnwind); + decl->setMustProgress(); + decl->setDoesNotFreeMemory(); + decl->setNoSync(); + decl->setDoesNotThrow(); + decl->setSpeculatable(); + decl->setWillReturn(); + decl->setDoesNotAccessMemory(); + } else { + LUISA_ERROR_WITH_LOCATION("Invalid function declaration for binary math operation: {}.", func_name); + } + // call the function + if (op0_type->is_scalar()) { + return b.CreateCall(f, {llvm_op0, llvm_op1}); + } + // vector type + auto llvm_result = llvm::cast(llvm::PoisonValue::get(llvm_op0->getType())); + for (auto i = 0u; i < op0_type->dimension(); i++) { + auto elem0 = b.CreateExtractElement(llvm_op0, i); + auto elem1 = b.CreateExtractElement(llvm_op1, i); + auto result_elem = b.CreateCall(f, {elem0, elem1}); + llvm_result = b.CreateInsertElement(llvm_result, result_elem, i); + } + return llvm_result; + } + [[nodiscard]] llvm::Value *_translate_vector_reduce(CurrentFunction ¤t, IRBuilder &b, xir::IntrinsicOp op, const xir::Value *operand) noexcept { LUISA_ASSERT(operand->type() != nullptr && operand->type()->is_vector(), @@ -1152,7 +1278,8 @@ class FallbackCodegen { operand_elem_type->description()); } - [[nodiscard]] llvm::Value *_translate_vector_dot(CurrentFunction ¤t, IRBuilder &b, const xir::Value *lhs, const xir::Value *rhs) noexcept { + [[nodiscard]] llvm::Value *_translate_vector_dot(CurrentFunction ¤t, IRBuilder &b, + const xir::Value *lhs, const xir::Value *rhs) noexcept { auto llvm_mul = _translate_binary_mul(current, b, lhs, rhs); if (llvm_mul->getType()->isFPOrFPVectorTy()) { auto llvm_elem_type = llvm_mul->getType()->isVectorTy() ? @@ -1164,7 +1291,8 @@ class FallbackCodegen { return b.CreateAddReduce(llvm_mul); } - [[nodiscard]] llvm::Value *_translate_isinf_isnan(CurrentFunction ¤t, IRBuilder &b, xir::IntrinsicOp op, const xir::Value *x) noexcept { + [[nodiscard]] llvm::Value *_translate_isinf_isnan(CurrentFunction ¤t, IRBuilder &b, + xir::IntrinsicOp op, const xir::Value *x) noexcept { auto type = x->type(); auto elem_type = type->is_vector() ? type->element() : type; auto llvm_x = _lookup_value(current, b, x); @@ -1199,49 +1327,44 @@ class FallbackCodegen { return _zext_i1_to_i8(b, llvm_cmp); } - [[nodiscard]] llvm::Value *_translate_buffer_write(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst, bool byte_address = false) noexcept { - //LUISA_NOT_IMPLEMENTED(); - auto buffer = inst->operand(0u); - LUISA_ASSERT(buffer->type()->is_buffer(), "Invalid buffer type."); - auto slot = inst->operand(1u); - auto value = inst->operand(2u); + [[nodiscard]] llvm::Value *_get_buffer_element_ptr(CurrentFunction ¤t, IRBuilder &b, + const xir::Value *buffer, const xir::Value *slot, + bool byte_address) noexcept { auto llvm_buffer = _lookup_value(current, b, buffer); // Get the buffer view auto llvm_buffer_addr = b.CreateExtractValue(llvm_buffer, {0});// Get the buffer address auto llvm_slot = _lookup_value(current, b, slot); // Get the slot index - auto llvm_value = _lookup_value(current, b, value); // Get the value to write - auto element_type = llvm_value->getType(); // Type of the value being written - auto slot_type = byte_address ? b.getInt8Ty() : element_type; - auto target_address = b.CreateInBoundsGEP( + llvm_slot = b.CreateZExtOrTrunc(llvm_slot, b.getInt64Ty()); + auto slot_type = byte_address ? b.getInt8Ty() : _translate_type(buffer->type()->element(), false); + return b.CreateInBoundsGEP( slot_type, // Element type llvm_buffer_addr,// Base pointer llvm_slot // Index ); + } + + [[nodiscard]] llvm::Value *_translate_buffer_write(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst, bool byte_address = false) noexcept { + auto buffer = inst->operand(0u); + auto slot = inst->operand(1u); + auto llvm_elem_ptr = _get_buffer_element_ptr(current, b, buffer, slot, byte_address); + auto value = inst->operand(2u); + auto llvm_value = _lookup_value(current, b, value);// Get the value to write auto alignment = _get_type_alignment(value->type()); - //b.CreateAlignmentAssumption(current.func->getDataLayout(), target_address, alignment); - return b.CreateAlignedStore(llvm_value, target_address, llvm::MaybeAlign{alignment}); + return b.CreateAlignedStore(llvm_value, llvm_elem_ptr, llvm::MaybeAlign{alignment}); } - [[nodiscard]] llvm::Value *_translate_buffer_read(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst, bool byte_address = false) noexcept { - //LUISA_NOT_IMPLEMENTED(); + [[nodiscard]] llvm::Value *_translate_buffer_read(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst, bool byte_address = false) noexcept { auto buffer = inst->operand(0u); - LUISA_ASSERT(buffer->type()->is_buffer(), "Invalid buffer type."); auto slot = inst->operand(1u); - auto llvm_buffer = _lookup_value(current, b, buffer); // Get the buffer view - auto llvm_buffer_addr = b.CreateExtractValue(llvm_buffer, {0});// Get the buffer address - auto llvm_slot = _lookup_value(current, b, slot); // Get the slot index - auto element_type = _translate_type(inst->type(), true); // Type of the value being read - auto slot_type = byte_address ? b.getInt8Ty() : element_type; - auto target_address = b.CreateInBoundsGEP( - slot_type, // Element type - llvm_buffer_addr,// Base pointer - llvm_slot // Index - ); + auto llvm_elem_ptr = _get_buffer_element_ptr(current, b, buffer, slot, byte_address); auto alignment = _get_type_alignment(inst->type()); - //b.CreateAlignmentAssumption(current.func->getDataLayout(), target_address, alignment); - return b.CreateAlignedLoad(element_type, target_address, llvm::MaybeAlign{alignment}); + auto llvm_element_type = _translate_type(inst->type(), true);// Type of the value being read + return b.CreateAlignedLoad(llvm_element_type, llvm_elem_ptr, llvm::MaybeAlign{alignment}); } - [[nodiscard]] llvm::Value *_translate_buffer_size(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst, bool byte_address = false) noexcept { + [[nodiscard]] llvm::Value *_translate_buffer_size(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst, bool byte_address = false) noexcept { auto buffer = inst->operand(0u); LUISA_ASSERT(buffer->type()->is_buffer(), "Invalid buffer type."); auto llvm_buffer = _lookup_value(current, b, buffer); @@ -1249,14 +1372,15 @@ class FallbackCodegen { auto llvm_result_type = _translate_type(inst->type(), true); llvm_byte_size = b.CreateZExtOrTrunc(llvm_byte_size, llvm_result_type); if (!byte_address) { - auto elem_size = buffer->type()->element()->size(); + auto elem_size = _get_type_size(buffer->type()->element()); auto llvm_elem_size = llvm::ConstantInt::get(llvm_result_type, elem_size); llvm_byte_size = b.CreateUDiv(llvm_byte_size, llvm_elem_size); } return llvm_byte_size; } - [[nodiscard]] llvm::Value *_translate_buffer_device_address(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + [[nodiscard]] llvm::Value *_translate_buffer_device_address(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { auto buffer = inst->operand(0u); LUISA_ASSERT(buffer->type()->is_buffer(), "Invalid buffer type."); auto llvm_buffer = _lookup_value(current, b, buffer); @@ -1265,160 +1389,72 @@ class FallbackCodegen { return b.CreatePtrToInt(llvm_buffer_ptr, llvm_int_type); } - [[nodiscard]] llvm::Value *_translate_device_address_read(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + [[nodiscard]] llvm::Value *_translate_device_address_read(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { auto llvm_device_address = _lookup_value(current, b, inst->operand(0u)); auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); auto llvm_ptr = b.CreateIntToPtr(llvm_device_address, llvm_ptr_type); auto alignment = _get_type_alignment(inst->type()); - //b.CreateAlignmentAssumption(current.func->getDataLayout(), llvm_ptr, alignment); auto llvm_result_type = _translate_type(inst->type(), true); return b.CreateAlignedLoad(llvm_result_type, llvm_ptr, llvm::MaybeAlign{alignment}); } - [[nodiscard]] llvm::Value *_translate_device_address_write(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + [[nodiscard]] llvm::Value *_translate_device_address_write(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { auto llvm_device_address = _lookup_value(current, b, inst->operand(0u)); auto llvm_value = _lookup_value(current, b, inst->operand(1u)); auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); auto llvm_ptr = b.CreateIntToPtr(llvm_device_address, llvm_ptr_type); auto alignment = _get_type_alignment(inst->operand(1u)->type()); - //b.CreateAlignmentAssumption(current.func->getDataLayout(), llvm_ptr, alignment); return b.CreateAlignedStore(llvm_value, llvm_ptr, llvm::MaybeAlign{alignment}); } - [[nodiscard]] llvm::Value *_translate_texture_read( - CurrentFunction ¤t, - IRBuilder &b, - const xir::Instruction *inst) noexcept { - - auto view_struct = inst->operand(0u); - auto coord = inst->operand(1u); - LUISA_ASSERT(view_struct->type() == Type::of>()|| - view_struct->type() == Type::of>(), "Invalid texture view type."); - - static const char* function_names[] = - { - "texture.read.2d.float", - "texture.read.2d.uint" - }; - unsigned int functionIdx = 0u; - if (view_struct->type() == Type::of>()) - functionIdx = 1u; - - // Get LLVM values for the arguments - auto llvm_view_struct = _lookup_value(current, b, view_struct); - auto llvm_coord = _lookup_value(current, b, coord); - - auto texture_struct_alloca = b.CreateAlloca(llvm_view_struct->getType(), nullptr, ""); - b.CreateStore(llvm_view_struct, texture_struct_alloca); - - auto outType = llvm::VectorType::get(_translate_type(view_struct->type()->element(), false), - 4u, false); - // Allocate space for the result locally - auto result_alloca = b.CreateAlloca(outType, nullptr, ""); - - // Extract x and y from uint2 coordinate - auto coord_x = b.CreateExtractElement(llvm_coord, b.getInt32(0), ""); - auto coord_y = b.CreateExtractElement(llvm_coord, b.getInt32(1), ""); - - // Define the function type: void(void*, uint, uint, void*) - auto func_type = llvm::FunctionType::get( - b.getVoidTy(), - {b.getPtrTy(), // void* texture_ptr - b.getInt32Ty(),// uint x - b.getInt32Ty(),// uint y - b.getPtrTy()}, // void* result - false); - - // Get the function pointer from the symbol map - auto func = _llvm_module->getOrInsertFunction(function_names[functionIdx], func_type); - - // Call the function - b.CreateCall(func, {texture_struct_alloca, coord_x, coord_y, result_alloca}); - - // Return the loaded result - return b.CreateLoad(outType, result_alloca, ""); - } - - [[nodiscard]] llvm::Value *_translate_texture_write( - CurrentFunction ¤t, - IRBuilder &b, - const xir::Value *view_struct, - const xir::Value *coord, - const xir::Value *val) noexcept { - - LUISA_ASSERT(view_struct->type() == Type::of>()|| - view_struct->type() == Type::of>(), "Invalid texture view type."); - - static const char* function_names[] = - { - "texture.write.2d.float", - "texture.write.2d.uint" - }; - - unsigned int functionIdx = 0u; - if (view_struct->type() == Type::of>()) - functionIdx = 1u; - - // Get LLVM values for the arguments - auto llvm_view_struct = _lookup_value(current, b, view_struct); - auto llvm_coord = _lookup_value(current, b, coord); - auto llvm_val = _lookup_value(current, b, val); - - // Allocate space for the texture view struct - auto texture_struct_alloca = b.CreateAlloca(llvm_view_struct->getType(), nullptr, ""); - b.CreateStore(llvm_view_struct, texture_struct_alloca); - - // Extract x and y from uint2 coordinate - auto coord_x = b.CreateExtractElement(llvm_coord, b.getInt32(0), ""); - auto coord_y = b.CreateExtractElement(llvm_coord, b.getInt32(1), ""); - - auto val_alloca = b.CreateAlloca(llvm_val->getType(), nullptr, ""); - b.CreateStore(llvm_val, val_alloca); - - // Define the function type: void(void*, uint, uint, void*) - auto func_type = llvm::FunctionType::get( - b.getVoidTy(), - {b.getPtrTy(), // void* texture_ptr - b.getInt32Ty(),// uint x - b.getInt32Ty(),// uint y - b.getPtrTy()}, // void* value - false); - - // Add attributes to the function (write operations typically do not use `readonly`) - auto func = _llvm_module->getOrInsertFunction(function_names[functionIdx], func_type); - - // Call the function - return b.CreateCall(func, {texture_struct_alloca, coord_x, coord_y, val_alloca}); - } - [[nodiscard]] llvm::Value *_translate_aggregate(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) { auto type = inst->type(); - LUISA_ASSERT(type->is_vector(), "only aggregate vectors at the moment"); auto elem_type = type->element(); auto dim = type->dimension(); - - auto llvm_elem_type = _translate_type(elem_type, true); - - auto llvm_return_type = llvm::VectorType::get(llvm_elem_type, dim, false); - - auto vector = llvm::cast(llvm::PoisonValue::get(llvm_return_type)); - for (int i = 0; i < dim; i++) { - auto operand = inst->operand(i); - LUISA_ASSERT(operand->type() == elem_type, "element type doesn't match"); - auto llvm_operand = _lookup_value(current, b, operand); - LUISA_ASSERT(llvm_operand->getType() == llvm_elem_type, "element type doesn't match"); - - vector = b.CreateInsertElement(vector, llvm_operand, static_cast(i)); + if (type->is_vector()) { + auto llvm_elem_type = _translate_type(elem_type, true); + + auto llvm_return_type = llvm::VectorType::get(llvm_elem_type, dim, false); + + auto vector = llvm::cast(llvm::PoisonValue::get(llvm_return_type)); + for (int i = 0; i < dim; i++) { + auto operand = inst->operand(i); + LUISA_ASSERT(operand->type() == elem_type, "element type doesn't match"); + auto llvm_operand = _lookup_value(current, b, operand); + LUISA_ASSERT(llvm_operand->getType() == llvm_elem_type, "element type doesn't match"); + + vector = b.CreateInsertElement(vector, llvm_operand, static_cast(i)); + } + return vector; + } + + if (type->is_matrix()) { + auto llvm_matrix_type = _translate_type(type, true); + auto llvm_matrix = llvm::cast(llvm::PoisonValue::get(llvm_matrix_type)); + for (auto i = 0u; i < dim; i++) { + auto col = inst->operand(i); + LUISA_ASSERT(col->type()->is_vector() && + col->type()->dimension() == dim && + col->type()->element() == elem_type, + "element type doesn't match"); + auto llvm_col = _lookup_value(current, b, col); + for (auto j = 0u; j < dim; j++) { + auto llvm_elem = b.CreateExtractElement(llvm_col, j); + llvm_matrix = b.CreateInsertValue(llvm_matrix, llvm_elem, {i, j}); + } + } + return llvm_matrix; } - return vector; + + LUISA_NOT_IMPLEMENTED(); } [[nodiscard]] llvm::Value *_translate_shuffle(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) { - // swfly has to give up using llvm's intrinsic for shuffle because it's too difficult - // don't give up auto result_type = inst->type(); LUISA_ASSERT(result_type->is_vector(), "shuffle target must be a vector"); @@ -1480,131 +1516,420 @@ class FallbackCodegen { return llvm_result; } - [[nodiscard]] llvm::Value *_translate_bindless_read( - CurrentFunction ¤t, - IRBuilder &b, - const xir::IntrinsicInst *inst) noexcept - { - auto bindless_ptr = inst->operand(0u); - auto slotIdx = inst->operand(1u); - auto elemIdx = inst->operand(2u); - auto type = inst->type(); - auto alignment = _get_type_alignment(inst->type()); - auto size = inst->type()->size(); + [[nodiscard]] llvm::Type *_get_llvm_bindless_slot_type() noexcept { + // struct Slot { + // ptr buffer_ptr; + // i64 buffer_size[63:8] sampler2d[7:4] sampler3d[3:0]; + // ptr tex2d_ptr; + // ptr tex3d_ptr; + // }; + auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); + auto llvm_i64_type = llvm::Type::getInt64Ty(_llvm_context); + return llvm::StructType::get(llvm_ptr_type, llvm_i64_type, llvm_ptr_type, llvm_ptr_type); + } + + [[nodiscard]] llvm::Value *_load_bindless_array_slot(CurrentFunction ¤t, IRBuilder &b, + llvm::Type *llvm_slot_type, + const xir::Value *bindless, + const xir::Value *slot_index) noexcept { + auto llvm_bindless = _lookup_value(current, b, bindless); + auto llvm_bindless_slots = b.CreateExtractValue(llvm_bindless, {0}); + auto llvm_slot_index = _lookup_value(current, b, slot_index); + llvm_slot_index = b.CreateZExtOrTrunc(llvm_slot_index, b.getInt64Ty()); + auto llvm_slot_ptr = b.CreateInBoundsGEP(llvm_slot_type, llvm_bindless_slots, {llvm_slot_index}); + return b.CreateAlignedLoad(llvm_slot_type, llvm_slot_ptr, llvm::MaybeAlign{16}, "bindless.slot"); + } + + [[nodiscard]] llvm::Value *_translate_bindless_buffer_read(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst, + bool byte_address = false) noexcept { + auto llvm_slot_type = _get_llvm_bindless_slot_type(); + auto result_type = inst->type(); + auto bindless = inst->operand(0); + auto slot_index = inst->operand(1); + auto index_or_offset = inst->operand(2); + auto llvm_slot = _load_bindless_array_slot(current, b, llvm_slot_type, bindless, slot_index); + auto llvm_buffer_ptr = b.CreateExtractValue(llvm_slot, {0}); + auto llvm_offset = _lookup_value(current, b, index_or_offset); + llvm_offset = b.CreateZExtOrTrunc(llvm_offset, b.getInt64Ty()); + auto llvm_addressing_type = byte_address ? b.getInt8Ty() : _translate_type(result_type, false); + auto llvm_target_address = b.CreateInBoundsGEP(llvm_addressing_type, llvm_buffer_ptr, {llvm_offset}); + auto alignment = _get_type_alignment(result_type); + auto llvm_result_type = _translate_type(result_type, true); + return b.CreateAlignedLoad(llvm_result_type, llvm_target_address, llvm::MaybeAlign{alignment}); + } + + [[nodiscard]] llvm::Value *_translate_bindless_buffer_write(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst, + bool byte_address = false) noexcept { + auto llvm_slot_type = _get_llvm_bindless_slot_type(); + auto bindless = inst->operand(0); + auto slot_index = inst->operand(1); + auto index_or_offset = inst->operand(2); + auto value = inst->operand(3); + auto llvm_slot = _load_bindless_array_slot(current, b, llvm_slot_type, bindless, slot_index); + auto llvm_buffer_ptr = b.CreateExtractValue(llvm_slot, {0}); + auto llvm_offset = _lookup_value(current, b, index_or_offset); + llvm_offset = b.CreateZExtOrTrunc(llvm_offset, b.getInt64Ty()); + auto llvm_value = _lookup_value(current, b, value); + auto llvm_addressing_type = byte_address ? b.getInt8Ty() : _translate_type(value->type(), false); + auto llvm_target_address = b.CreateInBoundsGEP(llvm_addressing_type, llvm_buffer_ptr, {llvm_offset}); + auto alignment = _get_type_alignment(value->type()); + return b.CreateAlignedStore(llvm_value, llvm_target_address, llvm::MaybeAlign{alignment}); + } + + [[nodiscard]] llvm::Value *_translate_bindless_buffer_size(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst, + bool byte_address = false) noexcept { + auto llvm_slot_type = _get_llvm_bindless_slot_type(); + auto bindless = inst->operand(0); + auto slot_index = inst->operand(1); + auto llvm_slot = _load_bindless_array_slot(current, b, llvm_slot_type, bindless, slot_index); + auto llvm_byte_size = b.CreateExtractValue(llvm_slot, {1}); + llvm_byte_size = b.CreateLShr(llvm_byte_size, 8); + if (!byte_address) { + auto stride = inst->operand(2); + auto llvm_stride = _lookup_value(current, b, stride); + llvm_stride = b.CreateZExtOrTrunc(llvm_stride, llvm_byte_size->getType()); + llvm_byte_size = b.CreateUDiv(llvm_byte_size, llvm_stride); + } + auto llvm_result_type = _translate_type(inst->type(), true); + return b.CreateZExtOrTrunc(llvm_byte_size, llvm_result_type); + } - // Get LLVM values for the arguments - auto llvm_bindless = _lookup_value(current, b, bindless_ptr); - auto llvm_slot = _lookup_value(current, b, slotIdx); - auto llvm_elem = _lookup_value(current, b, elemIdx); + [[nodiscard]] llvm::Value *_translate_bindless_buffer_device_address(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { + auto llvm_slot_type = _get_llvm_bindless_slot_type(); + auto bindless = inst->operand(0); + auto slot_index = inst->operand(1); + auto llvm_slot = _load_bindless_array_slot(current, b, llvm_slot_type, bindless, slot_index); + auto llvm_buffer_ptr = b.CreateExtractValue(llvm_slot, {0}); + auto llvm_int_type = _translate_type(inst->type(), false); + return b.CreatePtrToInt(llvm_buffer_ptr, llvm_int_type); + } - auto llvm_data_stride = llvm::ConstantInt::get(b.getInt32Ty(), inst->type()->size()); + [[nodiscard]] llvm::Value *_translate_matrix_transpose(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { + auto matrix = inst->operand(0u); + LUISA_ASSERT(matrix->type() != nullptr && + matrix->type() == inst->type() && + matrix->type()->is_matrix(), + "Invalid matrix type for transpose operation."); + auto dimension = inst->type()->dimension(); + auto llvm_matrix = _lookup_value(current, b, matrix); + auto llvm_matrix_alloca = b.CreateAlloca(llvm_matrix->getType()); + b.CreateStore(llvm_matrix, llvm_matrix_alloca); + auto llvm_result_type = _translate_type(inst->type(), true); + auto llvm_result_alloca = b.CreateAlloca(llvm_result_type); + auto llvm_func_name = luisa::format("luisa.matrix{}d.transpose", dimension); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + b.CreateCall(llvm_func, {llvm_matrix_alloca, llvm_result_alloca}); + return b.CreateLoad(llvm_result_type, llvm_result_alloca); + } + + [[nodiscard]] llvm::Value *_translate_matrix_comp_op(CurrentFunction ¤t, IRBuilder &b, + const xir::Value *lhs, const xir::Value *rhs, + llvm::Instruction::BinaryOps llvm_op) noexcept { + auto lhs_is_matrix = lhs->type()->is_matrix(); + auto rhs_is_matrix = rhs->type()->is_matrix(); + LUISA_ASSERT((lhs_is_matrix && rhs_is_matrix) || + (lhs_is_matrix && rhs->type()->is_scalar()) || + (lhs->type()->is_scalar() && rhs_is_matrix), + "Matrix or vector expected."); + auto matrix_type = lhs_is_matrix ? lhs->type() : rhs->type(); + auto llvm_matrix_type = _translate_type(matrix_type, true); + auto llvm_lhs = _lookup_value(current, b, lhs); + auto llvm_rhs = _lookup_value(current, b, rhs); + auto llvm_result = llvm::cast(llvm::PoisonValue::get(llvm_matrix_type)); + auto dim = matrix_type->dimension(); + for (auto i = 0u; i < dim; i++) { + for (auto j = 0u; j < dim; j++) { + auto llvm_lhs_elem = lhs_is_matrix ? b.CreateExtractValue(llvm_lhs, {i, j}) : llvm_lhs; + auto llvm_rhs_elem = rhs_is_matrix ? b.CreateExtractValue(llvm_rhs, {i, j}) : llvm_rhs; + auto llvm_elem = b.CreateBinOp(llvm_op, llvm_lhs_elem, llvm_rhs_elem); + llvm_result = b.CreateInsertValue(llvm_result, llvm_elem, {i, j}); + } + } + return llvm_result; + } + + [[nodiscard]] llvm::Value *_translate_matrix_linalg_multiply(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { + auto lhs = inst->operand(0u); + auto rhs = inst->operand(1u); + LUISA_ASSERT(lhs->type()->is_matrix(), "Matrix expected."); + auto llvm_func_name = [&] { + if (rhs->type()->is_vector()) { + LUISA_ASSERT(lhs->type()->dimension() == rhs->type()->dimension() && + lhs->type()->element() == rhs->type()->element(), + "Matrix and vector dimension mismatch."); + return luisa::format("luisa.matrix{}d.mul.vector", lhs->type()->dimension()); + } + LUISA_ASSERT(rhs->type()->is_matrix() && + lhs->type()->dimension() == rhs->type()->dimension() && + lhs->type()->element() == rhs->type()->element(), + "Matrix dimension mismatch."); + return luisa::format("luisa.matrix{}d.mul.matrix", lhs->type()->dimension()); + }(); + auto llvm_lhs = _lookup_value(current, b, lhs); + auto llvm_rhs = _lookup_value(current, b, rhs); + auto llvm_lhs_alloca = b.CreateAlloca(llvm_lhs->getType()); + auto llvm_rhs_alloca = b.CreateAlloca(llvm_rhs->getType()); + b.CreateStore(llvm_lhs, llvm_lhs_alloca); + b.CreateStore(llvm_rhs, llvm_rhs_alloca); + auto llvm_result_type = _translate_type(inst->type(), true); + auto llvm_result_alloca = b.CreateAlloca(llvm_result_type); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + b.CreateCall(llvm_func, {llvm_lhs_alloca, llvm_rhs_alloca, llvm_result_alloca}); + return b.CreateLoad(llvm_result_type, llvm_result_alloca); + } + [[nodiscard]] llvm::Value *_translate_outer_product(CurrentFunction ¤t, IRBuilder &b, + const xir::IntrinsicInst *inst) noexcept { + auto result_type = inst->type(); + LUISA_ASSERT(result_type != nullptr && result_type->is_matrix(), + "Invalid outer product operands."); + // outer_product(lhs, rhs) = lhs * transpose(rhs) + auto lhs = inst->operand(0u); + auto rhs = inst->operand(1u); + auto llvm_func_name = [&] { + auto lhs_type = lhs->type(); + auto rhs_type = rhs->type(); + LUISA_ASSERT(lhs_type != nullptr && rhs_type != nullptr, + "Invalid outer product operands."); + LUISA_ASSERT((lhs_type->is_matrix() && rhs_type->is_matrix()) || + (lhs_type->is_vector() && rhs_type->is_vector()), + "Invalid outer product operands: ({}, {}) -> {}.", + lhs_type->description(), rhs_type->description(), result_type->description()); + LUISA_ASSERT(lhs_type->dimension() == result_type->dimension() && + rhs_type->dimension() == result_type->dimension() && + lhs_type->element() == result_type->element() && + rhs_type->element() == result_type->element(), + "Dimension and/or element mismatch."); + return luisa::format(lhs_type->is_matrix() && rhs_type->is_matrix() ? + "luisa.matrix{}d.outer.product" : + "luisa.vector{}d.outer.product", + result_type->dimension()); + }(); + auto llvm_lhs = _lookup_value(current, b, lhs); + auto llvm_rhs = _lookup_value(current, b, rhs); + auto llvm_lhs_alloca = b.CreateAlloca(llvm_lhs->getType()); + auto llvm_rhs_alloca = b.CreateAlloca(llvm_rhs->getType()); + b.CreateStore(llvm_lhs, llvm_lhs_alloca); + b.CreateStore(llvm_rhs, llvm_rhs_alloca); + auto llvm_result_type = _translate_type(result_type, true); + auto llvm_result_alloca = b.CreateAlloca(llvm_result_type); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + b.CreateCall(llvm_func, {llvm_lhs_alloca, llvm_rhs_alloca, llvm_result_alloca}); + return b.CreateLoad(llvm_result_type, llvm_result_alloca); + } + + [[nodiscard]] llvm::Value *_translate_texture_read(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + auto view = inst->operand(0u); + LUISA_ASSERT(view->type()->is_texture(), "Invalid texture view type."); + auto coord = inst->operand(1u); + auto llvm_func_name = [t = view->type()] { + auto dim = t->dimension(); + switch (t->element()->tag()) { + case Type::Tag::INT32: return luisa::format("luisa.texture{}d.read.int", dim); + case Type::Tag::UINT32: return luisa::format("luisa.texture{}d.read.uint", dim); + case Type::Tag::FLOAT32: return luisa::format("luisa.texture{}d.read.float", dim); + default: break; + } + LUISA_ERROR_WITH_LOCATION("Unsupported texture element type: {}.", t->element()->description()); + }(); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + auto llvm_view = _lookup_value(current, b, view); + auto llvm_coord = _lookup_value(current, b, coord); + auto llvm_view_alloca = b.CreateAlloca(llvm_view->getType()); + auto llvm_coord_alloca = b.CreateAlloca(llvm_coord->getType()); + b.CreateStore(llvm_view, llvm_view_alloca); + b.CreateStore(llvm_coord, llvm_coord_alloca); auto llvm_value_type = _translate_type(inst->type(), true); - // Allocate space for the texture view struct - auto val_alloca = b.CreateAlloca(llvm_value_type, nullptr, ""); - - - // Define the function type: void(void*, uint, uint, void*) - auto func_type = llvm::FunctionType::get( - b.getVoidTy(), - {b.getPtrTy(), // void* texture_ptr - b.getInt32Ty(),// slot - b.getInt32Ty(),// elem - b.getInt32Ty(), //stride - b.getPtrTy()}, // void* value - false); - - // Add attributes to the function (write operations typically do not use `readonly`) - auto func = _llvm_module->getOrInsertFunction("bindless.buffer.read", func_type); - - // Call the function - b.CreateCall(func, {llvm_bindless, llvm_slot, llvm_elem, llvm_data_stride, val_alloca}); - // Return the loaded result - return b.CreateLoad(llvm_value_type, val_alloca, ""); - } - [[nodiscard]] llvm::Value *_translate_accel_trace( - CurrentFunction ¤t, - IRBuilder &b, - const xir::IntrinsicInst *inst) noexcept { - - // Extract LLVM values for the operands - const xir::Value *accel = inst->operand(0u); - const xir::Value *ray = inst->operand(1u); - const xir::Value *mask = inst->operand(2u); - - // Get LLVM values for the arguments - auto llvm_accel = _lookup_value(current, b, accel); - auto llvm_ray = _lookup_value(current, b, ray); - auto llvm_mask = _lookup_value(current, b, mask); - - // Allocate space for the SurfaceHit result locally - auto hit_type = llvm::StructType::create( - b.getContext(), - {b.getInt32Ty(), // uint inst - b.getInt32Ty(), // uint prim - llvm::VectorType::get(b.getFloatTy(), 2u, false),// float2 bary - b.getFloatTy()}, // float committed_ray_t - "SurfaceHit"); - - auto hit_alloca = b.CreateAlloca(hit_type, nullptr, ""); - - // Extract ray components - auto compressed_origin = b.CreateExtractValue(llvm_ray, 0, "compressed_origin"); - auto compressed_t_min = b.CreateExtractValue(llvm_ray, 1, "compressed_t_min"); - auto compressed_direction = b.CreateExtractValue(llvm_ray, 2, "compressed_direction"); - auto compressed_t_max = b.CreateExtractValue(llvm_ray, 3, "compressed_t_max"); - - //printTypeLayout(compressed_origin->getType()); - // Extract x, y, z for origin - auto origin_x = b.CreateExtractValue(compressed_origin, 0, "origin_x"); - auto origin_y = b.CreateExtractValue(compressed_origin, 1, "origin_y"); - auto origin_z = b.CreateExtractValue(compressed_origin, 2, "origin_z"); - - // Extract x, y, z for direction - auto direction_x = b.CreateExtractValue(compressed_direction, 0, "direction_x"); - auto direction_y = b.CreateExtractValue(compressed_direction, 1, "direction_y"); - auto direction_z = b.CreateExtractValue(compressed_direction, 2, "direction_z"); - - // Define the function type: void(void*, float, float, float, float, float, float, float, float, unsigned, void*) - auto func_type = llvm::FunctionType::get( - b.getVoidTy(), - { - b.getPtrTy(), // void* accel - b.getFloatTy(),// float ox - b.getFloatTy(),// float oy - b.getFloatTy(),// float oz - b.getFloatTy(),// float dx - b.getFloatTy(),// float dy - b.getFloatTy(),// float dz - b.getFloatTy(),// float tmin - b.getFloatTy(),// float tmax - b.getInt32Ty(),// unsigned mask - b.getPtrTy() // void* hit - }, - false); + auto llvm_value_alloca = b.CreateAlloca(llvm_value_type); + b.CreateCall(llvm_func, {llvm_view_alloca, llvm_coord_alloca, llvm_value_alloca}); + return b.CreateLoad(llvm_value_type, llvm_value_alloca); + } - // Get the function pointer from the symbol map - auto func = _llvm_module->getOrInsertFunction("intersect.closest", func_type); + [[nodiscard]] llvm::Value *_translate_texture_write(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + auto view = inst->operand(0u); + LUISA_ASSERT(view->type()->is_texture(), "Invalid texture view type."); + auto coord = inst->operand(1u); + auto value = inst->operand(2u); + auto llvm_func_name = [t = view->type()] { + auto dim = t->dimension(); + switch (t->element()->tag()) { + case Type::Tag::INT32: return luisa::format("luisa.texture{}d.write.int", dim); + case Type::Tag::UINT32: return luisa::format("luisa.texture{}d.write.uint", dim); + case Type::Tag::FLOAT32: return luisa::format("luisa.texture{}d.write.float", dim); + default: break; + } + LUISA_ERROR_WITH_LOCATION("Unsupported texture element type: {}.", t->element()->description()); + }(); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + auto llvm_view = _lookup_value(current, b, view); + auto llvm_coord = _lookup_value(current, b, coord); + auto llvm_value = _lookup_value(current, b, value); + auto llvm_view_alloca = b.CreateAlloca(llvm_view->getType()); + auto llvm_coord_alloca = b.CreateAlloca(llvm_coord->getType()); + auto llvm_value_alloca = b.CreateAlloca(llvm_value->getType()); + b.CreateStore(llvm_view, llvm_view_alloca); + b.CreateStore(llvm_coord, llvm_coord_alloca); + b.CreateStore(llvm_value, llvm_value_alloca); + return b.CreateCall(llvm_func, {llvm_view_alloca, llvm_coord_alloca, llvm_value_alloca}); + } + + [[nodiscard]] llvm::Value *_translate_texture_size(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + auto view = inst->operand(0u); + LUISA_ASSERT(view->type()->is_texture(), "Invalid texture view type."); + auto llvm_func_name = luisa::format("luisa.texture{}d.size", view->type()->dimension()); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + auto llvm_view = _lookup_value(current, b, view); + auto llvm_view_alloca = b.CreateAlloca(llvm_view->getType()); + b.CreateStore(llvm_view, llvm_view_alloca); + auto llvm_size_type = _translate_type(inst->type(), true); + auto llvm_size_alloca = b.CreateAlloca(llvm_size_type); + b.CreateCall(llvm_func, {llvm_view_alloca, llvm_size_alloca}); + return b.CreateLoad(llvm_size_type, llvm_size_alloca); + } + + [[nodiscard]] llvm::Value *_translate_matrix_inverse(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + auto m = inst->operand(0u); + LUISA_ASSERT(m->type()->is_matrix() && m->type() == inst->type(), "Invalid matrix type."); + auto llvm_m = _lookup_value(current, b, m); + auto llvm_func_name = luisa::format("luisa.matrix{}d.inverse", m->type()->dimension()); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + auto llvm_m_alloca = b.CreateAlloca(llvm_m->getType()); + b.CreateStore(llvm_m, llvm_m_alloca); + auto llvm_result_type = _translate_type(inst->type(), true); + auto llvm_result_alloca = b.CreateAlloca(llvm_result_type); + b.CreateCall(llvm_func, {llvm_m_alloca, llvm_result_alloca}); + return b.CreateLoad(llvm_result_type, llvm_result_alloca); + } + + [[nodiscard]] llvm::Value *_translate_matrix_determinant(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { + auto m = inst->operand(0u); + LUISA_ASSERT(m->type()->is_matrix() && m->type()->element() == inst->type(), "Invalid matrix type."); + auto llvm_m = _lookup_value(current, b, m); + auto llvm_func_name = luisa::format("luisa.matrix{}d.determinant", m->type()->dimension()); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + auto llvm_m_alloca = b.CreateAlloca(llvm_m->getType()); + b.CreateStore(llvm_m, llvm_m_alloca); + return b.CreateCall(llvm_func, {llvm_m_alloca}); + } + + [[nodiscard]] llvm::Value *_translate_bindless_texture_access(CurrentFunction ¤t, IRBuilder &b, + llvm::StringRef llvm_func_name, + const xir::IntrinsicInst *inst) noexcept { + auto llvm_bindless = _lookup_value(current, b, inst->operand(0u)); + auto llvm_bindless_alloca = b.CreateAlloca(llvm_bindless->getType()); + b.CreateStore(llvm_bindless, llvm_bindless_alloca); + auto llvm_slot_index = _lookup_value(current, b, inst->operand(1u)); + llvm_slot_index = b.CreateZExtOrTrunc(llvm_slot_index, b.getInt32Ty()); + llvm::SmallVector llvm_args{llvm_bindless_alloca, llvm_slot_index}; + for (auto arg_use : inst->operand_uses().subspan(2)) { + auto arg = arg_use->value(); + auto llvm_arg = _lookup_value(current, b, arg); + if (arg->type()->is_scalar()) { + llvm_args.emplace_back(llvm_arg); + } else { + auto llvm_arg_alloca = b.CreateAlloca(llvm_arg->getType()); + b.CreateStore(llvm_arg, llvm_arg_alloca); + llvm_args.emplace_back(llvm_arg_alloca); + } + } + auto llvm_result_type = _translate_type(inst->type(), true); + auto llvm_result_alloca = b.CreateAlloca(llvm_result_type); + llvm_args.emplace_back(llvm_result_alloca); + auto llvm_func = _llvm_module->getFunction(llvm_func_name); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + b.CreateCall(llvm_func, llvm_args); + return b.CreateLoad(llvm_result_type, llvm_result_alloca); + } + + [[nodiscard]] llvm::Value *_translate_accel_access(CurrentFunction ¤t, IRBuilder &b, + llvm::StringRef llvm_func_name, + const xir::IntrinsicInst *inst) noexcept { + auto llvm_accel = _lookup_value(current, b, inst->operand(0u)); + auto llvm_accel_alloca = b.CreateAlloca(llvm_accel->getType()); + b.CreateStore(llvm_accel, llvm_accel_alloca); + llvm::SmallVector llvm_args{llvm_accel_alloca}; + for (auto arg_use : inst->operand_uses().subspan(1)) { + auto arg = arg_use->value(); + auto llvm_arg = _lookup_value(current, b, arg); + if (llvm_arg->getType()->isIntegerTy() && !arg->type()->is_bool()) { + // cast non-bool integer to i32 + llvm_arg = b.CreateZExtOrTrunc(llvm_arg, b.getInt32Ty()); + } + if (arg->type()->is_scalar()) { + llvm_args.emplace_back(llvm_arg); + } else { + auto llvm_arg_alloca = b.CreateAlloca(llvm_arg->getType()); + b.CreateStore(llvm_arg, llvm_arg_alloca); + llvm_args.emplace_back(llvm_arg_alloca); + } + } + auto llvm_func = _llvm_module->getFunction(llvm_func_name); + LUISA_ASSERT(llvm_func != nullptr, "Function not found."); + if (auto result_type = inst->type()) { + auto llvm_result_type = _translate_type(inst->type(), true); + auto llvm_result_alloca = b.CreateAlloca(llvm_result_type); + llvm_args.emplace_back(llvm_result_alloca); + b.CreateCall(llvm_func, llvm_args); + return b.CreateLoad(llvm_result_type, llvm_result_alloca); + } + // void return + return b.CreateCall(llvm_func, llvm_args); + } - // Call the function - b.CreateCall( - func, - { - llvm_accel, // accel pointer - origin_x, // ray.origin.x - origin_y, // ray.origin.y - origin_z, // ray.origin.z - direction_x, // ray.direction.x - direction_y, // ray.direction.y - direction_z, // ray.direction.z - compressed_t_min,// ray.t_min - compressed_t_max,// ray.t_max - llvm_mask, // mask - hit_alloca // hit pointer - }); - - // Load the SurfaceHit result and return - return b.CreateLoad(hit_type, hit_alloca, "hit_result"); + [[nodiscard]] llvm::Value *_translate_atomic_op(CurrentFunction ¤t, IRBuilder &b, + const char *op_name, size_t value_count, + const xir::IntrinsicInst *inst, + bool byte_address = false) noexcept { + LUISA_ASSERT(2 + value_count <= inst->operand_count(), "Invalid atomic operation."); + auto buffer = inst->operand(0u); + LUISA_ASSERT(buffer->type()->is_buffer(), "Invalid buffer type."); + auto buffer_elem_type = buffer->type()->element(); + LUISA_ASSERT(buffer_elem_type != nullptr, "Invalid buffer element type."); + auto slot = inst->operand(1u); + auto llvm_elem_ptr = _get_buffer_element_ptr(current, b, buffer, slot, byte_address); + if (byte_address) { + LUISA_ASSERT(2 + value_count == inst->operand_count(), "Invalid atomic operation."); + } + auto indices = inst->operand_uses().subspan(2, inst->operand_count() - 2 - value_count); + if (!indices.empty()) { + llvm_elem_ptr = _translate_gep(current, b, inst->type(), + buffer_elem_type, llvm_elem_ptr, indices); + } + auto llvm_func_name = [&] { + switch (inst->type()->tag()) { + case Type::Tag::INT32: return luisa::format("luisa.atomic.{}.int", op_name); + case Type::Tag::UINT32: return luisa::format("luisa.atomic.{}.uint", op_name); + case Type::Tag::INT64: return luisa::format("luisa.atomic.{}.long", op_name); + case Type::Tag::UINT64: return luisa::format("luisa.atomic.{}.ulong", op_name); + case Type::Tag::FLOAT32: return luisa::format("luisa.atomic.{}.float", op_name); + default: break; + } + LUISA_ERROR_WITH_LOCATION("Unsupported atomic operation value type: {}.", inst->type()->description()); + }(); + auto llvm_func = _llvm_module->getFunction(llvm::StringRef{llvm_func_name}); + LUISA_ASSERT(llvm_func != nullptr && llvm_func->arg_size() == 1 + value_count, "Invalid atomic operation function."); + llvm::SmallVector llvm_args{llvm_elem_ptr}; + for (auto value_uses : inst->operand_uses().subspan(inst->operand_count() - value_count)) { + auto value = value_uses->value(); + LUISA_ASSERT(value->type() == inst->type(), "Atomic operation value type mismatch."); + auto llvm_value = _lookup_value(current, b, value); + llvm_args.emplace_back(llvm_value); + } + return b.CreateCall(llvm_func, llvm_args); } [[nodiscard]] llvm::Value *_translate_intrinsic_inst(CurrentFunction ¤t, IRBuilder &b, const xir::IntrinsicInst *inst) noexcept { @@ -1831,23 +2156,77 @@ class FallbackCodegen { } case xir::IntrinsicOp::ISINF: return _translate_isinf_isnan(current, b, inst->op(), inst->operand(0u)); case xir::IntrinsicOp::ISNAN: return _translate_isinf_isnan(current, b, inst->op(), inst->operand(0u)); - case xir::IntrinsicOp::ACOS: break; - case xir::IntrinsicOp::ACOSH: break; - case xir::IntrinsicOp::ASIN: break; - case xir::IntrinsicOp::ASINH: break; - case xir::IntrinsicOp::ATAN: break; - case xir::IntrinsicOp::ATAN2: break; - case xir::IntrinsicOp::ATANH: break; + case xir::IntrinsicOp::ACOS: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), "acos"); + case xir::IntrinsicOp::ACOSH: { + // acosh(x) = log(x + sqrt(x^2 - 1)) + auto llvm_x = _lookup_value(current, b, inst->operand(0u)); + auto llvm_x2 = b.CreateFMul(llvm_x, llvm_x); + auto llvm_one = llvm::ConstantFP::get(llvm_x->getType(), 1.f); + auto llvm_x2_minus_one = b.CreateFSub(llvm_x2, llvm_one); + auto llvm_sqrt = b.CreateUnaryIntrinsic(llvm::Intrinsic::sqrt, llvm_x2_minus_one); + auto llvm_x_plus_sqrt = b.CreateFAdd(llvm_x, llvm_sqrt); + return b.CreateUnaryIntrinsic(llvm::Intrinsic::log, llvm_x_plus_sqrt); + } + case xir::IntrinsicOp::ASIN: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), "asin"); + case xir::IntrinsicOp::ASINH: { + // asinh(x) = log(x + sqrt(x^2 + 1)) + auto llvm_x = _lookup_value(current, b, inst->operand(0u)); + auto llvm_x2 = b.CreateFMul(llvm_x, llvm_x); + auto llvm_one = llvm::ConstantFP::get(llvm_x->getType(), 1.f); + auto llvm_x2_plus_one = b.CreateFAdd(llvm_x2, llvm_one); + auto llvm_sqrt = b.CreateUnaryIntrinsic(llvm::Intrinsic::sqrt, llvm_x2_plus_one); + auto llvm_x_plus_sqrt = b.CreateFAdd(llvm_x, llvm_sqrt); + return b.CreateUnaryIntrinsic(llvm::Intrinsic::log, llvm_x_plus_sqrt); + } + case xir::IntrinsicOp::ATAN: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), "atan"); + case xir::IntrinsicOp::ATAN2: return _translate_binary_fp_math_operation(current, b, inst->operand(0), inst->operand(1), "atan2"); + case xir::IntrinsicOp::ATANH: { + // atanh(x) = 0.5 * log((1 + x) / (1 - x)) + auto llvm_x = _lookup_value(current, b, inst->operand(0u)); + auto llvm_one = llvm::ConstantFP::get(llvm_x->getType(), 1.f); + auto llvm_one_plus_x = b.CreateFAdd(llvm_one, llvm_x); + auto llvm_one_minus_x = b.CreateFSub(llvm_one, llvm_x); + auto llvm_div = b.CreateFDiv(llvm_one_plus_x, llvm_one_minus_x); + auto llvm_log = b.CreateUnaryIntrinsic(llvm::Intrinsic::log, llvm_div); + auto llvm_half = llvm::ConstantFP::get(llvm_x->getType(), .5f); + return b.CreateFMul(llvm_half, llvm_log); + } case xir::IntrinsicOp::COS: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::cos); - case xir::IntrinsicOp::COSH: break; + case xir::IntrinsicOp::COSH: { + // cosh(x) = 0.5 * (exp(x) + exp(-x)) + auto llvm_x = _lookup_value(current, b, inst->operand(0u)); + auto llvm_exp_x = b.CreateUnaryIntrinsic(llvm::Intrinsic::exp, llvm_x); + auto llvm_neg_x = b.CreateFNeg(llvm_x); + auto llvm_exp_neg_x = b.CreateUnaryIntrinsic(llvm::Intrinsic::exp, llvm_neg_x); + auto llvm_exp_sum = b.CreateFAdd(llvm_exp_x, llvm_exp_neg_x); + auto llvm_half = llvm::ConstantFP::get(llvm_x->getType(), .5f); + return b.CreateFMul(llvm_half, llvm_exp_sum); + } case xir::IntrinsicOp::SIN: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::sin); - case xir::IntrinsicOp::SINH: break; + case xir::IntrinsicOp::SINH: { + // sinh(x) = 0.5 * (exp(x) - exp(-x)) + auto llvm_x = _lookup_value(current, b, inst->operand(0u)); + auto llvm_exp_x = b.CreateUnaryIntrinsic(llvm::Intrinsic::exp, llvm_x); + auto llvm_neg_x = b.CreateFNeg(llvm_x); + auto llvm_exp_neg_x = b.CreateUnaryIntrinsic(llvm::Intrinsic::exp, llvm_neg_x); + auto llvm_exp_diff = b.CreateFSub(llvm_exp_x, llvm_exp_neg_x); + auto llvm_half = llvm::ConstantFP::get(llvm_x->getType(), .5f); + return b.CreateFMul(llvm_half, llvm_exp_diff); + } case xir::IntrinsicOp::TAN: { auto llvm_sin = _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::sin); auto llvm_cos = _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::cos); return b.CreateFDiv(llvm_sin, llvm_cos); } - case xir::IntrinsicOp::TANH: break; + case xir::IntrinsicOp::TANH: { + // tanh(x) = sinh(x) / cosh(x) = (exp(2x) - 1) / (exp(2x) + 1) + auto llvm_x = _lookup_value(current, b, inst->operand(0u)); + auto llvm_two_x = b.CreateFMul(llvm_x, llvm::ConstantFP::get(llvm_x->getType(), 2.f)); + auto llvm_exp_2x = b.CreateUnaryIntrinsic(llvm::Intrinsic::exp, llvm_two_x); + auto llvm_exp_2x_minus_one = b.CreateFSub(llvm_exp_2x, llvm::ConstantFP::get(llvm_x->getType(), 1.f)); + auto llvm_exp_2x_plus_one = b.CreateFAdd(llvm_exp_2x, llvm::ConstantFP::get(llvm_x->getType(), 1.f)); + return b.CreateFDiv(llvm_exp_2x_minus_one, llvm_exp_2x_plus_one); + } case xir::IntrinsicOp::EXP: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::exp); case xir::IntrinsicOp::EXP2: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::exp2); case xir::IntrinsicOp::EXP10: return _translate_unary_fp_math_operation(current, b, inst->operand(0u), llvm::Intrinsic::exp10); @@ -1993,25 +2372,40 @@ class FallbackCodegen { case xir::IntrinsicOp::REDUCE_PRODUCT: return _translate_vector_reduce(current, b, xir::IntrinsicOp::REDUCE_PRODUCT, inst->operand(0u)); case xir::IntrinsicOp::REDUCE_MIN: return _translate_vector_reduce(current, b, xir::IntrinsicOp::REDUCE_MIN, inst->operand(0u)); case xir::IntrinsicOp::REDUCE_MAX: return _translate_vector_reduce(current, b, xir::IntrinsicOp::REDUCE_MAX, inst->operand(0u)); - case xir::IntrinsicOp::OUTER_PRODUCT: break; - case xir::IntrinsicOp::MATRIX_COMP_NEG: break; - case xir::IntrinsicOp::MATRIX_COMP_ADD: break; - case xir::IntrinsicOp::MATRIX_COMP_SUB: break; - case xir::IntrinsicOp::MATRIX_COMP_MUL: break; - case xir::IntrinsicOp::MATRIX_COMP_DIV: break; - case xir::IntrinsicOp::MATRIX_LINALG_MUL: break; - case xir::IntrinsicOp::MATRIX_DETERMINANT: break; - case xir::IntrinsicOp::MATRIX_TRANSPOSE: break; - case xir::IntrinsicOp::MATRIX_INVERSE: break; - case xir::IntrinsicOp::ATOMIC_EXCHANGE: break; - case xir::IntrinsicOp::ATOMIC_COMPARE_EXCHANGE: break; - case xir::IntrinsicOp::ATOMIC_FETCH_ADD: break; - case xir::IntrinsicOp::ATOMIC_FETCH_SUB: break; - case xir::IntrinsicOp::ATOMIC_FETCH_AND: break; - case xir::IntrinsicOp::ATOMIC_FETCH_OR: break; - case xir::IntrinsicOp::ATOMIC_FETCH_XOR: break; - case xir::IntrinsicOp::ATOMIC_FETCH_MIN: break; - case xir::IntrinsicOp::ATOMIC_FETCH_MAX: break; + case xir::IntrinsicOp::OUTER_PRODUCT: return _translate_outer_product(current, b, inst); + case xir::IntrinsicOp::MATRIX_COMP_NEG: { + auto m = inst->operand(0u); + LUISA_ASSERT(m->type() != nullptr && m->type()->is_matrix(), + "Invalid operand type for matrix component-wise negation."); + auto dim = m->type()->dimension(); + auto llvm_m = _lookup_value(current, b, m); + auto llvm_result = llvm::cast(llvm::PoisonValue::get(llvm_m->getType())); + for (auto i = 0u; i < dim; i++) { + for (auto j = 0u; j < dim; j++) { + auto llvm_elem = b.CreateExtractValue(llvm_m, {i, j}); + llvm_elem = b.CreateFNeg(llvm_elem); + llvm_result = b.CreateInsertValue(llvm_result, llvm_elem, {i, j}); + } + } + return llvm_result; + } + case xir::IntrinsicOp::MATRIX_COMP_ADD: return _translate_matrix_comp_op(current, b, inst->operand(0), inst->operand(1), llvm::Instruction::FAdd); + case xir::IntrinsicOp::MATRIX_COMP_SUB: return _translate_matrix_comp_op(current, b, inst->operand(0), inst->operand(1), llvm::Instruction::FSub); + case xir::IntrinsicOp::MATRIX_COMP_MUL: return _translate_matrix_comp_op(current, b, inst->operand(0), inst->operand(1), llvm::Instruction::FMul); + case xir::IntrinsicOp::MATRIX_COMP_DIV: return _translate_matrix_comp_op(current, b, inst->operand(0), inst->operand(1), llvm::Instruction::FDiv); + case xir::IntrinsicOp::MATRIX_LINALG_MUL: return _translate_matrix_linalg_multiply(current, b, inst); + case xir::IntrinsicOp::MATRIX_DETERMINANT: return _translate_matrix_determinant(current, b, inst); + case xir::IntrinsicOp::MATRIX_TRANSPOSE: return _translate_matrix_transpose(current, b, inst); + case xir::IntrinsicOp::MATRIX_INVERSE: return _translate_matrix_inverse(current, b, inst); + case xir::IntrinsicOp::ATOMIC_EXCHANGE: return _translate_atomic_op(current, b, "exchange", 1, inst); + case xir::IntrinsicOp::ATOMIC_COMPARE_EXCHANGE: return _translate_atomic_op(current, b, "compare.exchange", 2, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_ADD: return _translate_atomic_op(current, b, "fetch.add", 1, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_SUB: return _translate_atomic_op(current, b, "fetch.sub", 1, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_AND: return _translate_atomic_op(current, b, "fetch.and", 1, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_OR: return _translate_atomic_op(current, b, "fetch.or", 1, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_XOR: return _translate_atomic_op(current, b, "fetch.xor", 1, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_MIN: return _translate_atomic_op(current, b, "fetch.min", 1, inst); + case xir::IntrinsicOp::ATOMIC_FETCH_MAX: return _translate_atomic_op(current, b, "fetch.max", 1, inst); case xir::IntrinsicOp::BUFFER_READ: return _translate_buffer_read(current, b, inst); case xir::IntrinsicOp::BUFFER_WRITE: return _translate_buffer_write(current, b, inst); case xir::IntrinsicOp::BUFFER_SIZE: return _translate_buffer_size(current, b, inst); @@ -2019,27 +2413,27 @@ class FallbackCodegen { case xir::IntrinsicOp::BYTE_BUFFER_WRITE: return _translate_buffer_write(current, b, inst, true); case xir::IntrinsicOp::BYTE_BUFFER_SIZE: return _translate_buffer_size(current, b, inst, true); case xir::IntrinsicOp::TEXTURE2D_READ: return _translate_texture_read(current, b, inst); - case xir::IntrinsicOp::TEXTURE2D_WRITE: return _translate_texture_write(current, b, inst->operand(0u), inst->operand(1u), inst->operand(2u)); - case xir::IntrinsicOp::TEXTURE2D_SIZE: break; + case xir::IntrinsicOp::TEXTURE2D_WRITE: return _translate_texture_write(current, b, inst); + case xir::IntrinsicOp::TEXTURE2D_SIZE: return _translate_texture_size(current, b, inst); case xir::IntrinsicOp::TEXTURE2D_SAMPLE: break; case xir::IntrinsicOp::TEXTURE2D_SAMPLE_LEVEL: break; case xir::IntrinsicOp::TEXTURE2D_SAMPLE_GRAD: break; case xir::IntrinsicOp::TEXTURE2D_SAMPLE_GRAD_LEVEL: break; - case xir::IntrinsicOp::TEXTURE3D_READ: break; - case xir::IntrinsicOp::TEXTURE3D_WRITE: break; - case xir::IntrinsicOp::TEXTURE3D_SIZE: break; + case xir::IntrinsicOp::TEXTURE3D_READ: return _translate_texture_read(current, b, inst); + case xir::IntrinsicOp::TEXTURE3D_WRITE: return _translate_texture_write(current, b, inst); + case xir::IntrinsicOp::TEXTURE3D_SIZE: return _translate_texture_size(current, b, inst); case xir::IntrinsicOp::TEXTURE3D_SAMPLE: break; case xir::IntrinsicOp::TEXTURE3D_SAMPLE_LEVEL: break; case xir::IntrinsicOp::TEXTURE3D_SAMPLE_GRAD: break; case xir::IntrinsicOp::TEXTURE3D_SAMPLE_GRAD_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD_LEVEL: break; + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.sample", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.sample.level", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.sample.grad", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.sample.grad.level", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.sample", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.sample.level", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.sample.grad", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.sample.grad.level", inst); case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_SAMPLER: break; case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_LEVEL_SAMPLER: break; case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD_SAMPLER: break; @@ -2048,23 +2442,22 @@ class FallbackCodegen { case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_LEVEL_SAMPLER: break; case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD_SAMPLER: break; case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD_LEVEL_SAMPLER: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_READ: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_READ: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_READ_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_READ_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SIZE: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SIZE: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SIZE_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SIZE_LEVEL: break; - case xir::IntrinsicOp::BINDLESS_BUFFER_READ: return _translate_bindless_read(current, b, inst); - case xir::IntrinsicOp::BINDLESS_BUFFER_WRITE: break; - case xir::IntrinsicOp::BINDLESS_BUFFER_SIZE: break; - case xir::IntrinsicOp::BINDLESS_BUFFER_TYPE: break; - case xir::IntrinsicOp::BINDLESS_BYTE_BUFFER_READ: break; - case xir::IntrinsicOp::BINDLESS_BYTE_BUFFER_WRITE: break; - case xir::IntrinsicOp::BINDLESS_BYTE_BUFFER_SIZE: break; + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_READ: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.read", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_READ: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.read", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_READ_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.read.level", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_READ_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.read.level", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SIZE: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.size", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SIZE: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.size", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE2D_SIZE_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture2d.size.level", inst); + case xir::IntrinsicOp::BINDLESS_TEXTURE3D_SIZE_LEVEL: return _translate_bindless_texture_access(current, b, "luisa.bindless.texture3d.size.level", inst); + case xir::IntrinsicOp::BINDLESS_BUFFER_READ: return _translate_bindless_buffer_read(current, b, inst); + case xir::IntrinsicOp::BINDLESS_BUFFER_WRITE: return _translate_bindless_buffer_write(current, b, inst); + case xir::IntrinsicOp::BINDLESS_BUFFER_SIZE: return _translate_bindless_buffer_size(current, b, inst); + case xir::IntrinsicOp::BINDLESS_BYTE_BUFFER_READ: return _translate_bindless_buffer_read(current, b, inst, true); + case xir::IntrinsicOp::BINDLESS_BYTE_BUFFER_WRITE: return _translate_bindless_buffer_write(current, b, inst, true); + case xir::IntrinsicOp::BINDLESS_BYTE_BUFFER_SIZE: return _translate_bindless_buffer_size(current, b, inst, true); case xir::IntrinsicOp::BUFFER_DEVICE_ADDRESS: return _translate_buffer_device_address(current, b, inst); - case xir::IntrinsicOp::BINDLESS_BUFFER_DEVICE_ADDRESS: break; + case xir::IntrinsicOp::BINDLESS_BUFFER_DEVICE_ADDRESS: return _translate_bindless_buffer_device_address(current, b, inst); case xir::IntrinsicOp::DEVICE_ADDRESS_READ: return _translate_device_address_read(current, b, inst); case xir::IntrinsicOp::DEVICE_ADDRESS_WRITE: return _translate_device_address_write(current, b, inst); case xir::IntrinsicOp::AGGREGATE: return _translate_aggregate(current, b, inst); @@ -2077,23 +2470,23 @@ class FallbackCodegen { case xir::IntrinsicOp::AUTODIFF_ACCUMULATE_GRADIENT: break; case xir::IntrinsicOp::AUTODIFF_BACKWARD: break; case xir::IntrinsicOp::AUTODIFF_DETACH: break; - case xir::IntrinsicOp::RAY_TRACING_INSTANCE_TRANSFORM: break; - case xir::IntrinsicOp::RAY_TRACING_INSTANCE_USER_ID: break; - case xir::IntrinsicOp::RAY_TRACING_INSTANCE_VISIBILITY_MASK: break; - case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_TRANSFORM: break; - case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY: break; - case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_OPACITY: break; - case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_USER_ID: break; - case xir::IntrinsicOp::RAY_TRACING_TRACE_CLOSEST: return _translate_accel_trace(current, b, inst); - case xir::IntrinsicOp::RAY_TRACING_TRACE_ANY: break; + case xir::IntrinsicOp::RAY_TRACING_INSTANCE_TRANSFORM: return _translate_accel_access(current, b, "luisa.accel.instance.transform", inst); + case xir::IntrinsicOp::RAY_TRACING_INSTANCE_USER_ID: return _translate_accel_access(current, b, "luisa.accel.instance.user.id", inst); + case xir::IntrinsicOp::RAY_TRACING_INSTANCE_VISIBILITY_MASK: return _translate_accel_access(current, b, "luisa.accel.instance.visibility.mask", inst); + case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_TRANSFORM: return _translate_accel_access(current, b, "luisa.accel.set.instance.transform", inst); + case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY_MASK: return _translate_accel_access(current, b, "luisa.accel.set.instance.visibility.mask", inst); + case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_OPACITY: return _translate_accel_access(current, b, "luisa.accel.set.instance.opacity", inst); + case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_USER_ID: return _translate_accel_access(current, b, "luisa.accel.set.instance.user.id", inst); + case xir::IntrinsicOp::RAY_TRACING_TRACE_CLOSEST: return _translate_accel_access(current, b, "luisa.accel.trace.closest", inst); + case xir::IntrinsicOp::RAY_TRACING_TRACE_ANY: return _translate_accel_access(current, b, "luisa.accel.trace.any", inst); case xir::IntrinsicOp::RAY_TRACING_QUERY_ALL: break; case xir::IntrinsicOp::RAY_TRACING_QUERY_ANY: break; - case xir::IntrinsicOp::RAY_TRACING_INSTANCE_MOTION_MATRIX: break; - case xir::IntrinsicOp::RAY_TRACING_INSTANCE_MOTION_SRT: break; - case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_MOTION_MATRIX: break; - case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_MOTION_SRT: break; - case xir::IntrinsicOp::RAY_TRACING_TRACE_CLOSEST_MOTION_BLUR: break; - case xir::IntrinsicOp::RAY_TRACING_TRACE_ANY_MOTION_BLUR: break; + case xir::IntrinsicOp::RAY_TRACING_INSTANCE_MOTION_MATRIX: return _translate_accel_access(current, b, "luisa.accel.instance.motion.matrix", inst); + case xir::IntrinsicOp::RAY_TRACING_INSTANCE_MOTION_SRT: return _translate_accel_access(current, b, "luisa.accel.instance.motion.srt", inst); + case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_MOTION_MATRIX: return _translate_accel_access(current, b, "luisa.accel.set.instance.motion.matrix", inst); + case xir::IntrinsicOp::RAY_TRACING_SET_INSTANCE_MOTION_SRT: return _translate_accel_access(current, b, "luisa.accel.set.instance.motion.srt", inst); + case xir::IntrinsicOp::RAY_TRACING_TRACE_CLOSEST_MOTION_BLUR: return _translate_accel_access(current, b, "luisa.accel.trace.closest.motion", inst); + case xir::IntrinsicOp::RAY_TRACING_TRACE_ANY_MOTION_BLUR: return _translate_accel_access(current, b, "luisa.accel.trace.any.motion", inst); case xir::IntrinsicOp::RAY_TRACING_QUERY_ALL_MOTION_BLUR: break; case xir::IntrinsicOp::RAY_TRACING_QUERY_ANY_MOTION_BLUR: break; case xir::IntrinsicOp::RAY_QUERY_WORLD_SPACE_RAY: break; @@ -2131,8 +2524,13 @@ class FallbackCodegen { case xir::IntrinsicOp::INDIRECT_DISPATCH_SET_KERNEL: break; case xir::IntrinsicOp::INDIRECT_DISPATCH_SET_COUNT: break; case xir::IntrinsicOp::SHADER_EXECUTION_REORDER: return nullptr;// no-op on the LLVM side + case xir::IntrinsicOp::CLOCK: { + auto call = b.CreateIntrinsic(llvm::Intrinsic::readcyclecounter, {}, {}); + auto llvm_result_type = _translate_type(inst->type(), true); + return b.CreateZExtOrTrunc(call, llvm_result_type); + } } - LUISA_INFO("unsupported intrinsic op type:{}", static_cast(inst->op())); + LUISA_INFO("unsupported intrinsic op type: {}", static_cast(inst->op())); LUISA_NOT_IMPLEMENTED(); // TODO: implement if (auto llvm_ret_type = _translate_type(inst->type(), true)) { @@ -2209,6 +2607,78 @@ class FallbackCodegen { LUISA_ERROR_WITH_LOCATION("Invalid cast operation."); } + [[nodiscard]] llvm::Value *_translate_print_inst(CurrentFunction ¤t, IRBuilder &b, + const xir::PrintInst *inst) noexcept { + // create argument struct + llvm::SmallVector llvm_field_types; + llvm::SmallVector llvm_field_offsets; + size_t accum_size = 0u; + auto llvm_i8_type = b.getInt8Ty(); + for (auto o : inst->operand_uses()) { + auto t = o->value()->type(); + auto alignment = _get_type_alignment(t); + auto align_size = luisa::align(accum_size, alignment); + if (align_size > accum_size) { + auto llvm_pad_type = llvm::ArrayType::get(llvm_i8_type, align_size - accum_size); + llvm_field_types.emplace_back(llvm_pad_type); + } + llvm_field_offsets.emplace_back(llvm_field_types.size()); + auto llvm_t = _translate_type(t, true); + llvm_field_types.emplace_back(llvm_t); + accum_size = align_size + _get_type_size(t); + } + auto total_size = luisa::align(accum_size, 16u); + if (total_size > accum_size) { + auto llvm_pad_type = llvm::ArrayType::get(llvm_i8_type, total_size - accum_size); + llvm_field_types.emplace_back(llvm_pad_type); + } + auto llvm_struct_type = llvm::StructType::get(_llvm_context, llvm_field_types); + // fill argument struct + auto llvm_struct_alloca = b.CreateAlloca(llvm_struct_type); + auto llvm_total_size = b.getInt64(total_size); + b.CreateLifetimeStart(llvm_struct_alloca, llvm_total_size); + llvm_struct_alloca->setAlignment(llvm::Align{16}); + for (auto i = 0u; i < inst->operand_count(); i++) { + auto llvm_field_offset = llvm_field_offsets[i]; + auto llvm_field_ptr = b.CreateStructGEP(llvm_struct_type, llvm_struct_alloca, llvm_field_offset); + auto field = inst->operand(i); + auto llvm_field = _lookup_value(current, b, field); + auto alignment = _get_type_alignment(field->type()); + b.CreateAlignedStore(llvm_field, llvm_field_ptr, llvm::MaybeAlign{alignment}); + } + // declare print function + auto llvm_i64_type = b.getInt64Ty(); + auto llvm_ptr_type = llvm::PointerType::get(_llvm_context, 0); + // void print(const void *ctx, size_t fmt_id, const void *args); + auto llvm_print_func_type = llvm::FunctionType::get(b.getVoidTy(), {llvm_ptr_type, llvm_i64_type, llvm_ptr_type}, false); + auto llvm_print_func = llvm::Function::Create(llvm_print_func_type, llvm::Function::ExternalLinkage, "luisa.print", _llvm_module); + auto llvm_print_context = _llvm_module->getOrInsertGlobal("luisa.print.context", llvm::StructType::get(_llvm_context)); + auto fmt_id = static_cast(_print_inst_map.size()); + _print_inst_map.emplace_back(inst, llvm_print_func->getName()); + llvm_print_func->setCallingConv(llvm::CallingConv::C); + llvm_print_func->setNoSync(); + llvm_print_func->setMustProgress(); + llvm_print_func->setWillReturn(); + llvm_print_func->setDoesNotThrow(); + llvm_print_func->setOnlyAccessesInaccessibleMemOrArgMem(); + llvm_print_func->setDoesNotFreeMemory(); + llvm_print_func->setUWTableKind(llvm::UWTableKind::None); + for (auto &&llvm_print_arg : llvm_print_func->args()) { + if (llvm_print_arg.getType()->isPointerTy()) { + llvm_print_arg.addAttr(llvm::Attribute::NoCapture); + llvm_print_arg.addAttr(llvm::Attribute::NoAlias); + llvm_print_arg.addAttr(llvm::Attribute::ReadOnly); + llvm_print_arg.addAttr(llvm::Attribute::NoUndef); + llvm_print_arg.addAttr(llvm::Attribute::NonNull); + } + } + // call print function + auto llvm_fmt_id = b.getInt64(fmt_id); + auto llvm_call = b.CreateCall(llvm_print_func, {llvm_print_context, llvm_fmt_id, llvm_struct_alloca}); + b.CreateLifetimeEnd(llvm_struct_alloca, llvm_total_size); + return llvm_call; + } + [[nodiscard]] llvm::Value *_translate_instruction(CurrentFunction ¤t, IRBuilder &b, const xir::Instruction *inst) noexcept { switch (inst->derived_instruction_tag()) { case xir::DerivedInstructionTag::SENTINEL: { @@ -2336,7 +2806,7 @@ class FallbackCodegen { case xir::DerivedInstructionTag::CALL: { auto call_inst = static_cast(inst); auto llvm_func = llvm::cast(_lookup_value(current, b, call_inst->callee())); - llvm::SmallVector llvm_args; + llvm::SmallVector llvm_args; llvm_args.reserve(call_inst->argument_count()); for (auto i = 0u; i < call_inst->argument_count(); i++) { auto llvm_arg = _lookup_value(current, b, call_inst->argument(i)); @@ -2346,7 +2816,9 @@ class FallbackCodegen { for (auto &builtin_variable : current.builtin_variables) { llvm_args.emplace_back(builtin_variable); } - return b.CreateCall(llvm_func, llvm_args); + auto llvm_call = b.CreateCall(llvm_func, llvm_args); + llvm_call->setCallingConv(llvm::CallingConv::Fast); + return llvm_call; } case xir::DerivedInstructionTag::INTRINSIC: { auto intrinsic_inst = static_cast(inst); @@ -2357,8 +2829,8 @@ class FallbackCodegen { return _translate_cast_inst(current, b, cast_inst->type(), cast_inst->op(), cast_inst->value()); } case xir::DerivedInstructionTag::PRINT: { - LUISA_WARNING_WITH_LOCATION("Ignoring print instruction.");// TODO... - return nullptr; + auto print_inst = static_cast(inst); + return _translate_print_inst(current, b, print_inst); } case xir::DerivedInstructionTag::ASSERT: { auto assert_inst = static_cast(inst); @@ -2477,7 +2949,7 @@ class FallbackCodegen { // create the params struct type auto llvm_i8_type = llvm::Type::getInt8Ty(_llvm_context); llvm::SmallVector padded_param_indices; - llvm::SmallVector llvm_param_types; + llvm::SmallVector llvm_param_types; constexpr auto param_alignment = 16u; auto param_size_accum = static_cast(0); for (auto i = 0u; i < arg_count; i++) { @@ -2601,7 +3073,8 @@ class FallbackCodegen { default: LUISA_ERROR_WITH_LOCATION("Invalid builtin variable index."); } } - b.CreateCall(llvm_kernel, call_args); + auto llvm_call = b.CreateCall(llvm_kernel, call_args); + llvm_call->setCallingConv(llvm::CallingConv::Fast); b.CreateBr(llvm_loop_update_block); // loop update b.SetInsertPoint(llvm_loop_update_block); @@ -2621,7 +3094,7 @@ class FallbackCodegen { llvm::Function::LinkageTypes linkage, llvm::StringRef default_name) noexcept { auto llvm_ret_type = _translate_type(f->type(), true); - llvm::SmallVector llvm_arg_types; + llvm::SmallVector llvm_arg_types; for (auto arg : f->arguments()) { if (arg->is_reference()) { // reference arguments are passed by pointer @@ -2643,6 +3116,16 @@ class FallbackCodegen { auto func_name = _get_name_from_metadata(f, default_name); auto llvm_func = llvm::Function::Create(llvm_func_type, linkage, llvm::Twine{func_name}, _llvm_module); _llvm_functions.emplace(f, llvm_func); + + // use fastcc + llvm_func->setCallingConv(llvm::CallingConv::Fast); + + // inline functions that have too many arguments + // static constexpr auto max_argument_count = 16u; + // if (f->derived_function_tag() != xir::DerivedFunctionTag::KERNEL && + // llvm_func->arg_size() > max_argument_count) { + // llvm_func->addFnAttr(llvm::Attribute::AlwaysInline); + // } // create current translation context CurrentFunction current{.func = llvm_func}; // map arguments @@ -2697,22 +3180,24 @@ class FallbackCodegen { explicit FallbackCodegen(llvm::LLVMContext &ctx) noexcept : _llvm_context{ctx} {} - [[nodiscard]] auto emit(const xir::Module *module) noexcept { - auto llvm_module = std::make_unique(llvm::StringRef{_get_name_from_metadata(module)}, _llvm_context); + FallbackCodeGenFeedback emit(llvm::Module *llvm_module, const xir::Module *module) noexcept { auto location_md = module->find_metadata(); auto module_location = location_md ? location_md->file().string() : "unknown"; llvm_module->setSourceFileName(location_md ? location_md->file().string() : "unknown"); - _llvm_module = llvm_module.get(); + if (auto module_name = _get_name_from_metadata(module); !module_name.empty()) { + llvm_module->setModuleIdentifier(module_name); + } + _llvm_module = llvm_module; _translate_module(module); _reset(); - return llvm_module; + return {.print_inst_map = std::exchange(_print_inst_map, {})}; } }; -std::unique_ptr -luisa_fallback_backend_codegen(llvm::LLVMContext &llvm_ctx, const xir::Module *module) noexcept { +FallbackCodeGenFeedback +luisa_fallback_backend_codegen(llvm::LLVMContext &llvm_ctx, llvm::Module *llvm_module, const xir::Module *module) noexcept { FallbackCodegen codegen{llvm_ctx}; - return codegen.emit(module); + return codegen.emit(llvm_module, module); } }// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_codegen.h b/src/backends/fallback/fallback_codegen.h index 7b721fba9..e55e31237 100644 --- a/src/backends/fallback/fallback_codegen.h +++ b/src/backends/fallback/fallback_codegen.h @@ -1,18 +1,29 @@ #pragma once +#include + namespace llvm { class Module; class LLVMContext; }// namespace llvm namespace luisa::compute::xir { +class PrintInst; class Module; }// namespace luisa::compute::xir namespace luisa::compute::fallback { -[[nodiscard]] std::unique_ptr +struct FallbackCodeGenFeedback { + using PrintInstMap = luisa::vector>; + PrintInstMap print_inst_map; +}; + +[[nodiscard]] FallbackCodeGenFeedback luisa_fallback_backend_codegen(llvm::LLVMContext &llvm_ctx, + llvm::Module *llvm_module, const xir::Module *module) noexcept; }// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_command_queue.cpp b/src/backends/fallback/fallback_command_queue.cpp new file mode 100644 index 000000000..55f7f97af --- /dev/null +++ b/src/backends/fallback/fallback_command_queue.cpp @@ -0,0 +1,179 @@ +#include "fallback_command_queue.h" + +#ifdef LUISA_FALLBACK_USE_AKR_THREAD_POOL + +#include +#include +#include +#include + +namespace luisa::compute::fallback { + +struct AkrThreadPool { + luisa::vector> _threads; + std::mutex _task_mutex, _submit_mutex; + std::condition_variable _has_work, _work_done; + std::barrier<> _barrier; + std::atomic_uint32_t _item_count = 0u; + struct ParallelFor { + uint count; + uint block_size; + luisa::move_only_function task{}; + }; + std::optional _parallel_for; + std::atomic_bool _stopped = false; + explicit AkrThreadPool(size_t n_threads) : _barrier(static_cast(n_threads)) { + for (size_t tid = 0; tid < n_threads; tid++) { + _threads.emplace_back(std::move(luisa::make_unique([this, tid] { + while (!_stopped.load(std::memory_order_relaxed)) { + + std::unique_lock lock{_task_mutex}; + _has_work.wait(lock, [this] { return _parallel_for.has_value() || _stopped.load(std::memory_order_relaxed); }); + if (_stopped.load(std::memory_order_relaxed)) { return; } + auto &&[count, block_size, task] = *_parallel_for; + lock.unlock(); + while (_item_count < count) { + auto i = _item_count.fetch_add(block_size, std::memory_order_relaxed); + for (uint j = i; j < std::min(i + block_size, count); j++) { + task(j); + } + } + _barrier.arrive_and_wait(); + if (tid == 0) { + _work_done.notify_all(); + } + _barrier.arrive_and_wait(); + } + }))); + } + } + void parallel_for(uint count, luisa::move_only_function &&task) { + std::scoped_lock _lk{_submit_mutex}; + std::unique_lock lock{_task_mutex}; + _parallel_for = ParallelFor{count, 1u, std::move(task)}; + _item_count.store(0, std::memory_order_seq_cst); + _has_work.notify_all(); + _work_done.wait(lock, [this] { return _item_count.load(std::memory_order_relaxed) >= _parallel_for->count; }); + _parallel_for.reset(); + } + ~AkrThreadPool() { + _stopped.store(true, std::memory_order_relaxed); + _has_work.notify_all(); + for (auto &&thread : _threads) { + thread->join(); + } + } +}; + +}// namespace luisa::compute::fallback + +#endif + +namespace luisa::compute::fallback { + +inline void FallbackCommandQueue::_run_dispatch_loop() noexcept { + // wait and fetch tasks + for (;;) { + auto task = [this] { + std::unique_lock lock{_mutex}; + _cv.wait(lock, [this] { return !_tasks.empty(); }); + auto task = std::move(_tasks.front()); + _tasks.pop(); + return task; + }(); + // we use a null task to signal the end of the dispatcher + if (!task) { break; } + // good to go + task(); + // count the finish of a task + _total_finish_count.fetch_add(1u); + } +#if defined(LUISA_FALLBACK_USE_DISPATCH_QUEUE) + if (_dispatch_queue != nullptr) { + dispatch_release(_dispatch_queue); + } +#elif defined(LUISA_FALLBACK_USE_AKR_THREAD_POOL) + if (_worker_pool != nullptr) { + luisa::delete_with_allocator(_worker_pool); + } +#endif +} + +inline void FallbackCommandQueue::_wait_for_task_queue_available() const noexcept { + if (_in_flight_limit == 0u) { return; } + auto last_enqueue_count = _total_enqueue_count.load(); + while (_total_finish_count.load() + _in_flight_limit <= last_enqueue_count) { + using namespace std::chrono_literals; + std::this_thread::sleep_for(50us); + } +} + +inline void FallbackCommandQueue::_enqueue_task_no_wait(luisa::move_only_function &&task) noexcept { + _total_enqueue_count.fetch_add(1u); + { + std::scoped_lock lock{_mutex}; + _tasks.push(std::move(task)); + } + _cv.notify_one(); +} + +FallbackCommandQueue::FallbackCommandQueue(size_t in_flight_limit, size_t num_threads [[maybe_unused]]) noexcept + : _in_flight_limit{in_flight_limit}, _worker_count{num_threads} { + if (_worker_count == 0u) { + _worker_count = std::thread::hardware_concurrency(); + } + _dispatcher = std::thread{[this] { _run_dispatch_loop(); }}; +} + +FallbackCommandQueue::~FallbackCommandQueue() noexcept { + _enqueue_task_no_wait({});// signal the end of the dispatcher + _dispatcher.join(); +} + +void FallbackCommandQueue::synchronize() noexcept { + auto finished = false; + _enqueue_task_no_wait([this, &finished] { + { + std::scoped_lock lock{_synchronize_mutex}; + finished = true; + } + _synchronize_cv.notify_one(); + }); + std::unique_lock lock{_synchronize_mutex}; + _synchronize_cv.wait(lock, [&finished] { return finished; }); +} + +void FallbackCommandQueue::enqueue(luisa::move_only_function &&task) noexcept { + _wait_for_task_queue_available(); + _enqueue_task_no_wait(std::move(task)); +} + +void FallbackCommandQueue::enqueue_parallel(uint n, luisa::move_only_function &&task) noexcept { + enqueue([this, n, task = std::move(task)]() mutable noexcept { +#if defined(LUISA_FALLBACK_USE_DISPATCH_QUEUE) + if (_dispatch_queue == nullptr) { +#ifdef LUISA_PLATFORM_APPLE + _dispatch_queue = dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0); +#else + _dispatch_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); +#endif + dispatch_retain(_dispatch_queue); + } + dispatch_apply_f(n, _dispatch_queue, &task, [](void *context, size_t idx) noexcept { + auto task = static_cast *>(context); + (*task)(static_cast(idx)); + }); +#elif defined(LUISA_FALLBACK_USE_PPL) + concurrency::parallel_for(0u, n, task); +#elif defined(LUISA_FALLBACK_USE_TBB) + tbb::parallel_for(0u, n, task); +#elif defined(LUISA_FALLBACK_USE_AKR_THREAD_POOL) + if (_worker_pool == nullptr) { + _worker_pool = luisa::new_with_allocator(_worker_count); + } + _worker_pool->parallel_for(n, std::move(task)); +#endif + }); +} + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_command_queue.h b/src/backends/fallback/fallback_command_queue.h new file mode 100644 index 000000000..3c40b6a4f --- /dev/null +++ b/src/backends/fallback/fallback_command_queue.h @@ -0,0 +1,69 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +#if defined(LUISA_PLATFORM_APPLE) +#define LUISA_FALLBACK_USE_DISPATCH_QUEUE +#include +#elif defined(LUISA_PLATFORM_WINDOWS) +#define LUISA_FALLBACK_USE_PPL +#include +#elif defined(LUISA_COMPUTE_ENABLE_LIBDISPATCH) +#define LUISA_FALLBACK_USE_DISPATCH_QUEUE +#include +#elif defined(LUISA_COMPUTE_ENABLE_TBB) +#define LUISA_FALLBACK_USE_TBB +#include +#else +#define LUISA_FALLBACK_USE_AKR_THREAD_POOL +#endif + +namespace luisa::compute::fallback { + +struct AkrThreadPool; + +class FallbackCommandQueue { + +private: + std::mutex _mutex; + std::condition_variable _cv; + std::mutex _synchronize_mutex; + std::condition_variable _synchronize_cv; + std::thread _dispatcher; + luisa::queue> _tasks; + size_t _in_flight_limit{0u}; + std::atomic_size_t _total_enqueue_count{0u}; + std::atomic_size_t _total_finish_count{0u}; + size_t _worker_count{0u}; + DeviceInterface::StreamLogCallback _log_callback; + +#if defined(LUISA_FALLBACK_USE_DISPATCH_QUEUE) + dispatch_queue_t _dispatch_queue{nullptr}; +#elif defined(LUISA_FALLBACK_USE_AKR_THREAD_POOL) + AkrThreadPool *_worker_pool{nullptr}; +#endif + +private: + void _run_dispatch_loop() noexcept; + void _wait_for_task_queue_available() const noexcept; + void _enqueue_task_no_wait(luisa::move_only_function &&task) noexcept; + +public: + explicit FallbackCommandQueue(size_t in_flight_limit, size_t num_threads) noexcept; + ~FallbackCommandQueue() noexcept; + void enqueue(luisa::move_only_function &&task) noexcept; + void enqueue_parallel(uint n, luisa::move_only_function &&task) noexcept; + void synchronize() noexcept; + + void set_log_callback(DeviceInterface::StreamLogCallback callback) noexcept { _log_callback = std::move(callback); } + [[nodiscard]] auto &log_callback() const noexcept { return _log_callback; } +}; + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_device.cpp b/src/backends/fallback/fallback_device.cpp index dc9c9352e..aac6c030a 100644 --- a/src/backends/fallback/fallback_device.cpp +++ b/src/backends/fallback/fallback_device.cpp @@ -1,312 +1,352 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#include -#include -#include -#include -#include - -#include -#include -#include "fallback_stream.h" -#include "fallback_device.h" -#include "fallback_texture.h" -#include "fallback_mesh.h" -#include "fallback_accel.h" -#include "fallback_bindless_array.h" -#include "fallback_shader.h" - -//#include "llvm_event.h" -//#include "llvm_shader.h" -//#include "llvm_codegen.h" - -#include -#include - -//#include "fallback_texture_sampling_wrapper.ll"; - -namespace luisa::compute::fallback { - -static void loadLLVMModuleFromString(::llvm::orc::LLJIT &jit, const char *ir_string) { - // Create an LLVM context - auto llvm_ctx = std::make_unique(); - // Wrap the string in a MemoryBuffer - auto buffer = ::llvm::MemoryBuffer::getMemBuffer(ir_string, "embedded_ir"); - // Parse the IR - ::llvm::SMDiagnostic err; - auto module = ::llvm::parseIR(buffer->getMemBufferRef(), err, *llvm_ctx); - if (!module) { - throw std::runtime_error("Failed to parse embedded LLVM IR: " + err.getMessage().str()); - } - // Wrap the module in a ThreadSafeModule - auto tsm = ::llvm::orc::ThreadSafeModule(std::move(module), std::move(llvm_ctx)); - - // Add the module to the JIT - if (auto err = jit.addIRModule(std::move(tsm))) { - ::llvm::handleAllErrors(std::move(err), [](const ::llvm::ErrorInfoBase &err) { - LUISA_WARNING_WITH_LOCATION("LLJIT::addIRModule(): {}", err.message()); - }); - } -} - -extern "C" int my_function(int x, int y) { - printf("my_function called with arguments: %d, %d\n", x, y); - return x + y; -} -FallbackDevice::FallbackDevice(Context &&ctx) noexcept - : DeviceInterface{std::move(ctx)}, - _rtc_device{rtcNewDevice(nullptr)} { - static std::once_flag flag; - std::call_once(flag, [] { - ::llvm::InitializeNativeTarget(); - ::llvm::InitializeNativeTargetAsmPrinter(); - }); -} - -void *FallbackDevice::native_handle() const noexcept { - return reinterpret_cast(reinterpret_cast(this)); -} - -void FallbackDevice::destroy_buffer(uint64_t handle) noexcept { - luisa::deallocate_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_texture(uint64_t handle) noexcept { - luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_bindless_array(uint64_t handle) noexcept { - luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_stream(uint64_t handle) noexcept { - luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::synchronize_stream(uint64_t stream_handle) noexcept { - reinterpret_cast(stream_handle)->synchronize(); -} - -void FallbackDevice::destroy_shader(uint64_t handle) noexcept { - //luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_event(uint64_t handle) noexcept { - //luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_mesh(uint64_t handle) noexcept { - luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_accel(uint64_t handle) noexcept { - luisa::delete_with_allocator(reinterpret_cast(handle)); -} - -void FallbackDevice::destroy_swap_chain(uint64_t handle) noexcept { - LUISA_ERROR_WITH_LOCATION("Not implemented."); -} - -void FallbackDevice::present_display_in_stream( - uint64_t stream_handle, uint64_t swap_chain_handle, uint64_t image_handle) noexcept { - LUISA_ERROR_WITH_LOCATION("Not implemented."); -} - -FallbackDevice::~FallbackDevice() noexcept { - rtcReleaseDevice(_rtc_device); -} - -uint FallbackDevice::compute_warp_size() const noexcept { - return 1; -} - -BufferCreationInfo FallbackDevice::create_buffer(const Type *element, size_t elem_count, void *external_memory) noexcept { - - BufferCreationInfo info{}; - - info.element_stride = element->size(); - info.total_size_bytes = info.element_stride * elem_count; - info.handle = reinterpret_cast( - luisa::allocate_with_allocator(info.total_size_bytes)); - info.native_handle = reinterpret_cast(info.handle); - return info; -} - -BufferCreationInfo FallbackDevice::create_buffer(const ir::CArc *element, size_t elem_count, void *external_memory) noexcept { - return BufferCreationInfo(); -} - -ResourceCreationInfo FallbackDevice::create_texture(PixelFormat format, uint dimension, uint width, uint height, uint depth, uint mipmap_levels, bool simultaneous_access, bool allow_raster_target) noexcept { - ResourceCreationInfo info{}; - auto texture = luisa::new_with_allocator( - pixel_format_to_storage(format), dimension, - make_uint3(width, height, depth), mipmap_levels); - info.handle = reinterpret_cast(texture); - return info; -} - -ResourceCreationInfo FallbackDevice::create_stream(StreamTag stream_tag) noexcept { - return ResourceCreationInfo{ - .handle = reinterpret_cast(luisa::new_with_allocator())}; -} - -void FallbackDevice::dispatch(uint64_t stream_handle, CommandList &&list) noexcept { - auto stream = reinterpret_cast(stream_handle); - stream->dispatch(std::move(list)); -} - -void FallbackDevice::set_stream_log_callback(uint64_t stream_handle, const DeviceInterface::StreamLogCallback &callback) noexcept { - DeviceInterface::set_stream_log_callback(stream_handle, callback); -} - -SwapchainCreationInfo FallbackDevice::create_swapchain(const SwapchainOption &option, uint64_t stream_handle) noexcept { - return SwapchainCreationInfo(); -} - -ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, Function kernel) noexcept { - return ShaderCreationInfo{ - ResourceCreationInfo{ - .handle = reinterpret_cast(luisa::new_with_allocator(option, kernel))}}; - return ShaderCreationInfo(); -} - -ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, const ir::KernelModule *kernel) noexcept { - return ShaderCreationInfo(); -} - -ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, const ir_v2::KernelModule &kernel) noexcept { - return DeviceInterface::create_shader(option, kernel); -} - -ShaderCreationInfo FallbackDevice::load_shader(luisa::string_view name, luisa::span arg_types) noexcept { - return ShaderCreationInfo(); -} - -Usage FallbackDevice::shader_argument_usage(uint64_t handle, size_t index) noexcept { - return Usage::READ; -} - -void FallbackDevice::signal_event(uint64_t handle, uint64_t stream_handle, uint64_t fence_value) noexcept { - reinterpret_cast(stream_handle)->signal(reinterpret_cast(handle)); -} - -void FallbackDevice::wait_event(uint64_t handle, uint64_t stream_handle, uint64_t fence_value) noexcept { - reinterpret_cast(stream_handle)->wait(reinterpret_cast(handle)); -} - -bool FallbackDevice::is_event_completed(uint64_t handle, uint64_t fence_value) const noexcept { - return false; -} - -void FallbackDevice::synchronize_event(uint64_t handle, uint64_t fence_value) noexcept { - //reinterpret_cast(handle)->wait(); -} - -ResourceCreationInfo FallbackDevice::create_mesh(const AccelOption &option) noexcept { - return { - .handle = reinterpret_cast(luisa::new_with_allocator(_rtc_device, option.hint)), - .native_handle = nullptr}; -} - -ResourceCreationInfo FallbackDevice::create_procedural_primitive(const AccelOption &option) noexcept { - return ResourceCreationInfo(); -} - -void FallbackDevice::destroy_procedural_primitive(uint64_t handle) noexcept { -} - -ResourceCreationInfo FallbackDevice::create_curve(const AccelOption &option) noexcept { - return DeviceInterface::create_curve(option); -} - -void FallbackDevice::destroy_curve(uint64_t handle) noexcept { - DeviceInterface::destroy_curve(handle); -} - -ResourceCreationInfo FallbackDevice::create_motion_instance(const AccelMotionOption &option) noexcept { - return DeviceInterface::create_motion_instance(option); -} - -void FallbackDevice::destroy_motion_instance(uint64_t handle) noexcept { - DeviceInterface::destroy_motion_instance(handle); -} - -ResourceCreationInfo FallbackDevice::create_accel(const AccelOption &option) noexcept { - return ResourceCreationInfo{ - .handle = reinterpret_cast(luisa::new_with_allocator(_rtc_device, option.hint)), - .native_handle = nullptr}; -} - -string FallbackDevice::query(luisa::string_view property) noexcept { - return DeviceInterface::query(property); -} - -DeviceExtension *FallbackDevice::extension(luisa::string_view name) noexcept { - return DeviceInterface::extension(name); -} - -void FallbackDevice::set_name(luisa::compute::Resource::Tag resource_tag, uint64_t resource_handle, luisa::string_view name) noexcept { -} - -SparseBufferCreationInfo FallbackDevice::create_sparse_buffer(const Type *element, size_t elem_count) noexcept { - return DeviceInterface::create_sparse_buffer(element, elem_count); -} - -ResourceCreationInfo FallbackDevice::allocate_sparse_buffer_heap(size_t byte_size) noexcept { - return DeviceInterface::allocate_sparse_buffer_heap(byte_size); -} - -void FallbackDevice::deallocate_sparse_buffer_heap(uint64_t handle) noexcept { - DeviceInterface::deallocate_sparse_buffer_heap(handle); -} - -void FallbackDevice::update_sparse_resources(uint64_t stream_handle, vector &&textures_update) noexcept { - DeviceInterface::update_sparse_resources(stream_handle, std::move(textures_update)); -} - -void FallbackDevice::destroy_sparse_buffer(uint64_t handle) noexcept { - DeviceInterface::destroy_sparse_buffer(handle); -} - -ResourceCreationInfo FallbackDevice::allocate_sparse_texture_heap(size_t byte_size, bool is_compressed_type) noexcept { - return DeviceInterface::allocate_sparse_texture_heap(byte_size, is_compressed_type); -} - -void FallbackDevice::deallocate_sparse_texture_heap(uint64_t handle) noexcept { - DeviceInterface::deallocate_sparse_texture_heap(handle); -} - -SparseTextureCreationInfo FallbackDevice::create_sparse_texture(PixelFormat format, uint dimension, uint width, uint height, uint depth, uint mipmap_levels, bool simultaneous_access) noexcept { - return DeviceInterface::create_sparse_texture(format, dimension, width, height, depth, mipmap_levels, simultaneous_access); -} - -void FallbackDevice::destroy_sparse_texture(uint64_t handle) noexcept { - DeviceInterface::destroy_sparse_texture(handle); -} - -ResourceCreationInfo FallbackDevice::create_bindless_array(size_t size) noexcept { - ResourceCreationInfo info{}; - auto array = luisa::new_with_allocator(size); - info.handle = reinterpret_cast(array); - return info; -} - -ResourceCreationInfo FallbackDevice::create_event() noexcept { - return ResourceCreationInfo{}; - // return ResourceCreationInfo - // { - // .handle = reinterpret_cast(luisa::new_with_allocator()) - // }; -} - -}// namespace luisa::compute::fallback - -LUISA_EXPORT_API luisa::compute::DeviceInterface *create(luisa::compute::Context &&ctx, std::string_view) noexcept { - return luisa::new_with_allocator(std::move(ctx)); -} - -LUISA_EXPORT_API void destroy(luisa::compute::DeviceInterface *device) noexcept { - luisa::delete_with_allocator(device); -} +// +// Created by Mike Smith on 2022/5/23. +// + +#include + +#ifdef LUISA_ARCH_X86_64 +#include +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include +#include "fallback_stream.h" +#include "fallback_device.h" +#include "fallback_texture.h" +#include "fallback_mesh.h" +#include "fallback_accel.h" +#include "fallback_bindless_array.h" +#include "fallback_shader.h" +#include "fallback_buffer.h" +#include "fallback_swapchain.h" + +#include +#include + +namespace luisa::compute::fallback { + +static void loadLLVMModuleFromString(::llvm::orc::LLJIT &jit, const char *ir_string) { + // Create an LLVM context + auto llvm_ctx = std::make_unique(); + // Wrap the string in a MemoryBuffer + auto buffer = ::llvm::MemoryBuffer::getMemBuffer(ir_string, "embedded_ir"); + // Parse the IR + ::llvm::SMDiagnostic err; + auto module = ::llvm::parseIR(buffer->getMemBufferRef(), err, *llvm_ctx); + if (!module) { + throw std::runtime_error("Failed to parse embedded LLVM IR: " + err.getMessage().str()); + } + // Wrap the module in a ThreadSafeModule + auto tsm = ::llvm::orc::ThreadSafeModule(std::move(module), std::move(llvm_ctx)); + + // Add the module to the JIT + if (auto err = jit.addIRModule(std::move(tsm))) { + ::llvm::handleAllErrors(std::move(err), [](const ::llvm::ErrorInfoBase &err) { + LUISA_WARNING_WITH_LOCATION("LLJIT::addIRModule(): {}", err.message()); + }); + } +} + +FallbackDevice::FallbackDevice(Context &&ctx) noexcept + : DeviceInterface{std::move(ctx)} { + +#ifdef LUISA_ARCH_X86_64 + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); +#endif + + // embree + _rtc_device = rtcNewDevice("frequency_level=simd128,isa=avx2,verbose=1"); + rtcSetDeviceErrorFunction( + _rtc_device, + [](void *, RTCError code, const char *message) { + LUISA_WARNING_WITH_LOCATION("Embree error (code = {}): {}", + luisa::to_underlying(code), message); + }, + nullptr); + + // llvm + static std::once_flag flag; + std::call_once(flag, [] { + ::llvm::InitializeNativeTarget(); + ::llvm::InitializeNativeTargetAsmPrinter(); + }); +} + +FallbackDevice::~FallbackDevice() noexcept { + rtcReleaseDevice(_rtc_device); +} + +void *FallbackDevice::native_handle() const noexcept { + return reinterpret_cast(reinterpret_cast(this)); +} + +void FallbackDevice::destroy_buffer(uint64_t handle) noexcept { + luisa::deallocate_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_texture(uint64_t handle) noexcept { + luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_bindless_array(uint64_t handle) noexcept { + luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_stream(uint64_t handle) noexcept { + luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::synchronize_stream(uint64_t stream_handle) noexcept { + reinterpret_cast(stream_handle)->synchronize(); +} + +void FallbackDevice::destroy_shader(uint64_t handle) noexcept { + //luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_event(uint64_t handle) noexcept { + //luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_mesh(uint64_t handle) noexcept { + luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_accel(uint64_t handle) noexcept { + luisa::delete_with_allocator(reinterpret_cast(handle)); +} + +void FallbackDevice::destroy_swap_chain(uint64_t handle) noexcept { + auto b = reinterpret_cast(handle); + luisa::deallocate_with_allocator(b); +} + +void FallbackDevice::present_display_in_stream(uint64_t stream_handle, + uint64_t swap_chain_handle, + uint64_t image_handle) noexcept { + auto stream = reinterpret_cast(stream_handle); + auto chain = reinterpret_cast(swap_chain_handle); + auto image = reinterpret_cast(image_handle); + chain->present(stream, image); +} + +uint FallbackDevice::compute_warp_size() const noexcept { + return 1; +} + +BufferCreationInfo FallbackDevice::create_buffer(const Type *element, size_t elem_count, void *external_memory) noexcept { + + BufferCreationInfo info{}; + + if (element == Type::of()) { + info.element_stride = 1u; + } else { + info.element_stride = element->size(); + } + info.total_size_bytes = info.element_stride * elem_count; + auto buffer = luisa::new_with_allocator(info.total_size_bytes); + info.handle = reinterpret_cast(buffer); + info.native_handle = reinterpret_cast(buffer->data()); + return info; +} + +BufferCreationInfo FallbackDevice::create_buffer(const ir::CArc *element, size_t elem_count, void *external_memory) noexcept { + return BufferCreationInfo(); +} + +ResourceCreationInfo FallbackDevice::create_texture(PixelFormat format, uint dimension, uint width, uint height, uint depth, uint mipmap_levels, bool simultaneous_access, bool allow_raster_target) noexcept { + ResourceCreationInfo info{}; + auto texture = luisa::new_with_allocator( + pixel_format_to_storage(format), dimension, + make_uint3(width, height, depth), mipmap_levels); + info.handle = reinterpret_cast(texture); + return info; +} + +ResourceCreationInfo FallbackDevice::create_stream(StreamTag stream_tag) noexcept { + return ResourceCreationInfo{ + .handle = reinterpret_cast(luisa::new_with_allocator())}; +} + +void FallbackDevice::dispatch(uint64_t stream_handle, CommandList &&list) noexcept { + auto stream = reinterpret_cast(stream_handle); + stream->dispatch(std::move(list)); +} + +void FallbackDevice::set_stream_log_callback(uint64_t stream_handle, const DeviceInterface::StreamLogCallback &callback) noexcept { + auto stream = reinterpret_cast(stream_handle); + stream->queue()->set_log_callback(callback); +} + +SwapchainCreationInfo FallbackDevice::create_swapchain(const SwapchainOption &option, uint64_t stream_handle) noexcept { + auto stream = reinterpret_cast(stream_handle); + auto sc = luisa::new_with_allocator(stream, option); + return SwapchainCreationInfo{ + ResourceCreationInfo{.handle = reinterpret_cast(sc), + .native_handle = nullptr}, + (option.wants_hdr ? PixelStorage::FLOAT4 : PixelStorage::BYTE4)}; +} + +ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, Function kernel) noexcept { + Clock clk; + auto shader = luisa::new_with_allocator(option, kernel); + LUISA_VERBOSE("Shader compilation took {} ms.", clk.toc()); + ShaderCreationInfo info{}; + info.handle = reinterpret_cast(shader); + info.native_handle = reinterpret_cast(shader->native_handle()); + info.block_size = kernel.block_size(); + return info; +} + +ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, const ir::KernelModule *kernel) noexcept { + return ShaderCreationInfo(); +} + +ShaderCreationInfo FallbackDevice::create_shader(const ShaderOption &option, const ir_v2::KernelModule &kernel) noexcept { + return DeviceInterface::create_shader(option, kernel); +} + +ShaderCreationInfo FallbackDevice::load_shader(luisa::string_view name, luisa::span arg_types) noexcept { + return ShaderCreationInfo(); +} + +Usage FallbackDevice::shader_argument_usage(uint64_t handle, size_t index) noexcept { + LUISA_NOT_IMPLEMENTED(); +} + +void FallbackDevice::signal_event(uint64_t handle, uint64_t stream_handle, uint64_t fence_value) noexcept { + LUISA_NOT_IMPLEMENTED(); +} + +void FallbackDevice::wait_event(uint64_t handle, uint64_t stream_handle, uint64_t fence_value) noexcept { + LUISA_NOT_IMPLEMENTED(); +} + +bool FallbackDevice::is_event_completed(uint64_t handle, uint64_t fence_value) const noexcept { + return false; +} + +void FallbackDevice::synchronize_event(uint64_t handle, uint64_t fence_value) noexcept { + LUISA_NOT_IMPLEMENTED(); +} + +ResourceCreationInfo FallbackDevice::create_mesh(const AccelOption &option) noexcept { + auto mesh = luisa::new_with_allocator(_rtc_device, option); + return {.handle = reinterpret_cast(mesh), + .native_handle = mesh->handle()}; +} + +ResourceCreationInfo FallbackDevice::create_procedural_primitive(const AccelOption &option) noexcept { + return ResourceCreationInfo(); +} + +void FallbackDevice::destroy_procedural_primitive(uint64_t handle) noexcept { +} + +ResourceCreationInfo FallbackDevice::create_curve(const AccelOption &option) noexcept { + return DeviceInterface::create_curve(option); +} + +void FallbackDevice::destroy_curve(uint64_t handle) noexcept { + DeviceInterface::destroy_curve(handle); +} + +ResourceCreationInfo FallbackDevice::create_motion_instance(const AccelMotionOption &option) noexcept { + return DeviceInterface::create_motion_instance(option); +} + +void FallbackDevice::destroy_motion_instance(uint64_t handle) noexcept { + DeviceInterface::destroy_motion_instance(handle); +} + +ResourceCreationInfo FallbackDevice::create_accel(const AccelOption &option) noexcept { + auto accel = luisa::new_with_allocator(_rtc_device, option); + return ResourceCreationInfo{.handle = reinterpret_cast(accel), + .native_handle = accel->handle()}; +} + +string FallbackDevice::query(luisa::string_view property) noexcept { + return DeviceInterface::query(property); +} + +DeviceExtension *FallbackDevice::extension(luisa::string_view name) noexcept { + return DeviceInterface::extension(name); +} + +void FallbackDevice::set_name(luisa::compute::Resource::Tag resource_tag, uint64_t resource_handle, luisa::string_view name) noexcept { +} + +SparseBufferCreationInfo FallbackDevice::create_sparse_buffer(const Type *element, size_t elem_count) noexcept { + return DeviceInterface::create_sparse_buffer(element, elem_count); +} + +ResourceCreationInfo FallbackDevice::allocate_sparse_buffer_heap(size_t byte_size) noexcept { + return DeviceInterface::allocate_sparse_buffer_heap(byte_size); +} + +void FallbackDevice::deallocate_sparse_buffer_heap(uint64_t handle) noexcept { + DeviceInterface::deallocate_sparse_buffer_heap(handle); +} + +void FallbackDevice::update_sparse_resources(uint64_t stream_handle, vector &&textures_update) noexcept { + DeviceInterface::update_sparse_resources(stream_handle, std::move(textures_update)); +} + +void FallbackDevice::destroy_sparse_buffer(uint64_t handle) noexcept { + DeviceInterface::destroy_sparse_buffer(handle); +} + +ResourceCreationInfo FallbackDevice::allocate_sparse_texture_heap(size_t byte_size, bool is_compressed_type) noexcept { + return DeviceInterface::allocate_sparse_texture_heap(byte_size, is_compressed_type); +} + +void FallbackDevice::deallocate_sparse_texture_heap(uint64_t handle) noexcept { + DeviceInterface::deallocate_sparse_texture_heap(handle); +} + +SparseTextureCreationInfo FallbackDevice::create_sparse_texture(PixelFormat format, uint dimension, uint width, uint height, uint depth, uint mipmap_levels, bool simultaneous_access) noexcept { + return DeviceInterface::create_sparse_texture(format, dimension, width, height, depth, mipmap_levels, simultaneous_access); +} + +void FallbackDevice::destroy_sparse_texture(uint64_t handle) noexcept { + DeviceInterface::destroy_sparse_texture(handle); +} + +ResourceCreationInfo FallbackDevice::create_bindless_array(size_t size) noexcept { + ResourceCreationInfo info{}; + auto array = luisa::new_with_allocator(size); + info.handle = reinterpret_cast(array); + return info; +} + +ResourceCreationInfo FallbackDevice::create_event() noexcept { + return ResourceCreationInfo{}; + // return ResourceCreationInfo + // { + // .handle = reinterpret_cast(luisa::new_with_allocator()) + // }; +} + +}// namespace luisa::compute::fallback + +LUISA_EXPORT_API luisa::compute::DeviceInterface *create(luisa::compute::Context &&ctx, std::string_view) noexcept { + return luisa::new_with_allocator(std::move(ctx)); +} + +LUISA_EXPORT_API void destroy(luisa::compute::DeviceInterface *device) noexcept { + luisa::delete_with_allocator(device); +} + +LUISA_EXPORT_API void backend_device_names(luisa::vector &names) noexcept { + names.clear(); + names.emplace_back(luisa::cpu_name()); +} diff --git a/src/backends/fallback/fallback_device.h b/src/backends/fallback/fallback_device.h index f3db3b536..1cc540741 100644 --- a/src/backends/fallback/fallback_device.h +++ b/src/backends/fallback/fallback_device.h @@ -20,15 +20,11 @@ namespace luisa::compute::fallback { class FallbackDevice : public DeviceInterface { private: - RTCDevice _rtc_device; - mutable std::mutex _jit_mutex; + RTCDevice _rtc_device{nullptr}; public: explicit FallbackDevice(Context &&ctx) noexcept; ~FallbackDevice() noexcept override; - //[[nodiscard]] ::llvm::TargetMachine *target_machine() const noexcept { return _target_machine.get(); } - //[[nodiscard]] ::llvm::orc::LLJIT *jit() const noexcept { return _jit.get(); } - [[nodiscard]] auto &jit_mutex() const noexcept { return _jit_mutex; } void *native_handle() const noexcept override; void destroy_buffer(uint64_t handle) noexcept override; void destroy_texture(uint64_t handle) noexcept override; diff --git a/src/backends/fallback/fallback_device_api.cpp b/src/backends/fallback/fallback_device_api.cpp new file mode 100644 index 000000000..00a488f28 --- /dev/null +++ b/src/backends/fallback/fallback_device_api.cpp @@ -0,0 +1,359 @@ +#include "fallback_texture.h" +#include "fallback_texture_bc.h" +#include "fallback_accel.h" +#include "fallback_device_api.h" + +namespace luisa::compute::fallback::api { + +void luisa_bc7_read(const FallbackTextureView *tex, uint x, uint y, float4 &out) noexcept { + auto block_pos = make_uint2(x / 4, y / 4); + auto block_per_row = tex->size2d().x / 4; + const bc::BC7Block *bc_block = reinterpret_cast(tex->data()) + + (block_pos.x + block_pos.y * block_per_row); + bc_block->Decode(x % 4, y % 4, reinterpret_cast(&out)); +} + +void luisa_bc6h_read(const FallbackTextureView *tex, int x, int y, float4 &out) noexcept { + auto block_pos = make_uint2(x / 4, y / 4); + auto block_per_row = tex->size2d().x / 4; + const bc::BC6HBlock *bc_block = reinterpret_cast(tex->data()) + (block_pos.x + block_pos.y * block_per_row); + bc_block->Decode(false, x % 4, y % 4, reinterpret_cast(&out)); +} + +[[nodiscard]] int4 luisa_fallback_texture2d_read_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y) noexcept { + PackedTextureView view{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 2D int texture"); + auto v = tex->read2d(make_uint2(x, y)); + return {v.x, v.y, v.z, v.w}; +} + +[[nodiscard]] uint4 luisa_fallback_texture2d_read_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y) noexcept { + PackedTextureView view{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 2D uint texture"); + auto v = tex->read2d(make_uint2(x, y)); + return {v.x, v.y, v.z, v.w}; +} + +[[nodiscard]] float4 luisa_fallback_texture2d_read_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y) noexcept { + PackedTextureView view{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + switch (tex->storage()) { + case PixelStorage::BC7: { + float4 out{}; + luisa_bc7_read(tex, x, y, out); + return out; + } + case PixelStorage::BC6: { + float4 out{}; + luisa_bc6h_read(tex, x, y, out); + return out; + } + default: { + auto v = tex->read2d(make_uint2(x, y)); + return {v.x, v.y, v.z, v.w}; + } + } +} + +void luisa_fallback_texture2d_write_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y, float4 value) noexcept { + PackedTextureView view{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 2D texture write"); + auto v = luisa::make_float4(value.x, value.y, value.z, value.w); + tex->write2d(make_uint2(x, y), v); +} + +void luisa_fallback_texture2d_write_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint4 value) noexcept { + PackedTextureView view{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 2D texture write"); + auto v = luisa::make_uint4(value.x, value.y, value.z, value.w); + tex->write2d(make_uint2(x, y), v); +} + +void luisa_fallback_texture2d_write_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y, int4 value) noexcept { + PackedTextureView view{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 2D texture write"); + auto v = luisa::make_int4(value.x, value.y, value.z, value.w); + tex->write2d(make_uint2(x, y), v); +} + +[[nodiscard]] int4 luisa_fallback_texture3d_read_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z) noexcept { + auto view = PackedTextureView{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 3D texture"); + auto v = tex->read3d(make_uint3(x, y, z)); + return {v.x, v.y, v.z, v.w}; +} + +[[nodiscard]] uint4 luisa_fallback_texture3d_read_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z) noexcept { + auto view = PackedTextureView{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 3D texture"); + auto v = tex->read3d(make_uint3(x, y, z)); + return {v.x, v.y, v.z, v.w}; +} + +[[nodiscard]] float4 luisa_fallback_texture3d_read_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z) noexcept { + auto view = PackedTextureView{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 3D texture"); + auto v = tex->read3d(make_uint3(x, y, z)); + return {v.x, v.y, v.z, v.w}; +} + +void luisa_fallback_texture3d_write_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z, float4 value) noexcept { + auto view = PackedTextureView{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 3D texture"); + auto v = luisa::make_float4(value.x, value.y, value.z, value.w); + tex->write3d(make_uint3(x, y, z), v); +} + +void luisa_fallback_texture3d_write_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z, uint4 value) noexcept { + auto view = PackedTextureView{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 3D texture"); + auto v = luisa::make_uint4(value.x, value.y, value.z, value.w); + tex->write3d(make_uint3(x, y, z), v); +} + +void luisa_fallback_texture3d_write_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z, int4 value) noexcept { + auto view = PackedTextureView{texture_data, texture_data_extra}; + auto tex = reinterpret_cast(&view); + LUISA_DEBUG_ASSERT(!is_block_compressed(tex->storage()), "Block compression doesn't work for 3D texture"); + auto v = luisa::make_int4(value.x, value.y, value.z, value.w); + tex->write3d(make_uint3(x, y, z), v); +} + +template +[[nodiscard]] inline auto texture_coord_point(Sampler::Address address, T uv, T s) noexcept { + switch (address) { + case Sampler::Address::EDGE: return luisa::clamp(uv, 0.0f, one_minus_epsilon) * s; + case Sampler::Address::REPEAT: return luisa::fract(uv) * s; + case Sampler::Address::MIRROR: { + uv = luisa::fmod(luisa::abs(uv), T{2.f}); + uv = select(2.f - uv, uv, uv < T{1.f}); + return luisa::min(uv, one_minus_epsilon) * s; + } + case Sampler::Address::ZERO: return luisa::select(uv * s, T{65536.f}, uv < 0.f || uv >= 1.f); + } + return T{65536.f}; +} + +[[nodiscard]] inline auto texture_sample_point(FallbackTextureView view, Sampler::Address address, luisa::float2 uv) noexcept { + auto size = make_float2(view.size2d()); + auto p = texture_coord_point(address, uv, size); + auto c = make_uint2(p); + auto handle = reinterpret_cast(&view); + return bit_cast(luisa_fallback_texture2d_read_float(handle->data, handle->extra, c.x, c.y)); +} + +[[nodiscard]] inline auto texture_coord_linear(Sampler::Address address, luisa::float2 uv, luisa::float2 s) noexcept { + auto inv_s = 1.f / s; + auto c_min = texture_coord_point(address, uv - .5f * inv_s, s); + auto c_max = texture_coord_point(address, uv + .5f * inv_s, s); + return std::make_pair(luisa::min(c_min, c_max), luisa::max(c_min, c_max)); +} + +[[nodiscard]] inline auto texture_sample_linear(FallbackTextureView view, Sampler::Address address, luisa::float2 uv) noexcept { + auto size = make_float2(view.size2d()); + auto [st_min, st_max] = texture_coord_linear(address, uv, size); + auto t = luisa::fract(st_max); + auto c0 = make_uint2(st_min); + auto c1 = make_uint2(st_max); + auto handle = reinterpret_cast(&view); + auto v00 = bit_cast(luisa_fallback_texture2d_read_float(handle->data, handle->extra, c0.x, c0.y)); + auto v01 = bit_cast(luisa_fallback_texture2d_read_float(handle->data, handle->extra, c1.x, c0.y)); + auto v10 = bit_cast(luisa_fallback_texture2d_read_float(handle->data, handle->extra, c0.x, c1.y)); + auto v11 = bit_cast(luisa_fallback_texture2d_read_float(handle->data, handle->extra, c1.x, c1.y)); + return luisa::lerp(luisa::lerp(v00, v01, t.x), luisa::lerp(v10, v11, t.x), t.y); +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample(const Texture *handle, uint sampler, float u, float v) noexcept { + auto tex = reinterpret_cast(handle); + auto s = Sampler::decode(sampler); + auto view = tex->view(0); + auto result = s.filter() == Sampler::Filter::POINT ? + texture_sample_point(view, s.address(), make_float2(u, v)) : + texture_sample_linear(view, s.address(), make_float2(u, v)); + return {result.x, result.y, result.z, result.w}; +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample_level(const Texture *handle, uint sampler, float u, float v, float level) noexcept { + auto tex = reinterpret_cast(handle); + auto s = Sampler::decode(sampler); + auto filter = s.filter(); + if (level <= 0.f || tex->mip_levels() == 0u || filter == Sampler::Filter::POINT) { + return luisa_fallback_bindless_texture2d_sample(handle, sampler, u, v); + } + auto level0 = std::min(static_cast(level), tex->mip_levels() - 1u); + auto view0 = tex->view(level0); + auto v0 = texture_sample_linear(view0, s.address(), make_float2(u, v)); + if (level0 == tex->mip_levels() - 1u || filter == Sampler::Filter::LINEAR_POINT) { + return {v0.x, v0.y, v0.z, v0.w}; + } + auto view1 = tex->view(level0 + 1); + auto v1 = texture_sample_linear(view1, s.address(), make_float2(u, v)); + auto result = luisa::lerp(v0, v1, luisa::fract(level)); + return {result.x, result.y, result.z, result.w}; +} + +// TODO: implement +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample_grad(const Texture *handle, uint sampler, float u, float v, float dudx, float dudy, float dvdx, float dvdy) noexcept { + return luisa_fallback_bindless_texture2d_sample(handle, sampler, u, v); +} + +// TODO: implement +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample_grad_level(const Texture *handle, uint sampler, float u, float v, float dudx, float dudy, float dvdx, float dvdy, float level) noexcept { + return luisa_fallback_bindless_texture2d_sample_level(handle, sampler, u, v, level); +} + +[[nodiscard]] inline auto texture_sample_point(FallbackTextureView view, Sampler::Address address, luisa::float3 uv) noexcept { + auto size = make_float3(view.size3d()); + auto c = make_uint3(texture_coord_point(address, uv, size)); + auto handle = reinterpret_cast(&view); + return bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c.x, c.y, c.z)); +} + +[[nodiscard]] inline auto texture_coord_linear(Sampler::Address address, luisa::float3 uv, luisa::float3 size) noexcept { + auto s = make_float3(size); + auto inv_s = 1.f / s; + auto c_min = texture_coord_point(address, uv - .5f * inv_s, s); + auto c_max = texture_coord_point(address, uv + .5f * inv_s, s); + return std::make_pair(luisa::min(c_min, c_max), luisa::max(c_min, c_max)); +} + +[[nodiscard]] inline auto texture_sample_linear(FallbackTextureView view, Sampler::Address address, luisa::float3 uvw) noexcept { + auto size = make_float3(view.size3d()); + auto [st_min, st_max] = texture_coord_linear(address, uvw, size); + auto t = luisa::fract(st_max); + auto c0 = make_uint3(st_min); + auto c1 = make_uint3(st_max); + auto handle = reinterpret_cast(&view); + auto v000 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c0.x, c0.y, c0.z)); + auto v001 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c1.x, c0.y, c0.z)); + auto v010 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c0.x, c1.y, c0.z)); + auto v011 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c1.x, c1.y, c0.z)); + auto v100 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c0.x, c0.y, c1.z)); + auto v101 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c1.x, c0.y, c1.z)); + auto v110 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c0.x, c1.y, c1.z)); + auto v111 = bit_cast(luisa_fallback_texture3d_read_float(handle->data, handle->extra, c1.x, c1.y, c1.z)); + return luisa::lerp(luisa::lerp(luisa::lerp(v000, v001, t.x), + luisa::lerp(v010, v011, t.x), t.y), + luisa::lerp(luisa::lerp(v100, v101, t.x), + luisa::lerp(v110, v111, t.x), t.y), + t.z); +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample(const Texture *handle, uint sampler, float u, float v, float w) noexcept { + auto tex = reinterpret_cast(handle); + auto s = Sampler::decode(sampler); + auto view = tex->view(0); + auto result = s.filter() == Sampler::Filter::POINT ? + texture_sample_point(view, s.address(), make_float3(u, v, w)) : + texture_sample_linear(view, s.address(), make_float3(u, v, w)); + return {result.x, result.y, result.z, result.w}; +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample_level(const Texture *handle, uint sampler, float u, float v, float w, float level) noexcept { + auto tex = reinterpret_cast(handle); + auto s = Sampler::decode(sampler); + auto filter = s.filter(); + if (level <= 0.f || tex->mip_levels() == 0u || filter == Sampler::Filter::POINT) { + return luisa_fallback_bindless_texture3d_sample(handle, sampler, u, v, w); + } + auto level0 = std::min(static_cast(level), tex->mip_levels() - 1u); + auto view0 = tex->view(level0); + auto v0 = texture_sample_linear(view0, s.address(), make_float3(u, v, w)); + if (level0 == tex->mip_levels() - 1u || filter == Sampler::Filter::LINEAR_POINT) { + return {v0.x, v0.y, v0.z, v0.w}; + } + auto view1 = tex->view(level0 + 1); + auto v1 = texture_sample_linear(view1, s.address(), make_float3(u, v, w)); + auto result = luisa::lerp(v0, v1, luisa::fract(level)); + return {result.x, result.y, result.z, result.w}; +} + +// TODO: implement +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample_grad(const Texture *handle, uint sampler, float u, float v, float w, float dudx, float dvdx, float dwdx, float dudy, float dvdy, float dwdy) noexcept { + return luisa_fallback_bindless_texture3d_sample(handle, sampler, u, v, w); +} + +// TODO: implement +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample_grad_level(const Texture *handle, uint sampler, float u, float v, float w, float dudx, float dvdx, float dwdx, float dudy, float dvdy, float dwdy, float level) noexcept { + return luisa_fallback_bindless_texture3d_sample_level(handle, sampler, u, v, w, level); +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_read_level(const Texture *handle, uint x, uint y, uint level) noexcept { + auto texture = reinterpret_cast(handle); + auto levels = texture->mip_levels(); + LUISA_ASSUME(levels > 0); + if (level >= levels) { return {}; } + auto view = texture->view(level); + auto packed = reinterpret_cast(&view); + return luisa_fallback_texture2d_read_float(packed->data, packed->extra, x, y); +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_read(const Texture *handle, uint x, uint y) noexcept { + return luisa_fallback_bindless_texture2d_read_level(handle, x, y, 0u); +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_read_level(const Texture *handle, uint x, uint y, uint z, uint level) noexcept { + auto texture = reinterpret_cast(handle); + auto levels = texture->mip_levels(); + LUISA_ASSUME(levels > 0); + if (level >= levels) { return {}; } + auto view = texture->view(level); + auto packed = reinterpret_cast(&view); + return luisa_fallback_texture3d_read_float(packed->data, packed->extra, x, y, z); +} + +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_read(const Texture *handle, uint x, uint y, uint z) noexcept { + return luisa_fallback_bindless_texture3d_read_level(handle, x, y, z, 0u); +} + +void luisa_fallback_accel_trace_closest(void *handle, EmbreeRayHit *ray_hit) noexcept { + // prepare context +#if LUISA_COMPUTE_EMBREE_VERSION == 3 + RTCIntersectContext ctx{}; + rtcInitIntersectContext(&ctx); +#else + RTCRayQueryContext ctx{}; + rtcInitRayQueryContext(&ctx); + RTCIntersectArguments args{.context = &ctx}; +#endif + // invoke embree + auto scene = static_cast(handle); + auto rh = reinterpret_cast(ray_hit); +#if LUISA_COMPUTE_EMBREE_VERSION == 3 + rtcIntersect1(scene, &ctx, rh); +#else + rtcIntersect1(scene, rh, &args); +#endif +} + +void luisa_fallback_accel_trace_any(void *handle, EmbreeRay *ray) noexcept { + // prepare context +#if LUISA_COMPUTE_EMBREE_VERSION == 3 + RTCIntersectContext ctx{}; + rtcInitIntersectContext(&ctx); +#else + RTCRayQueryContext ctx{}; + rtcInitRayQueryContext(&ctx); + RTCOccludedArguments args{.context = &ctx}; +#endif + // invoke embree + auto scene = static_cast(handle); + auto r = reinterpret_cast(ray); +#if LUISA_COMPUTE_EMBREE_VERSION == 3 + rtcOccluded1(scene, &ctx, r); +#else + rtcOccluded1(scene, r, &args); +#endif +} + +}// namespace luisa::compute::fallback::api diff --git a/src/backends/fallback/fallback_device_api.h b/src/backends/fallback/fallback_device_api.h new file mode 100644 index 000000000..5cc9270c1 --- /dev/null +++ b/src/backends/fallback/fallback_device_api.h @@ -0,0 +1,169 @@ +#pragma once + +#ifndef LUISA_COMPUTE_FALLBACK_DEVICE_LIB +#include +#include +namespace luisa::compute::fallback::api { +#else +using int8_t = signed char; +using int16_t = short; +using int32_t = int; +using int64_t = long long; +using uint8_t = unsigned char; +using uint16_t = unsigned short; +using uint32_t = unsigned int; +using uint64_t = unsigned long long; +using size_t = unsigned long long; +#endif + +extern "C" { + +using uint = unsigned int; + +struct alignas(8) float2 { + float x, y; +}; + +struct alignas(16) float3 { + float x, y, z; +}; + +struct alignas(16) float4 { + float x, y, z, w; +}; + +struct alignas(16) uint4 { + uint x, y, z, w; +}; + +struct alignas(16) int4 { + int x, y, z, w; +}; + +struct alignas(8) uint2 { + uint x, y; +}; + +struct alignas(16) uint3 { + uint x, y, z; +}; + +struct float2x2 { + float2 cols[2]; +}; + +struct float3x3 { + float3 cols[3]; +}; + +struct float4x4 { + float4 cols[4]; +}; + +struct alignas(16) Ray { + float origin[3]; + float t_min; + float direction[3]; + float t_max; +}; + +struct alignas(8) SurfaceHit { + uint inst; + uint prim; + float2 bary; + float committed_ray_t; +}; + +struct alignas(16u) TextureView { + void *_data; + uint _width : 16u; + uint _height : 16u; + uint _depth : 16u; + uint _storage : 8u; + uint _dimension : 4u; + uint _pixel_stride_shift : 4u; +}; + +struct alignas(16u) PackedTextureView { + void *data; + uint64_t extra; +}; + +static_assert(sizeof(TextureView) == 16 && sizeof(PackedTextureView) == 16); + +struct alignas(16) Texture; + +struct alignas(16) BindlessSlot { + const void *buffer; + uint64_t _compressed_buffer_size_sampler_2d_sampler_3d; + const Texture *tex2d; + const Texture *tex3d; +}; + +struct alignas(16) BindlessArrayView { + const BindlessSlot *slots; + size_t size; +}; + +/* implementations */ + +[[nodiscard]] int4 luisa_fallback_texture2d_read_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y) noexcept; +[[nodiscard]] uint4 luisa_fallback_texture2d_read_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y) noexcept; +[[nodiscard]] float4 luisa_fallback_texture2d_read_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y) noexcept; + +void luisa_fallback_texture2d_write_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y, float4 value) noexcept; +void luisa_fallback_texture2d_write_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint4 value) noexcept; +void luisa_fallback_texture2d_write_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y, int4 value) noexcept; + +[[nodiscard]] int4 luisa_fallback_texture3d_read_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z) noexcept; +[[nodiscard]] uint4 luisa_fallback_texture3d_read_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z) noexcept; +[[nodiscard]] float4 luisa_fallback_texture3d_read_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z) noexcept; + +void luisa_fallback_texture3d_write_float(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z, float4 value) noexcept; +void luisa_fallback_texture3d_write_uint(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z, uint4 value) noexcept; +void luisa_fallback_texture3d_write_int(void *texture_data, uint64_t texture_data_extra, uint x, uint y, uint z, int4 value) noexcept; + +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample(const Texture *handle, uint sampler, float u, float v) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample_level(const Texture *handle, uint sampler, float u, float v, float level) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample_grad(const Texture *handle, uint sampler, float u, float v, float dudx, float dudy, float dvdx, float dvdy) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_sample_grad_level(const Texture *handle, uint sampler, float u, float v, float dudx, float dudy, float dvdx, float dvdy, float level) noexcept; + +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample(const Texture *handle, uint sampler, float u, float v, float w) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample_level(const Texture *handle, uint sampler, float u, float v, float w, float level) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample_grad(const Texture *handle, uint sampler, float u, float v, float w, float dudx, float dvdx, float dwdx, float dudy, float dvdy, float dwdy) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_sample_grad_level(const Texture *handle, uint sampler, float u, float v, float w, float dudx, float dvdx, float dwdx, float dudy, float dvdy, float dwdy, float level) noexcept; + +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_read(const Texture *handle, uint x, uint y) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture2d_read_level(const Texture *handle, uint x, uint y, uint level) noexcept; + +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_read(const Texture *handle, uint x, uint y, uint z) noexcept; +[[nodiscard]] float4 luisa_fallback_bindless_texture3d_read_level(const Texture *handle, uint x, uint y, uint z, uint level) noexcept; + +struct alignas(16) EmbreeRay; +struct alignas(16) EmbreeHit; +struct alignas(16) EmbreeRayHit; + +struct alignas(16) AccelInstance { + float affine[12]; + uint8_t mask; + bool opaque; + bool dirty; + uint user_id; + void *geometry; +}; + +static_assert(sizeof(AccelInstance) == 64u); + +struct alignas(16) AccelView { + void *embree_scene; + AccelInstance *instances; +}; + +void luisa_fallback_accel_trace_closest(void *handle, EmbreeRayHit *ray_hit) noexcept; +void luisa_fallback_accel_trace_any(void *handle, EmbreeRay *ray) noexcept; + +} + +#ifndef LUISA_COMPUTE_FALLBACK_DEVICE_LIB +}// namespace luisa::compute::fallback +#endif diff --git a/src/backends/fallback/fallback_device_api_ir_module.cpp b/src/backends/fallback/fallback_device_api_ir_module.cpp new file mode 100644 index 000000000..2a3d912b5 --- /dev/null +++ b/src/backends/fallback/fallback_device_api_ir_module.cpp @@ -0,0 +1,45 @@ +// +// Created by Mike on 2024/12/10. +// + +#include +#include "fallback_device_api_ir_module.h" + +#if defined(LUISA_PLATFORM_WINDOWS) + +#if defined(LUISA_ARCH_X86_64) +#include "fallback_builtin/fallback_device_api_wrappers.windows.x86_64.inl" +#elif defined(LUISA_ARCH_ARM64) +#include "fallback_builtin/fallback_device_api_wrappers.windows.arm64.inl" +#else +#error Unsupported architecture on Windows +#endif + +#elif defined(LUISA_PLATFORM_APPLE) + +#if defined(LUISA_ARCH_X86_64) +#include "fallback_builtin/fallback_device_api_wrappers.darwin.x86_64.inl" +#elif defined(LUISA_ARCH_ARM64) +#include "fallback_builtin/fallback_device_api_wrappers.darwin.arm64.inl" +#else +#error Unsupported architecture on Windows +#endif + +#elif defined(LUISA_PLATFORM_UNIX) + +#if defined(LUISA_ARCH_X86_64) +#include "fallback_builtin/fallback_device_api_wrappers.linux.x86_64.inl" +#elif defined(LUISA_ARCH_ARM64) +#include "fallback_builtin/fallback_device_api_wrappers.linux.arm64.inl" +#else +#error Unsupported architecture on Windows +#endif + +#endif + +namespace luisa::compute::fallback { +luisa::string_view fallback_backend_device_builtin_module() noexcept { + return {reinterpret_cast(luisa_fallback_backend_device_builtin_module), + std::size(luisa_fallback_backend_device_builtin_module)}; +} +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_device_api_ir_module.h b/src/backends/fallback/fallback_device_api_ir_module.h new file mode 100644 index 000000000..8779c21c0 --- /dev/null +++ b/src/backends/fallback/fallback_device_api_ir_module.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +namespace luisa::compute::fallback { +[[nodiscard]] luisa::string_view fallback_backend_device_builtin_module() noexcept; +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_device_api_map_symbols.inl.h b/src/backends/fallback/fallback_device_api_map_symbols.inl.h new file mode 100644 index 000000000..429ba76eb --- /dev/null +++ b/src/backends/fallback/fallback_device_api_map_symbols.inl.h @@ -0,0 +1,26 @@ +map_symbol("luisa.texture2d.read.int.impl", &api::luisa_fallback_texture2d_read_int); +map_symbol("luisa.texture2d.read.uint.impl", &api::luisa_fallback_texture2d_read_uint); +map_symbol("luisa.texture2d.read.float.impl", &api::luisa_fallback_texture2d_read_float); +map_symbol("luisa.texture2d.write.float.impl", &api::luisa_fallback_texture2d_write_float); +map_symbol("luisa.texture2d.write.uint.impl", &api::luisa_fallback_texture2d_write_uint); +map_symbol("luisa.texture2d.write.int.impl", &api::luisa_fallback_texture2d_write_int); +map_symbol("luisa.texture3d.read.int.impl", &api::luisa_fallback_texture3d_read_int); +map_symbol("luisa.texture3d.read.uint.impl", &api::luisa_fallback_texture3d_read_uint); +map_symbol("luisa.texture3d.read.float.impl", &api::luisa_fallback_texture3d_read_float); +map_symbol("luisa.texture3d.write.float.impl", &api::luisa_fallback_texture3d_write_float); +map_symbol("luisa.texture3d.write.uint.impl", &api::luisa_fallback_texture3d_write_uint); +map_symbol("luisa.texture3d.write.int.impl", &api::luisa_fallback_texture3d_write_int); +map_symbol("luisa.bindless.texture2d.sample.impl", &api::luisa_fallback_bindless_texture2d_sample); +map_symbol("luisa.bindless.texture2d.sample.level.impl", &api::luisa_fallback_bindless_texture2d_sample_level); +map_symbol("luisa.bindless.texture2d.sample.grad.impl", &api::luisa_fallback_bindless_texture2d_sample_grad); +map_symbol("luisa.bindless.texture2d.sample.grad.level.impl", &api::luisa_fallback_bindless_texture2d_sample_grad_level); +map_symbol("luisa.bindless.texture3d.sample.impl", &api::luisa_fallback_bindless_texture3d_sample); +map_symbol("luisa.bindless.texture3d.sample.level.impl", &api::luisa_fallback_bindless_texture3d_sample_level); +map_symbol("luisa.bindless.texture3d.sample.grad.impl", &api::luisa_fallback_bindless_texture3d_sample_grad); +map_symbol("luisa.bindless.texture3d.sample.grad.level.impl", &api::luisa_fallback_bindless_texture3d_sample_grad_level); +map_symbol("luisa.bindless.texture2d.read.impl", &api::luisa_fallback_bindless_texture2d_read); +map_symbol("luisa.bindless.texture3d.read.impl", &api::luisa_fallback_bindless_texture3d_read); +map_symbol("luisa.bindless.texture2d.read.level.impl", &api::luisa_fallback_bindless_texture2d_read_level); +map_symbol("luisa.bindless.texture3d.read.level.impl", &api::luisa_fallback_bindless_texture3d_read_level); +map_symbol("luisa.accel.trace.closest.impl", &api::luisa_fallback_accel_trace_closest); +map_symbol("luisa.accel.trace.any.impl", &api::luisa_fallback_accel_trace_any); diff --git a/src/backends/fallback/fallback_embree.h b/src/backends/fallback/fallback_embree.h index 442aea34f..a7ae0899b 100644 --- a/src/backends/fallback/fallback_embree.h +++ b/src/backends/fallback/fallback_embree.h @@ -15,3 +15,24 @@ #else #include #endif + +#include + +namespace luisa::compute::fallback { + +inline void luisa_fallback_accel_set_flags(RTCScene scene, const AccelOption &option) noexcept { + auto scene_flags = 0u; + if (option.allow_compaction) { scene_flags |= RTC_SCENE_FLAG_COMPACT; } + if (option.allow_update) { scene_flags |= RTC_SCENE_FLAG_DYNAMIC; } + rtcSetSceneFlags(scene, static_cast(scene_flags)); + switch (option.hint) { + case AccelOption::UsageHint::FAST_TRACE: + rtcSetSceneBuildQuality(scene, RTC_BUILD_QUALITY_HIGH); + break; + case AccelOption::UsageHint::FAST_BUILD: + rtcSetSceneBuildQuality(scene, RTC_BUILD_QUALITY_MEDIUM); + break; + } +} + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_mesh.cpp b/src/backends/fallback/fallback_mesh.cpp index 0eda5f6a0..7112693bb 100644 --- a/src/backends/fallback/fallback_mesh.cpp +++ b/src/backends/fallback/fallback_mesh.cpp @@ -2,55 +2,38 @@ // Created by Mike Smith on 2022/2/11. // +#include + +#include "fallback_buffer.h" #include "fallback_mesh.h" namespace luisa::compute::fallback { -FallbackMesh::FallbackMesh( - RTCDevice device, AccelUsageHint hint) noexcept +FallbackMesh::FallbackMesh(RTCDevice device, const AccelOption &option) noexcept : _handle{rtcNewScene(device)}, - _geometry{rtcNewGeometry(device, RTC_GEOMETRY_TYPE_TRIANGLE)}, _hint{hint} -{ + _geometry{rtcNewGeometry(device, RTC_GEOMETRY_TYPE_TRIANGLE)} { + luisa_fallback_accel_set_flags(_handle, option); + rtcAttachGeometry(_handle, _geometry); + rtcReleaseGeometry(_geometry);// already moved into the scene } FallbackMesh::~FallbackMesh() noexcept { rtcReleaseScene(_handle); - rtcReleaseGeometry(_geometry); } -void FallbackMesh::commit(uint64_t v_buffer, size_t v_offset, size_t v_stride, size_t v_count, - uint64_t t_buffer, size_t t_offset, size_t t_count) noexcept { - _v_buffer = v_buffer; - _v_offset = v_offset; - _v_stride = v_stride; - _v_count = v_count; - _t_buffer = t_buffer; - _t_offset = t_offset; - _t_count = t_count; - - if (!_buffers_already_set.exchange(true)) [[unlikely]] { - rtcSetSharedGeometryBuffer( - _geometry, RTC_BUFFER_TYPE_VERTEX, 0u, RTC_FORMAT_FLOAT3, - reinterpret_cast(_v_buffer), - _v_offset, _v_stride, _v_count); - rtcSetSharedGeometryBuffer( - _geometry, RTC_BUFFER_TYPE_INDEX, 0u, RTC_FORMAT_UINT3, - reinterpret_cast(_t_buffer), - _t_offset, sizeof(Triangle), _t_count); - switch (_hint) { - case AccelUsageHint::FAST_TRACE: - rtcSetGeometryBuildQuality(_geometry, RTC_BUILD_QUALITY_HIGH); - break; - case AccelUsageHint::FAST_BUILD: - rtcSetGeometryBuildQuality(_geometry, RTC_BUILD_QUALITY_REFIT); - break; - } - rtcAttachGeometry(_handle, _geometry); - rtcSetSceneBuildQuality(_handle, RTC_BUILD_QUALITY_HIGH); - rtcSetSceneFlags(_handle, RTC_SCENE_FLAG_COMPACT); - } +void FallbackMesh::build(luisa::unique_ptr cmd) noexcept { + auto v_buffer = reinterpret_cast(cmd->vertex_buffer())->data(); + auto t_buffer = reinterpret_cast(cmd->triangle_buffer())->data(); + LUISA_DEBUG_ASSERT(cmd->vertex_buffer_size() % cmd->vertex_stride() == 0u, "Invalid vertex buffer size."); + LUISA_DEBUG_ASSERT(cmd->triangle_buffer_size() % sizeof(Triangle) == 0u, "Invalid triangle buffer size."); + auto v_count = cmd->vertex_buffer_size() / cmd->vertex_stride(); + auto t_count = cmd->triangle_buffer_size() / sizeof(Triangle); + rtcSetSharedGeometryBuffer(_geometry, RTC_BUFFER_TYPE_VERTEX, 0u, RTC_FORMAT_FLOAT3, + v_buffer, cmd->vertex_buffer_offset(), cmd->vertex_stride(), v_count); + rtcSetSharedGeometryBuffer(_geometry, RTC_BUFFER_TYPE_INDEX, 0u, RTC_FORMAT_UINT3, + t_buffer, cmd->triangle_buffer_offset(), sizeof(Triangle), t_count); rtcCommitGeometry(_geometry); rtcCommitScene(_handle); } -}// namespace luisa::compute::llvm +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_mesh.h b/src/backends/fallback/fallback_mesh.h index dc24a97a2..d6f161b2f 100644 --- a/src/backends/fallback/fallback_mesh.h +++ b/src/backends/fallback/fallback_mesh.h @@ -14,24 +14,12 @@ class FallbackMesh { private: RTCScene _handle; RTCGeometry _geometry; - uint64_t _v_buffer; - uint64_t _v_offset; - uint64_t _v_stride; - uint64_t _v_count; - uint64_t _t_buffer; - uint64_t _t_offset; - uint64_t _t_count; - AccelUsageHint _hint; - std::atomic_bool _buffers_already_set{false}; public: - FallbackMesh(RTCDevice device, AccelUsageHint hint) noexcept; + FallbackMesh(RTCDevice device, const AccelOption &option) noexcept; ~FallbackMesh() noexcept; - [[nodiscard]] auto vertex_buffer() const noexcept { return _v_buffer; } - [[nodiscard]] auto triangle_buffer() const noexcept { return _t_buffer; } [[nodiscard]] auto handle() const noexcept { return _handle; } - void commit(uint64_t v_buffer, size_t v_offset, size_t v_stride, size_t v_count, - uint64_t t_buffer, size_t t_offset, size_t t_count) noexcept; + void build(luisa::unique_ptr cmd) noexcept; }; }// namespace luisa::compute::llvm diff --git a/src/backends/fallback/fallback_shader.cpp b/src/backends/fallback/fallback_shader.cpp index 0e4f8ddb5..44c910008 100644 --- a/src/backends/fallback/fallback_shader.cpp +++ b/src/backends/fallback/fallback_shader.cpp @@ -1,49 +1,99 @@ // // Created by swfly on 2024/11/21. // - -#include "fallback_shader.h" - -#include "fallback_buffer.h" - -#include -#include -#include -#include -#include +#include #include #include #include #include +#include +#include #include #include #include -#include #include +#include + +#include +#include +#include +#include +#include +#include + +#include "../common/shader_print_formatter.h" #include "fallback_codegen.h" #include "fallback_texture.h" #include "fallback_accel.h" #include "fallback_bindless_array.h" -#include "thread_pool.h" +#include "fallback_shader.h" +#include "fallback_buffer.h" +#include "fallback_command_queue.h" +#include "fallback_device_api.h" +#include "fallback_device_api_ir_module.h" + +namespace luisa::compute::fallback { + +[[nodiscard]] static luisa::half luisa_fallback_asin_f16(luisa::half x) noexcept { return ::half_float::asin(x); } +[[nodiscard]] static float luisa_fallback_asin_f32(float x) noexcept { return std::asin(x); } +[[nodiscard]] static double luisa_fallback_asin_f64(double x) noexcept { return std::asin(x); } + +[[nodiscard]] static luisa::half luisa_fallback_acos_f16(luisa::half x) noexcept { return ::half_float::acos(x); } +[[nodiscard]] static float luisa_fallback_acos_f32(float x) noexcept { return std::acos(x); } +[[nodiscard]] static double luisa_fallback_acos_f64(double x) noexcept { return std::acos(x); } + +[[nodiscard]] static luisa::half luisa_fallback_atan_f16(luisa::half x) noexcept { return ::half_float::atan(x); } +[[nodiscard]] static float luisa_fallback_atan_f32(float x) noexcept { return std::atan(x); } +[[nodiscard]] static double luisa_fallback_atan_f64(double x) noexcept { return std::atan(x); } + +[[nodiscard]] static luisa::half luisa_fallback_atan2_f16(luisa::half a, luisa::half b) noexcept { return ::half_float::atan2(a, b); } +[[nodiscard]] static float luisa_fallback_atan2_f32(float a, float b) noexcept { return std::atan2(a, b); } +[[nodiscard]] static double luisa_fallback_atan2_f64(double a, double b) noexcept { return std::atan2(a, b); } + +static void luisa_fallback_assert(bool condition, const char *message) noexcept { + if (!condition) { LUISA_ERROR_WITH_LOCATION("Assertion failed: {}.", message); } +} + +static thread_local const DeviceInterface::StreamLogCallback *current_device_log_callback{nullptr}; + +static void luisa_fallback_print(const FallbackShader *shader, size_t fmt_id, const std::byte *args) noexcept { + static thread_local luisa::string scratch; + scratch.clear(); + auto formatter = shader->print_formatter(fmt_id); + (*formatter)(scratch, {args, formatter->size()}); + if (current_device_log_callback) { + (*current_device_log_callback)(scratch); + } else { + LUISA_INFO("[DEVICE] {}", scratch); + } +} + +struct FallbackShaderLaunchConfig { + uint3 block_id; + uint3 dispatch_size; + uint3 block_size; +}; -using namespace luisa; -luisa::compute::fallback::FallbackShader::FallbackShader(const luisa::compute::ShaderOption &option, luisa::compute::Function kernel) noexcept { +FallbackShader::FallbackShader(const ShaderOption &option, Function kernel) noexcept { // build JIT engine ::llvm::orc::LLJITBuilder jit_builder; if (auto host = ::llvm::orc::JITTargetMachineBuilder::detectHost()) { ::llvm::TargetOptions options; - options.AllowFPOpFusion = ::llvm::FPOpFusion::Fast; - options.UnsafeFPMath = true; - options.NoInfsFPMath = true; - options.NoNaNsFPMath = true; + if (option.enable_fast_math) { + options.UnsafeFPMath = true; + options.NoInfsFPMath = true; + options.NoNaNsFPMath = true; + options.NoSignedZerosFPMath = true; + options.ApproxFuncFPMath = true; + } options.NoTrappingFPMath = true; - options.NoSignedZerosFPMath = true; - options.ApproxFuncFPMath = true; - options.EnableIPRA = true; + options.AllowFPOpFusion = ::llvm::FPOpFusion::Fast; + options.EnableIPRA = false;// true causes crash options.StackSymbolOrdering = true; + options.TrapUnreachable = false; options.EnableMachineFunctionSplitter = true; options.EnableMachineOutliner = true; options.NoTrapAfterNoreturn = true; @@ -82,64 +132,117 @@ luisa::compute::fallback::FallbackShader::FallbackShader(const luisa::compute::S LUISA_ERROR_WITH_LOCATION("Failed to create LLJIT."); } - // map symbols - llvm::orc::SymbolMap symbol_map{}; - auto map_symbol = [jit = _jit.get(), &symbol_map](const char *name, T *f) noexcept { - static_assert(std::is_function_v); - auto addr = llvm::orc::ExecutorAddr::fromPtr(f); - auto symbol = llvm::orc::ExecutorSymbolDef{addr, llvm::JITSymbolFlags::Exported}; - symbol_map.try_emplace(jit->mangleAndIntern(name), symbol); - }; - map_symbol("texture.write.2d.float", &texture_write_2d_float_wrapper); - map_symbol("texture.read.2d.float", &texture_read_2d_float_wrapper); - map_symbol("texture.write.2d.uint", &texture_write_2d_uint_wrapper); - map_symbol("texture.read.2d.uint", &texture_read_2d_uint_wrapper); - - map_symbol("intersect.closest", &intersect_closest_wrapper); - - map_symbol("bindless.buffer.read", &bindless_buffer_read); - if (auto error = _jit->getMainJITDylib().define( - ::llvm::orc::absoluteSymbols(std::move(symbol_map)))) { - ::llvm::handleAllErrors(std::move(error), [](const ::llvm::ErrorInfoBase &err) { - LUISA_WARNING_WITH_LOCATION("LLJIT::define(): {}", err.message()); - }); - LUISA_ERROR_WITH_LOCATION("Failed to define symbols."); - } - - if (auto generator = ::llvm::orc::DynamicLibrarySearchGenerator::GetForCurrentProcess( - _jit->getDataLayout().getGlobalPrefix())) { - _jit->getMainJITDylib().addGenerator(std::move(generator.get())); - } else { - ::llvm::handleAllErrors(generator.takeError(), [](const ::llvm::ErrorInfoBase &err) { - LUISA_WARNING_WITH_LOCATION("DynamicLibrarySearchGenerator::GetForCurrentProcess(): {}", err.message()); - }); - LUISA_ERROR_WITH_LOCATION("Failed to add generator."); - } + // if (auto generator = ::llvm::orc::DynamicLibrarySearchGenerator::GetForCurrentProcess( + // _jit->getDataLayout().getGlobalPrefix())) { + // _jit->getMainJITDylib().addGenerator(std::move(generator.get())); + // } else { + // ::llvm::handleAllErrors(generator.takeError(), [](const ::llvm::ErrorInfoBase &err) { + // LUISA_WARNING_WITH_LOCATION("DynamicLibrarySearchGenerator::GetForCurrentProcess(): {}", err.message()); + // }); + // LUISA_ERROR_WITH_LOCATION("Failed to add generator."); + // } _block_size = kernel.block_size(); - build_bound_arguments(kernel); + _build_bound_arguments(kernel.bound_arguments()); + xir::Pool pool; xir::PoolGuard guard{&pool}; auto xir_module = xir::ast_to_xir_translate(kernel, {}); xir_module->set_name(luisa::format("kernel_{:016x}", kernel.hash())); if (!option.name.empty()) { xir_module->set_location(option.name); } - //LUISA_INFO("Kernel XIR:\n{}", xir::xir_to_text_translate(xir_module, true)); + // LUISA_INFO("Kernel XIR:\n{}", xir::xir_to_text_translate(xir_module, true)); auto llvm_ctx = std::make_unique(); - auto llvm_module = luisa_fallback_backend_codegen(*llvm_ctx, xir_module); + auto builtin_module = fallback_backend_device_builtin_module(); + llvm::SMDiagnostic parse_error; + auto llvm_module = llvm::parseIR(llvm::MemoryBufferRef{builtin_module, ""}, parse_error, *llvm_ctx); if (!llvm_module) { - LUISA_ERROR_WITH_LOCATION("Failed to generate LLVM IR."); + LUISA_ERROR_WITH_LOCATION("Failed to generate LLVM IR: {}.", + luisa::string_view{parse_error.getMessage()}); } + auto codegen_feedback = luisa_fallback_backend_codegen(*llvm_ctx, llvm_module.get(), xir_module); //llvm_module->print(llvm::errs(), nullptr, true, true); //llvm_module->print(llvm::outs(), nullptr, true, true); if (llvm::verifyModule(*llvm_module, &llvm::errs())) { LUISA_ERROR_WITH_LOCATION("LLVM module verification failed."); } + // { + // llvm_module->print(llvm::errs(), nullptr, true, true); + // // std::error_code EC; + // // llvm::raw_fd_ostream file_stream("H:/abc.ll", EC, llvm::sys::fs::OF_None); + // // llvm_module->print(file_stream, nullptr, true, true); + // // file_stream.close(); + // } + + // map symbols + llvm::orc::SymbolMap symbol_map{}; + auto map_symbol = [jit = _jit.get(), &symbol_map](const char *name, T *f) noexcept { + auto addr = llvm::orc::ExecutorAddr::fromPtr(f); + auto symbol = llvm::orc::ExecutorSymbolDef{addr, llvm::JITSymbolFlags::Callable}; + symbol_map.try_emplace(jit->mangleAndIntern(name), symbol); + }; + +#include "fallback_device_api_map_symbols.inl.h" + + // asin, acos, atan, atan2 + map_symbol("luisa.asin.f16", &luisa_fallback_asin_f16); + map_symbol("luisa.asin.f32", &luisa_fallback_asin_f32); + map_symbol("luisa.asin.f64", &luisa_fallback_asin_f64); + map_symbol("luisa.acos.f16", &luisa_fallback_acos_f16); + map_symbol("luisa.acos.f32", &luisa_fallback_acos_f32); + map_symbol("luisa.acos.f64", &luisa_fallback_acos_f64); + map_symbol("luisa.atan.f16", &luisa_fallback_atan_f16); + map_symbol("luisa.atan.f32", &luisa_fallback_atan_f32); + map_symbol("luisa.atan.f64", &luisa_fallback_atan_f64); + map_symbol("luisa.atan2.f16", &luisa_fallback_atan2_f16); + map_symbol("luisa.atan2.f32", &luisa_fallback_atan2_f32); + map_symbol("luisa.atan2.f64", &luisa_fallback_atan2_f64); + + // assert + map_symbol("luisa.assert", &luisa_fallback_assert); + + // bind print instructions + if (!codegen_feedback.print_inst_map.empty()) { + map_symbol("luisa.print.context", this); + _print_formatters.reserve(codegen_feedback.print_inst_map.size()); + for (auto fmt_id = 0u; fmt_id < codegen_feedback.print_inst_map.size(); fmt_id++) { + auto &&[print_inst, llvm_symbol] = codegen_feedback.print_inst_map[fmt_id]; + map_symbol(llvm_symbol.c_str(), &luisa_fallback_print); + LUISA_INFO("Mapping print instruction #{}: \"{}\" -> {}", fmt_id, print_inst->format(), llvm_symbol); + llvm::SmallVector arg_types; + for (auto o : print_inst->operand_uses()) { + arg_types.emplace_back(o->value()->type()); + } + auto arg_pack_type = Type::structure(16u, arg_types); + _print_formatters.emplace_back(luisa::make_unique( + print_inst->format(), arg_pack_type, false)); + } + } + + // define symbols + if (auto error = _jit->getMainJITDylib().define( + ::llvm::orc::absoluteSymbols(std::move(symbol_map)))) { + ::llvm::handleAllErrors(std::move(error), [](const ::llvm::ErrorInfoBase &err) { + LUISA_WARNING_WITH_LOCATION("LLJIT::define(): {}", err.message()); + }); + LUISA_ERROR_WITH_LOCATION("Failed to define symbols."); + } // optimize llvm_module->setDataLayout(_target_machine->createDataLayout()); llvm_module->setTargetTriple(_target_machine->getTargetTriple().str()); + // add fast-math flags to instructions + for (auto &&f : *llvm_module) { + for (auto &&bb : f) { + for (auto &&inst : bb) { + if (llvm::isa(inst)) { + inst.setFast(option.enable_fast_math); + } + } + } + } + // optimize with the new pass manager ::llvm::LoopAnalysisManager LAM; ::llvm::FunctionAnalysisManager FAM; @@ -161,17 +264,58 @@ luisa::compute::fallback::FallbackShader::FallbackShader(const luisa::compute::S #if LLVM_VERSION_MAJOR >= 19 _target_machine->registerPassBuilderCallbacks(PB); #else - _target_machine->registerPassBuilderCallbacks(PB, false); + _target_machine->registerPassBuilderCallbacks(PB, true); #endif Clock clk; clk.tic(); auto MPM = PB.buildPerModuleDefaultPipeline(::llvm::OptimizationLevel::O3); MPM.run(*llvm_module, MAM); + LUISA_INFO("Optimized LLVM module in {} ms.", clk.toc()); if (::llvm::verifyModule(*llvm_module, &::llvm::errs())) { LUISA_ERROR_WITH_LOCATION("Failed to verify module."); } - //llvm_module->print(llvm::outs(), nullptr, true, true); + // { + // std::error_code EC; + // llvm::raw_fd_ostream file_stream("bbc.ll", EC, llvm::sys::fs::OF_None); + // llvm_module->print(file_stream, nullptr, true, true); + // file_stream.close(); + // } + // LUISA_INFO("Printing optimized LLVM module..."); + // llvm_module->print(llvm::outs(), nullptr, false, true); + + // print x64 assembly of llvm_module + if constexpr (false) { + auto asm_name = "kernel_" + std::to_string(kernel.hash()) + ".s"; + { + std::error_code EC; + llvm::raw_fd_ostream dest(asm_name, EC, llvm::sys::fs::OF_None); + llvm::legacy::PassManager pass; + + if (EC) { + LUISA_ERROR_WITH_LOCATION("Could not open file: {}", EC.message()); + } + + if (_target_machine->addPassesToEmitFile(pass, dest, nullptr, llvm::CodeGenFileType::AssemblyFile)) { + LUISA_ERROR_WITH_LOCATION("TheTargetMachine can't emit a file of this type"); + } + pass.run(*llvm_module); + dest.flush(); + } + + std::ifstream asm_file(asm_name); + if (asm_file.is_open()) { + std::stringstream buffer; + buffer << asm_file.rdbuf(); + LUISA_INFO("Kernel Assembly:\n{}", buffer.str()); + asm_file.close(); + if (std::remove(asm_name.c_str()) != 0) { + LUISA_WARNING_WITH_LOCATION("Failed to delete assembly file: {}", asm_name); + } + } else { + LUISA_ERROR_WITH_LOCATION("Failed to open assembly file: {}", asm_name); + } + } // compile to machine code auto m = llvm::orc::ThreadSafeModule(std::move(llvm_module), std::move(llvm_ctx)); @@ -188,48 +332,110 @@ luisa::compute::fallback::FallbackShader::FallbackShader(const luisa::compute::S } LUISA_ASSERT(addr, "JIT compilation failed with error [{}]"); _kernel_entry = addr->toPtr(); + + // compute argument buffer size + _argument_buffer_size = 0u; + static constexpr auto argument_alignment = 16u; + for (auto arg : kernel.arguments()) { + switch (arg.tag()) { + case Variable::Tag::LOCAL: { + _argument_buffer_size += arg.type()->size(); + _argument_buffer_size = luisa::align(_argument_buffer_size, argument_alignment); + break; + } + case Variable::Tag::BUFFER: { + _argument_buffer_size += sizeof(FallbackBufferView); + _argument_buffer_size = luisa::align(_argument_buffer_size, argument_alignment); + break; + } + case Variable::Tag::TEXTURE: { + _argument_buffer_size += sizeof(FallbackTextureView); + _argument_buffer_size = luisa::align(_argument_buffer_size, argument_alignment); + break; + } + case Variable::Tag::BINDLESS_ARRAY: { + _argument_buffer_size += sizeof(FallbackBindlessArray *); + _argument_buffer_size = luisa::align(_argument_buffer_size, argument_alignment); + break; + } + case Variable::Tag::ACCEL: { + _argument_buffer_size += sizeof(FallbackAccel *); + _argument_buffer_size = luisa::align(_argument_buffer_size, argument_alignment); + break; + } + default: LUISA_ERROR_WITH_LOCATION("Unsupported argument type."); + } + } } -void compute::fallback::FallbackShader::dispatch(ThreadPool &pool, const compute::ShaderDispatchCommand *command) const noexcept { - thread_local std::array argument_buffer;// should be enough +class FallbackShaderDispatchBuffer { + +public: + struct alignas(16) Config { + FallbackShader::kernel_entry_t *kernel; + std::array dispatch_size; + std::array block_size; + }; + +private: + static constexpr auto argument_buffer_offset = sizeof(Config);// grid size + std::byte *_data; +public: + FallbackShaderDispatchBuffer(size_t size) noexcept + : _data{luisa::allocate_with_allocator(argument_buffer_offset + size)} {} + ~FallbackShaderDispatchBuffer() noexcept { + if (_data != nullptr) { + luisa::deallocate_with_allocator(_data); + } + } + FallbackShaderDispatchBuffer(FallbackShaderDispatchBuffer &&other) noexcept + : _data{std::exchange(other._data, nullptr)} {} + FallbackShaderDispatchBuffer(const FallbackShaderDispatchBuffer &) = delete; + FallbackShaderDispatchBuffer &operator=(FallbackShaderDispatchBuffer &&) noexcept = delete; + FallbackShaderDispatchBuffer &operator=(const FallbackShaderDispatchBuffer &) = delete; + [[nodiscard]] auto argument_buffer() noexcept { return _data + argument_buffer_offset; } + [[nodiscard]] auto argument_buffer() const noexcept { return const_cast(this)->argument_buffer(); } + [[nodiscard]] auto config() noexcept { return reinterpret_cast(_data); } + [[nodiscard]] auto config() const noexcept { return const_cast(this)->config(); } +}; + +void FallbackShader::dispatch(FallbackCommandQueue *queue, luisa::unique_ptr command) noexcept { + + auto dispatch_size = command->dispatch_size(); + auto block_size = _block_size; + + FallbackShaderDispatchBuffer dispatch_buffer{_argument_buffer_size}; + auto dispatch_config = dispatch_buffer.config(); + dispatch_config->kernel = _kernel_entry; + dispatch_config->dispatch_size = {dispatch_size.x, dispatch_size.y, dispatch_size.z}; + dispatch_config->block_size = {block_size.x, block_size.y, block_size.z}; + + auto argument_buffer = dispatch_buffer.argument_buffer(); auto argument_buffer_offset = static_cast(0u); auto allocate_argument = [&](size_t bytes) noexcept { static constexpr auto alignment = 16u; auto offset = (argument_buffer_offset + alignment - 1u) / alignment * alignment; - LUISA_ASSERT(offset + bytes <= argument_buffer.size(), + LUISA_ASSERT(offset + bytes <= _argument_buffer_size, "Too many arguments in ShaderDispatchCommand"); argument_buffer_offset = offset + bytes; - return argument_buffer.data() + offset; + return argument_buffer + offset; }; - auto encode_argument = [&allocate_argument, command](const auto &arg) noexcept { + auto encode_argument = [&allocate_argument, &command](const auto &arg) noexcept { using Tag = ShaderDispatchCommand::Argument::Tag; switch (arg.tag) { case Tag::BUFFER: { - //What is indirect? - // if (reinterpret_cast(arg.buffer.handle)->is_indirect()) - // { - // auto buffer = reinterpret_cast(arg.buffer.handle); - // auto binding = buffer->binding(arg.buffer.offset, arg.buffer.size); - // auto ptr = allocate_argument(sizeof(binding)); - // std::memcpy(ptr, &binding, sizeof(binding)); - // } - // else - { - auto buffer = reinterpret_cast(arg.buffer.handle); - auto buffer_view = buffer->view(arg.buffer.offset); - //auto binding = buffer->binding(arg.buffer.offset, arg.buffer.size); - auto ptr = allocate_argument(sizeof(buffer_view)); - std::memcpy(ptr, &buffer, sizeof(buffer_view)); - } + auto buffer = reinterpret_cast(arg.buffer.handle); + auto buffer_view = buffer->view(arg.buffer.offset, arg.buffer.size); + auto ptr = allocate_argument(sizeof(buffer_view)); + std::memcpy(ptr, &buffer_view, sizeof(buffer_view)); break; } case Tag::TEXTURE: { auto texture = reinterpret_cast(arg.texture.handle); auto view = texture->view(arg.texture.level); auto ptr = allocate_argument(sizeof(view)); - FallbackTextureView *v = reinterpret_cast(ptr); std::memcpy(ptr, &view, sizeof(view)); break; } @@ -240,65 +446,58 @@ void compute::fallback::FallbackShader::dispatch(ThreadPool &pool, const compute break; } case Tag::BINDLESS_ARRAY: { - auto bindless = reinterpret_cast(arg.buffer.handle); - //auto binding = buffer->binding(arg.buffer.offset, arg.buffer.size); - auto ptr = allocate_argument(sizeof(bindless)); - std::memcpy(ptr, &bindless, sizeof(bindless)); + auto bindless = reinterpret_cast(arg.bindless_array.handle); + auto view = bindless->view(); + auto ptr = allocate_argument(sizeof(view)); + std::memcpy(ptr, &view, sizeof(view)); break; } case Tag::ACCEL: { auto accel = reinterpret_cast(arg.accel.handle); - auto ptr = allocate_argument(sizeof(accel)); - std::memcpy(ptr, &accel, sizeof(accel)); + auto view = accel->view(); + auto ptr = allocate_argument(sizeof(view)); + std::memcpy(ptr, &view, sizeof(view)); break; } + default: LUISA_ERROR_WITH_LOCATION("Unsupported argument type."); } }; for (auto &&arg : _bound_arguments) { encode_argument(arg); } for (auto &&arg : command->arguments()) { encode_argument(arg); } - struct LaunchConfig { - uint3 block_id; - uint3 dispatch_size; - uint3 block_size; - }; - // TODO: fill in true values - LaunchConfig config{ - .block_id = make_uint3(0u), - .dispatch_size = command->dispatch_size(), - .block_size = _block_size, - }; - auto round_up_division = [](unsigned a, unsigned b) { - return (a + b - 1) / b; + static constexpr auto roundup_div = [](auto a, auto b) noexcept { + return (a + b - 1u) / b; }; - auto dispatch_counts = make_uint3( - round_up_division(config.dispatch_size.x, _block_size.x), - round_up_division(config.dispatch_size.y, _block_size.y), - round_up_division(config.dispatch_size.z, _block_size.z)); - - auto data = argument_buffer.data(); - - // for (int i = 0; i < dispatch_counts.x; ++i) { - // for (int j = 0; j < dispatch_counts.y; ++j) { - // for (int k = 0; k < dispatch_counts.z; ++k) { - // auto c = config; - // c.block_id = make_uint3(i, j, k); - // (*_kernel_entry)(data, &c); - // } - // } - // } - pool.parallel(dispatch_counts.x, dispatch_counts.y, dispatch_counts.z, - [this, config, data](auto bx, auto by, auto bz) noexcept { - auto c = config; - c.block_id = make_uint3(bx, by, bz); - (*_kernel_entry)(data, &c); + auto grid_size = roundup_div(dispatch_size, block_size); + auto grid_count = grid_size.x * grid_size.y * grid_size.z; + + queue->enqueue_parallel(grid_count, [queue, dispatch_buffer = std::move(dispatch_buffer)](auto block) noexcept { + auto config = dispatch_buffer.config(); + auto dispatch_size = config->dispatch_size; + auto block_size = config->block_size; + auto grid_size_x = roundup_div(dispatch_size[0], block_size[0]); + auto grid_size_y = roundup_div(dispatch_size[1], block_size[1]); + auto bx = block % grid_size_x; + auto by = (block / grid_size_x) % grid_size_y; + auto bz = block / (grid_size_x * grid_size_y); + FallbackShaderLaunchConfig launch_config{ + .block_id = make_uint3(bx, by, bz), + .dispatch_size = {dispatch_size[0], dispatch_size[1], dispatch_size[2]}, + .block_size = {block_size[0], block_size[1], block_size[2]}, + }; + auto launch_params = dispatch_buffer.argument_buffer(); + current_device_log_callback = queue->log_callback() ? &queue->log_callback() : nullptr; + config->kernel(launch_params, &launch_config); + current_device_log_callback = nullptr; }); - pool.barrier(); } -void compute::fallback::FallbackShader::build_bound_arguments(compute::Function kernel) { - _bound_arguments.reserve(kernel.bound_arguments().size()); - for (auto &&arg : kernel.bound_arguments()) { + +FallbackShader::~FallbackShader() noexcept = default; + +void FallbackShader::_build_bound_arguments(luisa::span bindings) noexcept { + _bound_arguments.reserve(bindings.size()); + for (auto &&arg : bindings) { luisa::visit( [&](T binding) noexcept { ShaderDispatchCommand::Argument argument{}; @@ -325,3 +524,5 @@ void compute::fallback::FallbackShader::build_bound_arguments(compute::Function arg); } } + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_shader.h b/src/backends/fallback/fallback_shader.h index dc9ca64b8..844766a08 100644 --- a/src/backends/fallback/fallback_shader.h +++ b/src/backends/fallback/fallback_shader.h @@ -6,28 +6,27 @@ #include #include -#include #include #include -#include namespace llvm { class LLVMContext; class Module; class ExecutionEngine; +class TargetMachine; }// namespace llvm namespace llvm::orc { class LLJIT; }// namespace llvm::orc -namespace luisa -{ - class ThreadPool; -} + +namespace luisa::compute { +class ShaderPrintFormatter; +}// namespace luisa::compute namespace luisa::compute::fallback { -using luisa::compute::detail::FunctionBuilder; +class FallbackCommandQueue; class FallbackShader { @@ -39,27 +38,28 @@ class FallbackShader { luisa::unordered_map _argument_offsets; kernel_entry_t *_kernel_entry{nullptr}; size_t _argument_buffer_size{}; - //luisa::vector _callbacks; size_t _shared_memory_size{}; - unique_ptr _module{}; + luisa::unique_ptr _module{}; luisa::vector _bound_arguments; + luisa::vector> _print_formatters; uint3 _block_size; - mutable std::unique_ptr<::llvm::orc::LLJIT> _jit; + std::unique_ptr<::llvm::orc::LLJIT> _jit; std::unique_ptr<::llvm::TargetMachine> _target_machine; +private: + void _build_bound_arguments(luisa::span bindings) noexcept; - void build_bound_arguments(Function kernel); public: - - void dispatch(ThreadPool& pool, const ShaderDispatchCommand *command) const noexcept; + void dispatch(ThreadPool &pool, const ShaderDispatchCommand *command) const noexcept; + void dispatch(FallbackCommandQueue *queue, luisa::unique_ptr command) noexcept; FallbackShader(const ShaderOption &option, Function kernel) noexcept; ~FallbackShader() noexcept; [[nodiscard]] auto argument_buffer_size() const noexcept { return _argument_buffer_size; } [[nodiscard]] auto shared_memory_size() const noexcept { return _shared_memory_size; } - [[nodiscard]] size_t argument_offset(uint uid) const noexcept; - //[[nodiscard]] auto callbacks() const noexcept { return _callbacks.data(); } + [[nodiscard]] auto native_handle() const noexcept { return _kernel_entry; } + [[nodiscard]] auto print_formatter(size_t i) const noexcept -> const ShaderPrintFormatter * { return _print_formatters[i].get(); } }; }// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_stream.cpp b/src/backends/fallback/fallback_stream.cpp index 92cfe7ab5..42e276a8f 100644 --- a/src/backends/fallback/fallback_stream.cpp +++ b/src/backends/fallback/fallback_stream.cpp @@ -3,173 +3,143 @@ // #include +#include + #include "fallback_stream.h" #include "fallback_accel.h" #include "fallback_bindless_array.h" #include "fallback_mesh.h" #include "fallback_texture.h" #include "fallback_shader.h" +#include "fallback_buffer.h" namespace luisa::compute::fallback { -using std::max; - -void FallbackStream::dispatch(CommandList &&cmd_list) noexcept { - - auto cmds = cmd_list.steal_commands(); - - for (auto &&cmd : cmds) - { - for (;;) { - auto n = _pool.task_count(); - if (n < _pool.size() * 4u) { break; } - using namespace std::chrono_literals; - std::this_thread::sleep_for(50us); - } - cmd->accept(*this); - } - _pool.barrier(); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto temp_buffer = luisa::allocate_with_allocator(cmd->size()); + std::memcpy(temp_buffer, cmd->data(), cmd->size()); + auto dst = reinterpret_cast(cmd->handle())->view(cmd->offset(), cmd->size()); + queue()->enqueue([src = temp_buffer, dst] { + std::memcpy(dst.ptr, src, dst.size); + luisa::deallocate_with_allocator(src); + }); } -void FallbackStream::signal(LLVMEvent *event) noexcept { -// event->signal(_pool.async([] {})); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto src = reinterpret_cast(cmd->handle())->view(cmd->offset(), cmd->size()); + queue()->enqueue([dst = cmd->data(), src] { std::memcpy(dst, src.ptr, src.size); }); } -void FallbackStream::wait(LLVMEvent *event) noexcept { -// _pool.async([future = event->future()] { future.wait(); }); -// _pool.barrier(); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto src = reinterpret_cast(cmd->src_handle())->view(cmd->src_offset(), cmd->size()); + auto dst = reinterpret_cast(cmd->dst_handle())->view(cmd->dst_offset(), cmd->size()); + queue()->enqueue([src, dst = dst.ptr] { std::memcpy(dst, src.ptr, src.size); }); } -void FallbackStream::visit(const BufferUploadCommand *command) noexcept { - auto temp_buffer = luisa::make_shared>(command->size()); - std::memcpy(temp_buffer->data(), command->data(), command->size()); - _pool.async([src = std::move(temp_buffer), - buffer = command->handle(), offset = command->offset()] { - auto dst = reinterpret_cast(buffer + offset); - std::memcpy(dst, src->data(), src->size()); - }); - _pool.barrier(); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto buffer = reinterpret_cast(cmd->buffer()); + auto texture = reinterpret_cast(cmd->texture()); + auto src = buffer->view_with_offset(cmd->buffer_offset()); + auto dst = texture->view(cmd->level()); + queue()->enqueue([src, dst] { dst.copy_from(src.ptr); }); } -void FallbackStream::visit(const BufferDownloadCommand *command) noexcept { - _pool.async([cmd = *command] { - auto src = reinterpret_cast(cmd.handle() + cmd.offset()); - std::memcpy(cmd.data(), src, cmd.size()); - }); - _pool.barrier(); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto shader = reinterpret_cast(cmd->handle()); + shader->dispatch(queue(), std::move(cmd)); } -void FallbackStream::visit(const BufferCopyCommand *command) noexcept { - _pool.async([cmd = *command] { - auto src = reinterpret_cast(cmd.src_handle() + cmd.src_offset()); - auto dst = reinterpret_cast(cmd.dst_handle() + cmd.dst_offset()); - std::memcpy(dst, src, cmd.size()); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto tex = reinterpret_cast(cmd->handle())->view(cmd->level()); + auto byte_size = pixel_storage_size(tex.storage(), tex.size3d()); + auto temp_buffer = luisa::allocate_with_allocator(byte_size); + std::memcpy(temp_buffer, cmd->data(), byte_size); + queue()->enqueue([tex, temp_buffer] { + auto byte_size = pixel_storage_size(tex.storage(), tex.size3d()); + std::memcpy(const_cast(tex.data()), temp_buffer, byte_size); + luisa::deallocate_with_allocator(temp_buffer); }); - _pool.barrier(); } -void FallbackStream::visit(const BufferToTextureCopyCommand *command) noexcept { -// _pool.async([cmd = *command] { -// auto src = reinterpret_cast(cmd.buffer() + cmd.buffer_offset()); -// auto tex = reinterpret_cast(cmd.texture())->view(cmd.level()); -// tex.copy_from(src); -// }); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto tex = reinterpret_cast(cmd->handle())->view(cmd->level()); + queue()->enqueue([=, dst = cmd->data()] { tex.copy_to(dst); }); } -//extern "C" void llvm_callback_dispatch(const CpuCallback *callbacks, void *arg, void *user_data, uint32_t callback_id) noexcept { -// callbacks[callback_id].callback(arg, user_data); -//} - -void FallbackStream::visit(const ShaderDispatchCommand *command) noexcept -{ - auto shader = reinterpret_cast(command->handle()); - shader->dispatch(_pool, command); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto src_tex = reinterpret_cast(cmd->src_handle())->view(cmd->src_level()); + auto dst_tex = reinterpret_cast(cmd->dst_handle())->view(cmd->dst_level()); + queue()->enqueue([=] { dst_tex.copy_from(src_tex); }); } -void FallbackStream::visit(const TextureUploadCommand *command) noexcept { +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + auto src = reinterpret_cast(cmd->texture())->view(cmd->level()); + auto dst = reinterpret_cast(cmd->buffer())->view_with_offset(cmd->buffer_offset()); + queue()->enqueue([src, dst = dst.ptr] { src.copy_to(dst); }); +} - auto tex = reinterpret_cast(command->handle())->view(command->level()); - auto byte_size = pixel_storage_size(tex.storage(), tex.size3d()); - auto temp_buffer = luisa::make_shared>(byte_size); - std::memcpy(temp_buffer->data(), command->data(), byte_size); - _pool.async([cmd = *command, temp_buffer = std::move(temp_buffer)] { - auto tex = reinterpret_cast(cmd.handle())->view(cmd.level()); - auto byte_size = pixel_storage_size(tex.storage(), tex.size3d()); - std::memcpy(const_cast(tex.data()), temp_buffer->data(), byte_size); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + queue()->enqueue([cmd = std::move(cmd)]() mutable noexcept { + auto accel = reinterpret_cast(cmd->handle()); + accel->build(std::move(cmd)); }); - _pool.barrier(); } -void FallbackStream::visit(const TextureDownloadCommand *command) noexcept { - _pool.async([cmd = *command] { - auto tex = reinterpret_cast(cmd.handle())->view(cmd.level()); - tex.copy_to(cmd.data()); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + queue()->enqueue([cmd = std::move(cmd)]() mutable noexcept { + auto mesh = reinterpret_cast(cmd->handle()); + mesh->build(std::move(cmd)); }); - _pool.barrier(); } -void FallbackStream::visit(const TextureCopyCommand *command) noexcept { - _pool.async([cmd = *command] { - auto src_tex = reinterpret_cast(cmd.src_handle())->view(cmd.src_level()); - auto dst_tex = reinterpret_cast(cmd.dst_handle())->view(cmd.dst_level()); - dst_tex.copy_from(src_tex); - }); - _pool.barrier(); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + LUISA_NOT_IMPLEMENTED(); } -void FallbackStream::visit(const TextureToBufferCopyCommand *command) noexcept { - _pool.async([cmd = *command] { - auto tex = reinterpret_cast(cmd.texture())->view(cmd.level()); - auto dst = reinterpret_cast(cmd.buffer() + cmd.buffer_offset()); - tex.copy_to(dst); - }); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + LUISA_NOT_IMPLEMENTED(); } -void FallbackStream::visit(const AccelBuildCommand *command) noexcept { - auto accel = reinterpret_cast(command->handle()); - accel->build(_pool, command->instance_count(), command->modifications()); - _pool.barrier(); -} - -void FallbackStream::visit(const MeshBuildCommand *command) noexcept { - auto v_b = command->vertex_buffer(); - auto v_b_o = command->vertex_buffer_offset(); - auto v_s = command->vertex_stride(); - auto v_b_s = command->vertex_buffer_size(); - auto v_b_c = v_b_s/v_s; - auto t_b = command->triangle_buffer(); - auto t_b_o = command->triangle_buffer_offset(); - auto t_b_s = command->triangle_buffer_size(); - auto t_b_c = t_b_s/12u; - _pool.async([=,mesh = reinterpret_cast(command->handle())] - { - mesh->commit(v_b, v_b_o, v_s, v_b_c, t_b, t_b_o, t_b_c); +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + LUISA_NOT_IMPLEMENTED(); +} + +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + queue()->enqueue([cmd = std::move(cmd)]() mutable noexcept { + auto bindless = reinterpret_cast(cmd->handle()); + bindless->update(std::move(cmd)); }); - _pool.barrier(); } -void FallbackStream::visit(const BindlessArrayUpdateCommand *command) noexcept { +void FallbackStream::_enqueue(luisa::unique_ptr cmd) noexcept { + LUISA_NOT_IMPLEMENTED(); +} - reinterpret_cast(command->handle())->update(_pool, command->modifications()); +void FallbackStream::dispatch(CommandList &&cmd_list) noexcept { + auto cmds = cmd_list.steal_commands(); + for (auto &&cmd : cmds) { +#define LUISA_FALLBACK_STREAM_CAST_AND_ENQUEUE_COMMAND_CASE(COMMAND_TYPE) \ + case Command::Tag::E##COMMAND_TYPE: { \ + auto derived_cmd = static_cast(cmd.release()); \ + _enqueue(luisa::unique_ptr{derived_cmd}); \ + break; \ + } + switch (cmd->tag()) { + LUISA_MAP(LUISA_FALLBACK_STREAM_CAST_AND_ENQUEUE_COMMAND_CASE, + LUISA_COMPUTE_RUNTIME_COMMANDS) + } +#undef LUISA_FALLBACK_STREAM_CAST_AND_ENQUEUE_COMMAND_CASE + } + dispatch([callbacks = cmd_list.steal_callbacks()] { + for (auto &&cb : callbacks) { cb(); } + }); } void FallbackStream::dispatch(luisa::move_only_function &&f) noexcept { -// auto ptr = new_with_allocator>(std::move(f)); -// _pool.async([ptr] { -// (*ptr)(); -// delete_with_allocator(ptr); -// }); -// _pool.barrier(); -} -FallbackStream::FallbackStream() noexcept { -} -void FallbackStream::visit(const CurveBuildCommand *command) noexcept { -} -void FallbackStream::visit(const ProceduralPrimitiveBuildCommand *command) noexcept { -} -void FallbackStream::visit(const MotionInstanceBuildCommand *command) noexcept { -} -void FallbackStream::visit(const CustomCommand *command) noexcept { + queue()->enqueue(std::move(f)); } -}// namespace luisa::compute::llvm +FallbackStream::FallbackStream(size_t in_flight_limit) noexcept + : _queue{in_flight_limit, 0u} {} + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_stream.h b/src/backends/fallback/fallback_stream.h index 3d7641e76..c601ea4c1 100644 --- a/src/backends/fallback/fallback_stream.h +++ b/src/backends/fallback/fallback_stream.h @@ -4,51 +4,28 @@ #pragma once -#include "thread_pool.h" #include +#include "fallback_command_queue.h" namespace luisa::compute::fallback { -class LLVMEvent; - -/** - * @brief Stream of LLVM - * - */ -class FallbackStream final : public CommandVisitor { +class FallbackStream final { private: - ThreadPool _pool; + FallbackCommandQueue _queue; + +#define LUISA_FALLBACK_STREAM_ENQUEUE_COMMAND_DECL(COMMAND_TYPE) \ + void _enqueue(luisa::unique_ptr cmd) noexcept; + LUISA_MAP(LUISA_FALLBACK_STREAM_ENQUEUE_COMMAND_DECL, LUISA_COMPUTE_RUNTIME_COMMANDS) +#undef LUISA_FALLBACK_STREAM_ENQUEUE_COMMAND_DECL public: - FallbackStream() noexcept; - void synchronize() noexcept - { - _pool.synchronize(); - } + explicit FallbackStream(size_t queue_size = 8u) noexcept; + ~FallbackStream() noexcept = default; + [[nodiscard]] auto queue() noexcept { return &_queue; } + void synchronize() noexcept { _queue.synchronize(); } void dispatch(CommandList &&cmd_list) noexcept; void dispatch(luisa::move_only_function &&f) noexcept; - void signal(LLVMEvent *event) noexcept; - void wait(LLVMEvent *event) noexcept; - -public: - void visit(const BufferUploadCommand *command) noexcept override; - void visit(const BufferDownloadCommand *command) noexcept override; - void visit(const BufferCopyCommand *command) noexcept override; - void visit(const BufferToTextureCopyCommand *command) noexcept override; - void visit(const ShaderDispatchCommand *command) noexcept override; - void visit(const TextureUploadCommand *command) noexcept override; - void visit(const TextureDownloadCommand *command) noexcept override; - void visit(const TextureCopyCommand *command) noexcept override; - void visit(const TextureToBufferCopyCommand *command) noexcept override; - void visit(const AccelBuildCommand *command) noexcept override; - void visit(const MeshBuildCommand *command) noexcept override; - void visit(const BindlessArrayUpdateCommand *command) noexcept override; - void visit(const CurveBuildCommand *command) noexcept override; - void visit(const ProceduralPrimitiveBuildCommand *command) noexcept override; - void visit(const MotionInstanceBuildCommand *command) noexcept override; - void visit(const CustomCommand *command) noexcept override; - ~FallbackStream() noexcept override = default; }; -}// namespace luisa::compute::llvm +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_swapchain.cpp b/src/backends/fallback/fallback_swapchain.cpp new file mode 100644 index 000000000..53ab726ee --- /dev/null +++ b/src/backends/fallback/fallback_swapchain.cpp @@ -0,0 +1,47 @@ +// +// Created by swfly on 2024/12/2. +// + +#include + +#include "fallback_swapchain.h" +#include "fallback_texture.h" +#include "fallback_stream.h" + +extern "C" { +void *luisa_compute_create_cpu_swapchain(uint64_t display_handle, uint64_t window_handle, + unsigned width, unsigned height, bool allow_hdr, bool vsync, + unsigned back_buffer_count) noexcept; +uint8_t luisa_compute_cpu_swapchain_storage(void *swapchain) noexcept; +void *luisa_compute_cpu_swapchain_native_handle(void *swapchain) noexcept; +void luisa_compute_destroy_cpu_swapchain(void *swapchain) noexcept; +void luisa_compute_cpu_swapchain_present(void *swapchain, const void *pixels, uint64_t size) noexcept; +void luisa_compute_cpu_swapchain_present_with_callback(void *swapchain, void *ctx, void (*blit)(void *ctx, void *mapped_pixels)) noexcept; +} + +namespace luisa::compute::fallback { + +FallbackSwapchain::FallbackSwapchain(FallbackStream *bound_stream, + const SwapchainOption &option) noexcept + : _bound_stream{bound_stream} { + _handle = luisa_compute_create_cpu_swapchain(option.display, option.window, + option.size.x, option.size.y, + option.wants_hdr, option.wants_vsync, + option.back_buffer_count); + size = option.size; +} + +FallbackSwapchain::~FallbackSwapchain() noexcept { + luisa_compute_destroy_cpu_swapchain(_handle); +} + +void FallbackSwapchain::present(FallbackStream *stream, FallbackTexture *frame) { + LUISA_ASSERT(stream == _bound_stream, "Stream mismatch."); + stream->queue()->enqueue([handle = this->_handle, frame] { + auto view = frame->view(0); + luisa_compute_cpu_swapchain_present(handle, view.data(), view.size_bytes()); + }); + stream->synchronize(); +} + +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_swapchain.h b/src/backends/fallback/fallback_swapchain.h new file mode 100644 index 000000000..ebc731822 --- /dev/null +++ b/src/backends/fallback/fallback_swapchain.h @@ -0,0 +1,27 @@ +// +// Created by swfly on 2024/12/2. +// + +#pragma once + +#include + +namespace luisa::compute::fallback { + +class FallbackTexture; +class FallbackStream; + +class FallbackSwapchain { +private: + FallbackStream *_bound_stream; + void *_handle; + luisa::uint2 size; + +public: + FallbackSwapchain(FallbackStream *bound_stream, + const SwapchainOption &option) noexcept; + ~FallbackSwapchain() noexcept; + void present(FallbackStream *stream, FallbackTexture *frame); +}; + +}// namespace luisa::compute::fallback \ No newline at end of file diff --git a/src/backends/fallback/fallback_texture.cpp b/src/backends/fallback/fallback_texture.cpp index 43b84d886..498b288f9 100644 --- a/src/backends/fallback/fallback_texture.cpp +++ b/src/backends/fallback/fallback_texture.cpp @@ -67,92 +67,6 @@ void FallbackTextureView::copy_from(FallbackTextureView dst) const noexcept { namespace detail { -[[nodiscard]] inline auto decode_texture_view(int64_t t0, int64_t t1) noexcept { - return luisa::bit_cast(std::array{t0, t1}); -} - -// from tinyexr: https://github.com/syoyo/tinyexr/blob/master/tinyexr.h -float16_t float_to_half(float f) noexcept { -#if defined(LUISA_ARCH_ARM64) - return static_cast(f); -#elif defined(LUISA_ARCH_X86_64) - auto ss = _mm_set_ss(f); - auto ph = _mm_cvtps_ph(ss, 0); - return static_cast(_mm_cvtsi128_si32(ph)); -#else - auto bits = luisa::bit_cast(f); - auto fp32_sign = bits >> 31u; - auto fp32_exponent = (bits >> 23u) & 0xffu; - auto fp32_mantissa = bits & ((1u << 23u) - 1u); - auto make_fp16 = [](uint sign, uint exponent, uint mantissa) noexcept { - return static_cast((sign << 15u) | (exponent << 10u) | mantissa); - }; - // Signed zero/denormal (which will underflow) - if (fp32_exponent == 0u) { return make_fp16(fp32_sign, 0u, 0u); } - // Inf or NaN (all exponent bits set) - if (fp32_exponent == 255u) { - return make_fp16( - fp32_sign, 31u, - // NaN->qNaN and Inf->Inf - fp32_mantissa ? 0x200u : 0u); - } - // Exponent unbias the single, then bias the halfp - auto newexp = static_cast(fp32_exponent - 127u + 15u); - // Overflow, return signed infinity - if (newexp >= 31) { return make_fp16(fp32_sign, 31u, 0u); } - // Underflow - if (newexp <= 0) { - if ((14 - newexp) > 24) { return 0u; } - // Mantissa might be non-zero - unsigned int mant = fp32_mantissa | 0x800000u;// Hidden 1 bit - auto fp16 = make_fp16(fp32_sign, 0u, mant >> (14u - newexp)); - if ((mant >> (13u - newexp)) & 1u) { fp16++; }// Check for rounding - return fp16; - } - auto fp16 = make_fp16(fp32_sign, newexp, fp32_mantissa >> 13u); - if (fp32_mantissa & 0x1000u) { fp16++; }// Check for rounding - return fp16; -#endif -} - -float half_to_float(float16_t half) noexcept { -#if defined(LUISA_ARCH_ARM64) - return static_cast(half); -#elif defined(LUISA_ARCH_X86_64) - auto si = _mm_cvtsi32_si128(half); - auto ps = _mm_cvtph_ps(si); - return _mm_cvtss_f32(ps); -#else - static_assert(std::endian::native == std::endian::little, - "Only little endian is supported"); - auto h = static_cast(half); - union FP32 { - unsigned int u; - float f; - struct {// FIXME: assuming little endian here - unsigned int Mantissa : 23; - unsigned int Exponent : 8; - unsigned int Sign : 1; - } s; - }; - constexpr auto magic = FP32{113u << 23u}; - constexpr auto shifted_exp = 0x7c00u << 13u;// exponent mask after shift - auto o = FP32{(h & 0x7fffu) << 13u}; // exponent/mantissa bits - auto exp_ = shifted_exp & o.u; // just the exponent - o.u += (127u - 15u) << 23u; // exponent adjust - - // handle exponent special cases - if (exp_ == shifted_exp) { // Inf/NaN? - o.u += (128u - 16u) << 23u;// extra exp adjust - } else if (exp_ == 0u) { // Zero/Denormal? - o.u += 1u << 23u; // extra exp adjust - o.f -= magic.f; // renormalize - } - o.u |= (h & 0x8000u) << 16u;// sign bit - return o.f; -#endif -} - // MIP-Map EWA filtering LUT from PBRT-v4 static constexpr const std::array ewa_filter_weight_lut{ 0.8646647330f, 0.8490400310f, 0.8336595300f, 0.8185192940f, 0.8036156300f, 0.78894478100f, 0.7745032310f, 0.7602872850f, @@ -175,10 +89,9 @@ static constexpr const std::array ewa_filter_weight_lut{ }// namespace detail FallbackTexture::FallbackTexture(PixelStorage storage, uint dim, uint3 size, uint levels) noexcept - : _storage{storage}, _mip_levels{levels}, _dimension{dim} - { + : _storage{storage}, _mip_levels{levels}, _dimension{dim} { if (_dimension == 2u) { - _pixel_stride_shift = std::bit_width(static_cast(pixel_storage_align(storage))) - 1u; + _pixel_stride_shift = std::bit_width(static_cast(pixel_storage_size(storage, make_uint3(1u)))) - 1u; if (storage == PixelStorage::BC6 || storage == PixelStorage::BC7) { _pixel_stride_shift = 0u; } @@ -196,6 +109,7 @@ FallbackTexture::FallbackTexture(PixelStorage storage, uint dim, uint3 size, uin auto size_pixels = _mip_offsets[levels - 1u] + s.x * s.y; _data = luisa::allocate_with_allocator(static_cast(size_pixels) << _pixel_stride_shift); } else { + _pixel_stride_shift = std::bit_width(static_cast(pixel_storage_size(storage, make_uint3(1u)))) - 1u; _size[0] = size.x; _size[1] = size.y; _size[2] = size.z; @@ -216,132 +130,123 @@ FallbackTexture::~FallbackTexture() noexcept { luisa::deallocate_with_allocator( FallbackTextureView FallbackTexture::view(uint level) const noexcept { auto size = luisa::max(make_uint3(_size[0], _size[1], _size[2]) >> level, 1u); return FallbackTextureView{_data + (static_cast(_mip_offsets[level]) << _pixel_stride_shift), - _dimension, size.x, size.y, size.z, _storage, _pixel_stride_shift}; + _dimension, size.x, size.y, size.z, _storage, _pixel_stride_shift}; } -//float4 FallbackTexture::read2d(uint level, uint2 uv) const noexcept { -// return view(level).read2d(uv); -//} +// template +// [[nodiscard]] inline auto texture_coord_point(Sampler::Address address, T uv, T s) noexcept { +// switch (address) { +// case Sampler::Address::EDGE: return luisa::clamp(uv, 0.0f, one_minus_epsilon) * s; +// case Sampler::Address::REPEAT: return luisa::fract(uv) * s; +// case Sampler::Address::MIRROR: { +// uv = luisa::fmod(luisa::abs(uv), T{2.0f}); +// uv = select(2.f - uv, uv, uv < T{1.f}); +// return luisa::min(uv, one_minus_epsilon) * s; +// } +// case Sampler::Address::ZERO: return luisa::select(uv * s, T{65536.f}, uv < 0.f || uv >= 1.f); +// } +// return T{65536.f}; +// } // -//float4 FallbackTexture::read3d(uint level, uint3 uvw) const noexcept { -// return view(level).read3d(uvw); -//} - -template -[[nodiscard]] inline auto texture_coord_point(Sampler::Address address, T uv, T s) noexcept { - switch (address) { - case Sampler::Address::EDGE: return luisa::clamp(uv, 0.0f, one_minus_epsilon) * s; - case Sampler::Address::REPEAT: return luisa::fract(uv) * s; - case Sampler::Address::MIRROR: { - uv = luisa::fmod(luisa::abs(uv), T{2.0f}); - uv = select(2.f - uv, uv, uv < T{1.f}); - return luisa::min(uv, one_minus_epsilon) * s; - } - case Sampler::Address::ZERO: return luisa::select(uv * s, T{65536.f}, uv < 0.f || uv >= 1.f); - } - return T{65536.f}; -} - - -[[nodiscard]] inline auto texture_coord_linear(Sampler::Address address, float3 uv, float3 size) noexcept { - auto s = make_float3(size); - auto inv_s = 1.f / s; - auto c_min = texture_coord_point(address, uv - .5f * inv_s, s); - auto c_max = texture_coord_point(address, uv + .5f * inv_s, s); - return std::make_pair(luisa::min(c_min, c_max), luisa::max(c_min, c_max)); -} - -[[nodiscard]] inline auto texture_sample_linear(FallbackTextureView view, Sampler::Address address, float3 uvw) noexcept { - auto size = make_float3(view.size3d()); - auto [st_min, st_max] = texture_coord_linear(address, uvw, size); - auto t = luisa::fract(st_max); - auto c0 = make_uint3(st_min); - auto c1 = make_uint3(st_max); - auto v000 = view.read3d(make_uint3(c0.x, c0.y, c0.z)); - auto v001 = view.read3d(make_uint3(c1.x, c0.y, c0.z)); - auto v010 = view.read3d(make_uint3(c0.x, c1.y, c0.z)); - auto v011 = view.read3d(make_uint3(c1.x, c1.y, c0.z)); - auto v100 = view.read3d(make_uint3(c0.x, c0.y, c1.z)); - auto v101 = view.read3d(make_uint3(c1.x, c0.y, c1.z)); - auto v110 = view.read3d(make_uint3(c0.x, c1.y, c1.z)); - auto v111 = view.read3d(make_uint3(c1.x, c1.y, c1.z)); - return luisa::lerp( - luisa::lerp(luisa::lerp(v000, v001, t.x), - luisa::lerp(v010, v011, t.x), t.y), - luisa::lerp(luisa::lerp(v100, v101, t.x), - luisa::lerp(v110, v111, t.x), t.y), - t.z); -} - -[[nodiscard]] inline auto texture_sample_point(FallbackTextureView view, Sampler::Address address, float2 uv) noexcept { - auto size = make_float2(view.size2d()); - auto c = make_uint2(texture_coord_point(address, uv, size)); - return view.read2d(c); -} - -[[nodiscard]] inline auto texture_sample_point(FallbackTextureView view, Sampler::Address address, float3 uvw) noexcept { - auto size = make_float3(view.size3d()); - auto c = make_uint3(texture_coord_point(address, uvw, size)); - return view.read3d(c); -} - -// from PBRT-v4 -[[nodiscard]] inline auto texture_sample_ewa(FallbackTextureView view, Sampler::Address address, - float2 uv, float2 dst0, float2 dst1) noexcept { - auto size = make_float2(view.size2d()); - auto st = uv * size - .5f; - dst0 = dst0 * size; - dst1 = dst1 * size; - - constexpr auto sqr = [](float x) noexcept { return x * x; }; - constexpr auto safe_sqrt = [](float x) noexcept { return luisa::select(std::sqrt(x), 0.f, x <= 0.f); }; - - // Find ellipse coefficients that bound EWA filter region - auto A = sqr(dst0.y) + sqr(dst1.y) + 1.f; - auto B = -2.f * (dst0.x * dst0.y + dst1.x * dst1.y); - auto C = sqr(dst0.x) + sqr(dst1.x) + 1.f; - auto inv_f = 1.f / (A * C - sqr(B) * 0.25f); - A *= inv_f; - B *= inv_f; - C *= inv_f; - - // Compute the ellipse's $(s,t)$ bounding box in texture space - auto det = -sqr(B) + 4.f * A * C; - auto inv_det = 1.f / det; - auto sqrt_u = safe_sqrt(det * C); - auto sqrt_v = safe_sqrt(A * det); - auto s_min = static_cast(std::ceil(st.x - 2.f * inv_det * sqrt_u)); - auto s_max = static_cast(std::floor(st.x + 2.f * inv_det * sqrt_u)); - auto t_min = static_cast(std::ceil(st.y - 2.f * inv_det * sqrt_v)); - auto t_max = static_cast(std::floor(st.y + 2.f * inv_det * sqrt_v)); - - // Scan over ellipse bound and evaluate quadratic equation to filter image - auto sum = make_float4(); - auto sum_w = 0.f; - auto inv_size = 1.f / size; - for (auto t = t_min; t <= t_max; t++) { - for (auto s = s_min; s <= s_max; s++) { - auto ss = static_cast(s) - st.x; - auto tt = static_cast(t) - st.y; - // Compute squared radius and filter texel if it is inside the ellipse - if (auto rr = A * sqr(ss) + B * ss * tt + C * sqr(tt); rr < 1.f) { - constexpr auto lut_size = static_cast(detail::ewa_filter_weight_lut.size()); - auto index = std::clamp(rr * lut_size, 0.f, lut_size - 1.f); - auto weight = detail::ewa_filter_weight_lut[static_cast(index)]; - auto p = texture_coord_point(address, uv + make_float2(ss, tt) * inv_size, size); - sum += weight * view.read2d(make_uint2(p)); - sum_w += weight; - } - } - } - return select(sum / sum_w, make_float4(0.f), sum_w <= 0.f); -} - -[[nodiscard]] inline auto texture_sample_ewa(FallbackTextureView view, Sampler::Address address, - float3 uvw, float3 ddx, float3 ddy) noexcept { - // FIXME: anisotropic filtering - return texture_sample_linear(view, address, uvw); -} +// [[nodiscard]] inline auto texture_coord_linear(Sampler::Address address, float3 uv, float3 size) noexcept { +// auto s = make_float3(size); +// auto inv_s = 1.f / s; +// auto c_min = texture_coord_point(address, uv - .5f * inv_s, s); +// auto c_max = texture_coord_point(address, uv + .5f * inv_s, s); +// return std::make_pair(luisa::min(c_min, c_max), luisa::max(c_min, c_max)); +// } +// +// [[nodiscard]] inline auto texture_sample_linear(FallbackTextureView view, Sampler::Address address, float3 uvw) noexcept { +// auto size = make_float3(view.size3d()); +// auto [st_min, st_max] = texture_coord_linear(address, uvw, size); +// auto t = luisa::fract(st_max); +// auto c0 = make_uint3(st_min); +// auto c1 = make_uint3(st_max); +// auto v000 = view.read3d(make_uint3(c0.x, c0.y, c0.z)); +// auto v001 = view.read3d(make_uint3(c1.x, c0.y, c0.z)); +// auto v010 = view.read3d(make_uint3(c0.x, c1.y, c0.z)); +// auto v011 = view.read3d(make_uint3(c1.x, c1.y, c0.z)); +// auto v100 = view.read3d(make_uint3(c0.x, c0.y, c1.z)); +// auto v101 = view.read3d(make_uint3(c1.x, c0.y, c1.z)); +// auto v110 = view.read3d(make_uint3(c0.x, c1.y, c1.z)); +// auto v111 = view.read3d(make_uint3(c1.x, c1.y, c1.z)); +// return luisa::lerp( +// luisa::lerp(luisa::lerp(v000, v001, t.x), +// luisa::lerp(v010, v011, t.x), t.y), +// luisa::lerp(luisa::lerp(v100, v101, t.x), +// luisa::lerp(v110, v111, t.x), t.y), +// t.z); +// } +// +// [[nodiscard]] inline auto texture_sample_point(FallbackTextureView view, Sampler::Address address, float2 uv) noexcept { +// auto size = make_float2(view.size2d()); +// auto c = make_uint2(texture_coord_point(address, uv, size)); +// return view.read2d(c); +// } +// +// [[nodiscard]] inline auto texture_sample_point(FallbackTextureView view, Sampler::Address address, float3 uvw) noexcept { +// auto size = make_float3(view.size3d()); +// auto c = make_uint3(texture_coord_point(address, uvw, size)); +// return view.read3d(c); +// } +// +// // from PBRT-v4 +// [[nodiscard]] inline auto texture_sample_ewa(FallbackTextureView view, Sampler::Address address, +// float2 uv, float2 dst0, float2 dst1) noexcept { +// auto size = make_float2(view.size2d()); +// auto st = uv * size - .5f; +// dst0 = dst0 * size; +// dst1 = dst1 * size; +// +// constexpr auto sqr = [](float x) noexcept { return x * x; }; +// constexpr auto safe_sqrt = [](float x) noexcept { return luisa::select(std::sqrt(x), 0.f, x <= 0.f); }; +// +// // Find ellipse coefficients that bound EWA filter region +// auto A = sqr(dst0.y) + sqr(dst1.y) + 1.f; +// auto B = -2.f * (dst0.x * dst0.y + dst1.x * dst1.y); +// auto C = sqr(dst0.x) + sqr(dst1.x) + 1.f; +// auto inv_f = 1.f / (A * C - sqr(B) * 0.25f); +// A *= inv_f; +// B *= inv_f; +// C *= inv_f; +// +// // Compute the ellipse's $(s,t)$ bounding box in texture space +// auto det = -sqr(B) + 4.f * A * C; +// auto inv_det = 1.f / det; +// auto sqrt_u = safe_sqrt(det * C); +// auto sqrt_v = safe_sqrt(A * det); +// auto s_min = static_cast(std::ceil(st.x - 2.f * inv_det * sqrt_u)); +// auto s_max = static_cast(std::floor(st.x + 2.f * inv_det * sqrt_u)); +// auto t_min = static_cast(std::ceil(st.y - 2.f * inv_det * sqrt_v)); +// auto t_max = static_cast(std::floor(st.y + 2.f * inv_det * sqrt_v)); +// +// // Scan over ellipse bound and evaluate quadratic equation to filter image +// auto sum = make_float4(); +// auto sum_w = 0.f; +// auto inv_size = 1.f / size; +// for (auto t = t_min; t <= t_max; t++) { +// for (auto s = s_min; s <= s_max; s++) { +// auto ss = static_cast(s) - st.x; +// auto tt = static_cast(t) - st.y; +// // Compute squared radius and filter texel if it is inside the ellipse +// if (auto rr = A * sqr(ss) + B * ss * tt + C * sqr(tt); rr < 1.f) { +// constexpr auto lut_size = static_cast(detail::ewa_filter_weight_lut.size()); +// auto index = std::clamp(rr * lut_size, 0.f, lut_size - 1.f); +// auto weight = detail::ewa_filter_weight_lut[static_cast(index)]; +// auto p = texture_coord_point(address, uv + make_float2(ss, tt) * inv_size, size); +// sum += weight * view.read2d(make_uint2(p)); +// sum_w += weight; +// } +// } +// } +// return select(sum / sum_w, make_float4(0.f), sum_w <= 0.f); +// } +// +// [[nodiscard]] inline auto texture_sample_ewa(FallbackTextureView view, Sampler::Address address, +// float3 uvw, float3 ddx, float3 ddy) noexcept { +// // FIXME: anisotropic filtering +// return texture_sample_linear(view, address, uvw); +// } //float4 FallbackTexture::sample2d(Sampler sampler, float2 uv) const noexcept { // return sampler.filter() == Sampler::Filter::POINT ? @@ -451,72 +356,4 @@ template // return luisa::lerp(v0, v1, luisa::fract(level)); //} -void texture_write_2d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept { - detail::decode_texture_view(t0, t1).write2d( - detail::decode_uint2(c0), detail::decode_int4(v0, v1)); -} - -void texture_write_3d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept { - detail::decode_texture_view(t0, t1).write3d( - detail::decode_uint3(c0, c1), detail::decode_int4(v0, v1)); -} - -void texture_write_2d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept { - detail::decode_texture_view(t0, t1).write2d( - detail::decode_uint2(c0), - detail::decode_uint4(v0, v1)); -} - -void texture_write_3d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept { - detail::decode_texture_view(t0, t1).write3d( - detail::decode_uint3(c0, c1), detail::decode_uint4(v0, v1)); -} - -void texture_write_2d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept { - detail::decode_texture_view(t0, t1).write2d( - detail::decode_uint2(c0), detail::decode_float4(v0, v1)); -} - -void texture_write_3d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept { - detail::decode_texture_view(t0, t1).write3d( - detail::decode_uint3(c0, c1), detail::decode_float4(v0, v1)); -} - -float32x4_t texture_read_2d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept { - return detail::encode_int4( - detail::decode_texture_view(t0, t1).read2d( - detail::decode_uint2(c0))); -} - -float32x4_t texture_read_3d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept { - return detail::encode_int4( - detail::decode_texture_view(t0, t1).read3d( - detail::decode_uint3(c0, c1))); -} - -float32x4_t texture_read_2d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept { - return detail::encode_uint4( - detail::decode_texture_view(t0, t1).read2d( - detail::decode_uint2(c0))); -} - -float32x4_t texture_read_3d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept { - return detail::encode_uint4( - detail::decode_texture_view(t0, t1).read3d( - detail::decode_uint3(c0, c1))); -} - -float32x4_t texture_read_2d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept { - return detail::encode_float4( - detail::decode_texture_view(t0, t1).read2d( - detail::decode_uint2(c0))); -} - -float32x4_t texture_read_3d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept { - return detail::encode_float4( - detail::decode_texture_view(t0, t1).read3d( - detail::decode_uint3(c0, c1))); -} - - }// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_texture.h b/src/backends/fallback/fallback_texture.h index 8e04a94f2..97211367f 100644 --- a/src/backends/fallback/fallback_texture.h +++ b/src/backends/fallback/fallback_texture.h @@ -4,495 +4,348 @@ #pragma once -#include - #include #include #include #include #include -#include "llvm_abi.h" - -namespace luisa::compute::fallback -{ - namespace detail - { - [[nodiscard]] float16_t float_to_half(float f) noexcept; - - [[nodiscard]] float half_to_float(float16_t h) noexcept; - - template - [[nodiscard]] inline float scalar_to_float(T x) noexcept - { - if constexpr (std::is_same_v) - { - return x; - } - else if constexpr (std::is_same_v) - { - return x / 255.f; - } - else if constexpr (std::is_same_v) - { - return x / 65535.f; - } - else if constexpr (std::is_same_v) - { - return half_to_float(x); - } - else - { - return 0.f; - } - } - - template - [[nodiscard]] inline T float_to_scalar(float x) noexcept - { - if constexpr (std::is_same_v) - { - return x; - } - else if constexpr (std::is_same_v) - { - return static_cast(std::clamp(std::round(x * 255.f), 0.f, 255.f)); - } - else if constexpr (std::is_same_v) - { - return static_cast(std::clamp(std::round(x * 65535.f), 0.f, 65535.f)); - } - else if constexpr (std::is_same_v) - { - return static_cast(float_to_half(x)); - } - else - { - return static_cast(0); - } - } - - template - [[nodiscard]] inline uint scalar_to_int(T x) noexcept - { - return static_cast(x); - } - - template - [[nodiscard]] inline T int_to_scalar(uint x) noexcept - { - return static_cast(x); - } - - template - [[nodiscard]] inline float4 pixel_to_float4(const std::byte* pixel) noexcept - { - auto value = reinterpret_cast(pixel); - if constexpr (dim == 1u) - { - return make_float4( - scalar_to_float(value[0]), - 0.f, 0.0f, 0.f); - } - else if constexpr (dim == 2u) - { - return make_float4( - scalar_to_float(value[0]), - scalar_to_float(value[1]), - 0.0f, 0.f); - } - else if constexpr (dim == 4u) - { - return make_float4( - scalar_to_float(value[0]), - scalar_to_float(value[1]), - scalar_to_float(value[2]), - scalar_to_float(value[3])); - } - else - { - return make_float4(); - } - } - - template - inline void float4_to_pixel(std::byte* pixel, float4 v) noexcept - { - auto value = reinterpret_cast(pixel); - if constexpr (dim == 1u) - { - value[0] = float_to_scalar(v[0]); - } - else if constexpr (dim == 2u) - { - value[0] = float_to_scalar(v[0]); - value[1] = float_to_scalar(v[1]); - } - else if constexpr (dim == 4u) - { - value[0] = float_to_scalar(v[0]); - value[1] = float_to_scalar(v[1]); - value[2] = float_to_scalar(v[2]); - value[3] = float_to_scalar(v[3]); - } - } - - template - [[nodiscard]] inline uint4 pixel_to_int4(const std::byte* pixel) noexcept - { - auto value = reinterpret_cast(pixel); - if constexpr (dim == 1u) - { - return make_uint4( - scalar_to_int(value[0]), - 0u, 0u, 0u); - } - else if constexpr (dim == 2u) - { - return make_uint4( - scalar_to_int(value[0]), - scalar_to_int(value[1]), - 0u, 0u); - } - else if constexpr (dim == 4u) - { - return make_uint4( - scalar_to_int(value[0]), - scalar_to_int(value[1]), - scalar_to_int(value[2]), - scalar_to_int(value[3])); - } - else - { - return make_uint4(); - } - } - - template - inline void int4_to_pixel(std::byte* pixel, uint4 v) noexcept - { - auto value = reinterpret_cast(pixel); - if constexpr (dim == 1u) - { - value[0] = int_to_scalar(v[0]); - } - else if constexpr (dim == 2u) - { - value[0] = int_to_scalar(v[0]); - value[1] = int_to_scalar(v[1]); - } - else if constexpr (dim == 4u) - { - value[0] = int_to_scalar(v[0]); - value[1] = int_to_scalar(v[1]); - value[2] = int_to_scalar(v[2]); - value[3] = int_to_scalar(v[3]); - } - } - - template - [[nodiscard]] inline auto read_pixel(const std::byte* p) noexcept - { - if constexpr (std::is_same_v) - { - return pixel_to_float4(p); - } - else - { - static_assert(std::is_same_v || - std::is_same_v); - return luisa::bit_cast>( - pixel_to_int4(p)); - } - } - - template - [[nodiscard]] inline auto write_pixel(std::byte* p, Vector value) noexcept - { - if constexpr (std::is_same_v) - { - float4_to_pixel(p, value); - } - else - { - static_assert(std::is_same_v || - std::is_same_v); - int4_to_pixel( - p, luisa::bit_cast(value)); - } - } - - template - [[nodiscard]] inline Vector read_pixel(PixelStorage storage, const std::byte* p) noexcept - { - switch (storage) - { - case PixelStorage::BYTE1: return detail::read_pixel(p); - case PixelStorage::BYTE2: return detail::read_pixel(p); - case PixelStorage::BYTE4: return detail::read_pixel(p); - case PixelStorage::SHORT1: return detail::read_pixel(p); - case PixelStorage::SHORT2: return detail::read_pixel(p); - case PixelStorage::SHORT4: return detail::read_pixel(p); - case PixelStorage::INT1: return detail::read_pixel(p); - case PixelStorage::INT2: return detail::read_pixel(p); - case PixelStorage::INT4: return detail::read_pixel(p); - case PixelStorage::HALF1: return detail::read_pixel(p); - case PixelStorage::HALF2: return detail::read_pixel(p); - case PixelStorage::HALF4: return detail::read_pixel(p); - case PixelStorage::FLOAT1: return detail::read_pixel(p); - case PixelStorage::FLOAT2: return detail::read_pixel(p); - case PixelStorage::FLOAT4: return detail::read_pixel(p); - default: break; - } - return {}; - } - - template - inline void write_pixel(PixelStorage storage, std::byte* p, Vector v) noexcept - { - switch (storage) - { - case PixelStorage::BYTE1: detail::write_pixel(p, v); - break; - case PixelStorage::BYTE2: detail::write_pixel(p, v); - break; - case PixelStorage::BYTE4: detail::write_pixel(p, v); - break; - case PixelStorage::SHORT1: detail::write_pixel(p, v); - break; - case PixelStorage::SHORT2: detail::write_pixel(p, v); - break; - case PixelStorage::SHORT4: detail::write_pixel(p, v); - break; - case PixelStorage::INT1: detail::write_pixel(p, v); - break; - case PixelStorage::INT2: detail::write_pixel(p, v); - break; - case PixelStorage::INT4: detail::write_pixel(p, v); - break; - case PixelStorage::HALF1: detail::write_pixel(p, v); - break; - case PixelStorage::HALF2: detail::write_pixel(p, v); - break; - case PixelStorage::HALF4: detail::write_pixel(p, v); - break; - case PixelStorage::FLOAT1: detail::write_pixel(p, v); - break; - case PixelStorage::FLOAT2: detail::write_pixel(p, v); - break; - case PixelStorage::FLOAT4: detail::write_pixel(p, v); - break; - default: break; - } - } - } // namespace detail - - class FallbackTexture; - class FallbackTextureView; - - class alignas(16u) FallbackTexture - { - public: - static constexpr auto block_size = 4u; - - private: - std::byte* _data{nullptr}; // 8B - std::array _size{}; // 14B - PixelStorage _storage: 16u; // 16B - uint _pixel_stride_shift: 8u; // 18B - uint _mip_levels: 8u; // 19B - uint _dimension: 8u; // 20B - std::array _mip_offsets{}; // 80B - - public: - FallbackTexture(PixelStorage storage, uint dim, uint3 size, uint levels) noexcept; - - ~FallbackTexture() noexcept; - - FallbackTexture(FallbackTexture&&) noexcept = delete; - - FallbackTexture(const FallbackTexture&) noexcept = delete; - - FallbackTexture& operator=(FallbackTexture&&) noexcept = delete; - - FallbackTexture& operator=(const FallbackTexture&) noexcept = delete; - - [[nodiscard]] FallbackTextureView view(uint level) const noexcept; - - [[nodiscard]] auto storage() const noexcept { return _storage; } - [[nodiscard]] auto mip_levels() const noexcept { return _mip_levels; } - - // reading - // [[nodiscard]] float4 read2d(uint level, uint2 uv) const noexcept; - // [[nodiscard]] float4 read3d(uint level, uint3 uvw) const noexcept; - // - // // sampling - // [[nodiscard]] float4 sample2d(Sampler sampler, float2 uv) const noexcept; - // [[nodiscard]] float4 sample3d(Sampler sampler, float3 uvw) const noexcept; - // [[nodiscard]] float4 sample2d(Sampler sampler, float2 uv, float lod) const noexcept; - // [[nodiscard]] float4 sample3d(Sampler sampler, float3 uvw, float lod) const noexcept; - // [[nodiscard]] float4 sample2d(Sampler sampler, float2 uv, float2 dpdx, float2 dpdy) const noexcept; - // [[nodiscard]] float4 sample3d(Sampler sampler, float3 uvw, float3 dpdx, float3 dpdy) const noexcept; - }; - - class alignas(16u) FallbackTextureView - { - private: - std::byte* _data; // 8B - uint _width: 16u; // 10B - uint _height: 16u; // 12B - uint _depth: 16u; // 14B - PixelStorage _storage: 8u; // 15B - uint _dimension: 4u; - uint _pixel_stride_shift: 4u; // 16B - - public: - static constexpr auto block_size = FallbackTexture::block_size; - const std::byte* data() const noexcept { return _data; } - const PixelStorage storage() const noexcept { return _storage; } - - private: - [[nodiscard]] inline std::byte* _pixel2d(uint2 xy) const noexcept - { - auto idx = xy.x + xy.y * _width; - return _data + (static_cast(idx) << _pixel_stride_shift); - } - - [[nodiscard]] inline std::byte* _pixel3d(uint3 xyz) const noexcept - { - auto idx = xyz.x + xyz.y * _width + xyz.z * _width * _height; - return _data + (static_cast(idx) << _pixel_stride_shift); - } - - [[nodiscard]] inline auto _out_of_bounds(uint2 xy) const noexcept - { - return !(xy[0] < _width & xy[1] < _height); - } - - [[nodiscard]] inline auto _out_of_bounds(uint3 xyz) const noexcept - { - return !(xyz[0] < _width & xyz[1] < _height & xyz[2] < _depth); - } - - private: - friend class FallbackTexture; - - FallbackTextureView(std::byte* data, uint dim, uint w, uint h, uint d, - PixelStorage storage, uint pixel_stride_shift) noexcept - : _data(data), _width{w}, _height{h}, _depth{d}, _storage(storage), - _dimension{dim}, _pixel_stride_shift(pixel_stride_shift) - { - } - - public: - template - [[nodiscard]] inline Vector read2d(uint2 xy) const noexcept - { - if (_out_of_bounds(xy)) [[unlikely]] { return {}; } - return detail::read_pixel(_storage, _pixel2d(xy)); - } - - template - [[nodiscard]] inline Vector read3d(uint3 xyz) const noexcept - { - if (_out_of_bounds(xyz)) [[unlikely]] { return {}; } - return detail::read_pixel(_storage, _pixel3d(xyz)); - } - - template - inline void write2d(uint2 xy, Vector value) const noexcept - { - if (_out_of_bounds(xy)) [[unlikely]] { return; } - detail::write_pixel(_storage, _pixel2d(xy), value); - } - - template - inline void write3d(uint3 xyz, Vector value) const noexcept - { - if (_out_of_bounds(xyz)) [[unlikely]] { return; } - detail::write_pixel(_storage, _pixel3d(xyz), value); - } - - [[nodiscard]] auto size2d() const noexcept { return make_uint2(_width, _height); } - [[nodiscard]] auto size3d() const noexcept { return make_uint3(_width, _height, _depth); } - [[nodiscard]] auto size_bytes() const noexcept { return (_width * _height * _depth) << _pixel_stride_shift; } - - void copy_from(const void* data) const noexcept; - - void copy_to(void* data) const noexcept; - - void copy_from(FallbackTextureView dst) const noexcept; - }; - - static_assert(sizeof(FallbackTextureView) == 16u); - - void texture_write_2d_float_wrapper(void* ptr, uint x, uint y, void* val); - void texture_read_2d_float_wrapper(void* ptr, uint x, uint y, void* out); - void texture_write_2d_uint_wrapper(void* ptr, uint x, uint y, void* val); - void texture_read_2d_uint_wrapper(void* ptr, uint x, uint y, void* out); - - // [[nodiscard]] float32x4_t texture_read_2d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept; - // [[nodiscard]] float32x4_t texture_read_3d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept; - // [[nodiscard]] float32x4_t texture_read_2d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept; - // [[nodiscard]] float32x4_t texture_read_3d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept; - // [[nodiscard]] float32x4_t texture_read_2d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept; - // [[nodiscard]] float32x4_t texture_read_3d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1) noexcept; - // void texture_write_2d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept; - // void texture_write_3d_int(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept; - // void texture_write_2d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept; - // void texture_write_3d_uint(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept; - // void texture_write_2d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept; - // void texture_write_3d_float(int64_t t0, int64_t t1, int64_t c0, int64_t c1, int64_t v0, int64_t v1) noexcept; - - //swfly tries to write the accessors again - [[nodiscard]] int4 texture_read_2d_int(const FallbackTextureView* tex, uint x, uint y) noexcept; - - [[nodiscard]] int4 texture_read_3d_int(const FallbackTextureView* tex, uint x, uint y, uint z) noexcept; - - [[nodiscard]] uint4 texture_read_2d_uint(const FallbackTextureView* tex, uint x, uint y) noexcept; - - [[nodiscard]] uint4 texture_read_3d_uint(const FallbackTextureView* tex, uint x, uint y, uint z) noexcept; - - [[nodiscard]] float4 texture_read_2d_float(const FallbackTextureView* tex, uint x, uint y) noexcept; - - [[nodiscard]] float4 texture_read_3d_float(const FallbackTextureView* tex, uint x, uint y, uint z) noexcept; - - // - // - [[nodiscard]] void texture_write_2d_int(const FallbackTextureView* tex, uint x, uint y, int4 val) noexcept; - - [[nodiscard]] void texture_write_3d_int(const FallbackTextureView* tex, uint x, uint y, uint z, int4 val) noexcept; - - [[nodiscard]] void texture_write_2d_uint(const FallbackTextureView* tex, uint x, uint y, uint4 val) noexcept; - - [[nodiscard]] void texture_write_3d_uint(const FallbackTextureView* tex, uint x, uint y, uint z, - uint4 val) noexcept; - - [[nodiscard]] void texture_write_2d_float(const FallbackTextureView* tex, uint x, uint y, float4 val) noexcept; - - [[nodiscard]] void texture_write_3d_float(const FallbackTextureView* tex, uint x, uint y, uint z, - float4 val) noexcept; - - // - [[nodiscard]] float4 bindless_texture_2d_read(const FallbackTexture* tex, uint level, uint x, uint y) noexcept; - - [[nodiscard]] float4 bindless_texture_3d_read(const FallbackTexture* tex, uint level, uint x, uint y, - uint z) noexcept; - [[nodiscard]] float4 - bindless_texture_2d_sample(const FallbackTexture* tex, uint sampler, float u, float v) noexcept; +namespace luisa::compute::fallback { +namespace detail { + +template +[[nodiscard]] inline float scalar_to_float(T x) noexcept { + if constexpr (std::is_same_v) { + return x; + } else if constexpr (std::is_same_v) { + return x / 255.f; + } else if constexpr (std::is_same_v) { + return x / 65535.f; + } else if constexpr (std::is_same_v) { + return static_cast(x); + } else { + return 0.f; + } +} + +template +[[nodiscard]] inline T float_to_scalar(float x) noexcept { + if constexpr (std::is_same_v) { + return x; + } else if constexpr (std::is_same_v) { + return static_cast(std::clamp(std::round(x * 255.f), 0.f, 255.f)); + } else if constexpr (std::is_same_v) { + return static_cast(std::clamp(std::round(x * 65535.f), 0.f, 65535.f)); + } else if constexpr (std::is_same_v) { + return static_cast(x); + } else { + return static_cast(0); + } +} + +template +[[nodiscard]] inline uint scalar_to_int(T x) noexcept { + return static_cast(x); +} + +template +[[nodiscard]] inline T int_to_scalar(uint x) noexcept { + return static_cast(x); +} + +template +[[nodiscard]] inline float4 pixel_to_float4(const std::byte *pixel) noexcept { + auto value = reinterpret_cast(pixel); + if constexpr (dim == 1u) { + return make_float4( + scalar_to_float(value[0]), + 0.f, 0.0f, 0.f); + } else if constexpr (dim == 2u) { + return make_float4( + scalar_to_float(value[0]), + scalar_to_float(value[1]), + 0.0f, 0.f); + } else if constexpr (dim == 4u) { + return make_float4( + scalar_to_float(value[0]), + scalar_to_float(value[1]), + scalar_to_float(value[2]), + scalar_to_float(value[3])); + } else { + return make_float4(); + } +} + +template +inline void float4_to_pixel(std::byte *pixel, float4 v) noexcept { + auto value = reinterpret_cast(pixel); + if constexpr (dim == 1u) { + value[0] = float_to_scalar(v[0]); + } else if constexpr (dim == 2u) { + value[0] = float_to_scalar(v[0]); + value[1] = float_to_scalar(v[1]); + } else if constexpr (dim == 4u) { + value[0] = float_to_scalar(v[0]); + value[1] = float_to_scalar(v[1]); + value[2] = float_to_scalar(v[2]); + value[3] = float_to_scalar(v[3]); + } +} + +template +[[nodiscard]] inline uint4 pixel_to_int4(const std::byte *pixel) noexcept { + auto value = reinterpret_cast(pixel); + if constexpr (dim == 1u) { + return make_uint4( + scalar_to_int(value[0]), + 0u, 0u, 0u); + } else if constexpr (dim == 2u) { + return make_uint4( + scalar_to_int(value[0]), + scalar_to_int(value[1]), + 0u, 0u); + } else if constexpr (dim == 4u) { + return make_uint4( + scalar_to_int(value[0]), + scalar_to_int(value[1]), + scalar_to_int(value[2]), + scalar_to_int(value[3])); + } else { + return make_uint4(); + } +} + +template +inline void int4_to_pixel(std::byte *pixel, uint4 v) noexcept { + auto value = reinterpret_cast(pixel); + if constexpr (dim == 1u) { + value[0] = int_to_scalar(v[0]); + } else if constexpr (dim == 2u) { + value[0] = int_to_scalar(v[0]); + value[1] = int_to_scalar(v[1]); + } else if constexpr (dim == 4u) { + value[0] = int_to_scalar(v[0]); + value[1] = int_to_scalar(v[1]); + value[2] = int_to_scalar(v[2]); + value[3] = int_to_scalar(v[3]); + } +} + +template +[[nodiscard]] inline auto read_pixel(const std::byte *p) noexcept { + if constexpr (std::is_same_v) { + return pixel_to_float4(p); + } else { + static_assert(std::is_same_v || + std::is_same_v); + return luisa::bit_cast>( + pixel_to_int4(p)); + } +} + +template +inline auto write_pixel(std::byte *p, Vector value) noexcept { + if constexpr (std::is_same_v) { + float4_to_pixel(p, value); + } else { + static_assert(std::is_same_v || + std::is_same_v); + int4_to_pixel( + p, luisa::bit_cast(value)); + } +} + +template +[[nodiscard]] inline Vector read_pixel(PixelStorage storage, const std::byte *p) noexcept { + switch (storage) { + case PixelStorage::BYTE1: return detail::read_pixel(p); + case PixelStorage::BYTE2: return detail::read_pixel(p); + case PixelStorage::BYTE4: return detail::read_pixel(p); + case PixelStorage::SHORT1: return detail::read_pixel(p); + case PixelStorage::SHORT2: return detail::read_pixel(p); + case PixelStorage::SHORT4: return detail::read_pixel(p); + case PixelStorage::INT1: return detail::read_pixel(p); + case PixelStorage::INT2: return detail::read_pixel(p); + case PixelStorage::INT4: return detail::read_pixel(p); + case PixelStorage::HALF1: return detail::read_pixel(p); + case PixelStorage::HALF2: return detail::read_pixel(p); + case PixelStorage::HALF4: return detail::read_pixel(p); + case PixelStorage::FLOAT1: return detail::read_pixel(p); + case PixelStorage::FLOAT2: return detail::read_pixel(p); + case PixelStorage::FLOAT4: return detail::read_pixel(p); + default: break; + } + return {}; +} + +template +inline void write_pixel(PixelStorage storage, std::byte *p, Vector v) noexcept { + switch (storage) { + case PixelStorage::BYTE1: + detail::write_pixel(p, v); + break; + case PixelStorage::BYTE2: + detail::write_pixel(p, v); + break; + case PixelStorage::BYTE4: + detail::write_pixel(p, v); + break; + case PixelStorage::SHORT1: + detail::write_pixel(p, v); + break; + case PixelStorage::SHORT2: + detail::write_pixel(p, v); + break; + case PixelStorage::SHORT4: + detail::write_pixel(p, v); + break; + case PixelStorage::INT1: + detail::write_pixel(p, v); + break; + case PixelStorage::INT2: + detail::write_pixel(p, v); + break; + case PixelStorage::INT4: + detail::write_pixel(p, v); + break; + case PixelStorage::HALF1: + detail::write_pixel(p, v); + break; + case PixelStorage::HALF2: + detail::write_pixel(p, v); + break; + case PixelStorage::HALF4: + detail::write_pixel(p, v); + break; + case PixelStorage::FLOAT1: + detail::write_pixel(p, v); + break; + case PixelStorage::FLOAT2: + detail::write_pixel(p, v); + break; + case PixelStorage::FLOAT4: + detail::write_pixel(p, v); + break; + default: break; + } +} + +}// namespace detail + +class FallbackTexture; +class FallbackTextureView; + +class alignas(16u) FallbackTexture { +public: + static constexpr auto block_size = 4u; + +private: + std::byte *_data{nullptr}; // 8B + std::array _size{}; // 14B + PixelStorage _storage : 16u; // 16B + uint _pixel_stride_shift : 8u; // 18B + uint _mip_levels : 8u; // 19B + uint _dimension : 8u; // 20B + std::array _mip_offsets{};// 80B + +public: + FallbackTexture(PixelStorage storage, uint dim, uint3 size, uint levels) noexcept; + + ~FallbackTexture() noexcept; + + FallbackTexture(FallbackTexture &&) noexcept = delete; + + FallbackTexture(const FallbackTexture &) noexcept = delete; + + FallbackTexture &operator=(FallbackTexture &&) noexcept = delete; + + FallbackTexture &operator=(const FallbackTexture &) noexcept = delete; + + [[nodiscard]] FallbackTextureView view(uint level) const noexcept; + + [[nodiscard]] auto storage() const noexcept { return _storage; } + [[nodiscard]] auto mip_levels() const noexcept { return _mip_levels; } +}; + +class alignas(16u) FallbackTextureView { +private: + std::byte *_data; // 8B + uint _width : 16u; // 10B + uint _height : 16u; // 12B + uint _depth : 16u; // 14B + PixelStorage _storage : 8u;// 15B + uint _dimension : 4u; + uint _pixel_stride_shift : 4u;// 16B + +public: + static constexpr auto block_size = FallbackTexture::block_size; + [[nodiscard]] const std::byte *data() const noexcept { return _data; } + [[nodiscard]] PixelStorage storage() const noexcept { return _storage; } + [[nodiscard]] size_t size_bytes() const noexcept { return pixel_storage_size(storage(), size3d()); } + +private: + [[nodiscard]] inline std::byte *_pixel2d(uint2 xy) const noexcept { + auto idx = xy.x + xy.y * _width; + return _data + (static_cast(idx) << _pixel_stride_shift); + } + + [[nodiscard]] inline std::byte *_pixel3d(uint3 xyz) const noexcept { + auto idx = xyz.x + xyz.y * _width + xyz.z * _width * _height; + return _data + (static_cast(idx) << _pixel_stride_shift); + } + + [[nodiscard]] inline auto _out_of_bounds(uint2 xy) const noexcept { + return !(xy[0] < _width & xy[1] < _height); + } + + [[nodiscard]] inline auto _out_of_bounds(uint3 xyz) const noexcept { + return !(xyz[0] < _width & xyz[1] < _height & xyz[2] < _depth); + } + +private: + friend class FallbackTexture; + + FallbackTextureView(std::byte *data, uint dim, uint w, uint h, uint d, + PixelStorage storage, uint pixel_stride_shift) noexcept + : _data(data), _width{w}, _height{h}, _depth{d}, _storage(storage), + _dimension{dim}, _pixel_stride_shift(pixel_stride_shift) { + } + +public: + template + [[nodiscard]] inline Vector read2d(uint2 xy) const noexcept { + if (_out_of_bounds(xy)) [[unlikely]] { return {}; } + return detail::read_pixel(_storage, _pixel2d(xy)); + } + + template + [[nodiscard]] inline Vector read3d(uint3 xyz) const noexcept { + if (_out_of_bounds(xyz)) [[unlikely]] { return {}; } + return detail::read_pixel(_storage, _pixel3d(xyz)); + } + + template + inline void write2d(uint2 xy, Vector value) const noexcept { + if (_out_of_bounds(xy)) [[unlikely]] { return; } + detail::write_pixel(_storage, _pixel2d(xy), value); + } - [[nodiscard]] float4 bindless_texture_3d_sample(const FallbackTexture* tex, uint sampler, float u, float v, - float w) noexcept; + template + inline void write3d(uint3 xyz, Vector value) const noexcept { + if (_out_of_bounds(xyz)) [[unlikely]] { return; } + detail::write_pixel(_storage, _pixel3d(xyz), value); + } + + [[nodiscard]] uint2 size2d() const noexcept { return make_uint2(_width, _height); } + [[nodiscard]] uint3 size3d() const noexcept { return make_uint3(_width, _height, _depth); } - [[nodiscard]] float4 bindless_texture_2d_sample_level(const FallbackTexture* tex, uint sampler, float u, float v, - float lod) noexcept; + void copy_from(const void *data) const noexcept; + + void copy_to(void *data) const noexcept; - [[nodiscard]] float4 bindless_texture_3d_sample_level(const FallbackTexture* tex, uint sampler, float u, float v, - float w, float lod) noexcept; + void copy_from(FallbackTextureView dst) const noexcept; +}; - [[nodiscard]] float4 bindless_texture_2d_sample_grad(const FallbackTexture* tex, uint sampler, float u, float v, - int64_t dpdx, int64_t dpdy) noexcept; +static_assert(sizeof(FallbackTextureView) == 16u); - [[nodiscard]] float4 bindless_texture_3d_sample_grad(const FallbackTexture* tex, uint sampler, float u, float v, - float w, int64_t dudxy, int64_t dvdxy, int64_t dwdxy) noexcept; -} // namespace luisa::compute::llvm +}// namespace luisa::compute::fallback diff --git a/src/backends/fallback/fallback_texture_bc.cpp b/src/backends/fallback/fallback_texture_bc.cpp index 6bb3c99af..5dd433cb6 100644 --- a/src/backends/fallback/fallback_texture_bc.cpp +++ b/src/backends/fallback/fallback_texture_bc.cpp @@ -667,170 +667,192 @@ void BC7Block::Decode(int x, int y, float *out) const noexcept { const uint8_t uMode = uint8_t(uFirst - 1); if (uMode < 8) { - const uint8_t uPartitions = ms_aInfo[uMode].uPartitions; - assert(uPartitions < BC7_MAX_REGIONS); - LUISA_ASSUME(uPartitions < BC7_MAX_REGIONS); - - auto const uNumEndPts = static_cast((unsigned(uPartitions) + 1u) << 1); - const uint8_t uIndexPrec = ms_aInfo[uMode].uIndexPrec; - const uint8_t uIndexPrec2 = ms_aInfo[uMode].uIndexPrec2; - size_t uStartBit = size_t(uMode) + 1; - uint8_t P[6]; - const uint8_t uShape = GetBits(uStartBit, ms_aInfo[uMode].uPartitionBits); - assert(uShape < BC7_MAX_SHAPES); - LUISA_ASSUME(uShape < BC7_MAX_SHAPES); - - const uint8_t uRotation = GetBits(uStartBit, ms_aInfo[uMode].uRotationBits); - assert(uRotation < 4); - - const uint8_t uIndexMode = GetBits(uStartBit, ms_aInfo[uMode].uIndexModeBits); - assert(uIndexMode < 2); - - LDRColorA c[BC7_MAX_REGIONS << 1]; - const LDRColorA RGBAPrec = ms_aInfo[uMode].RGBAPrec; - const LDRColorA RGBAPrecWithP = ms_aInfo[uMode].RGBAPrecWithP; - - assert(uNumEndPts <= (BC7_MAX_REGIONS << 1)); - - // Red channel - for (unsigned i = 0; i < uNumEndPts; i++) { - if (uStartBit + RGBAPrec.r > 128) { + const uint8_t uPartitions = ms_aInfo[uMode].uPartitions; + assert(uPartitions < BC7_MAX_REGIONS); + LUISA_ASSUME(uPartitions < BC7_MAX_REGIONS); + + auto const uNumEndPts = static_cast((unsigned(uPartitions) + 1u) << 1); + const uint8_t uIndexPrec = ms_aInfo[uMode].uIndexPrec; + const uint8_t uIndexPrec2 = ms_aInfo[uMode].uIndexPrec2; + size_t uStartBit = size_t(uMode) + 1; + uint8_t P[6]; + const uint8_t uShape = GetBits(uStartBit, ms_aInfo[uMode].uPartitionBits); + assert(uShape < BC7_MAX_SHAPES); + LUISA_ASSUME(uShape < BC7_MAX_SHAPES); + + const uint8_t uRotation = GetBits(uStartBit, ms_aInfo[uMode].uRotationBits); + assert(uRotation < 4); + + const uint8_t uIndexMode = GetBits(uStartBit, ms_aInfo[uMode].uIndexModeBits); + assert(uIndexMode < 2); + + LDRColorA c[BC7_MAX_REGIONS << 1]; + const LDRColorA RGBAPrec = ms_aInfo[uMode].RGBAPrec; + const LDRColorA RGBAPrecWithP = ms_aInfo[uMode].RGBAPrecWithP; + + assert(uNumEndPts <= (BC7_MAX_REGIONS << 1)); + + // Red channel + for (unsigned i = 0; i < uNumEndPts; i++) { + if (uStartBit + RGBAPrec.r > 128) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } + ZeroOutPixel(out); + return; + } - c[i].r = GetBits(uStartBit, RGBAPrec.r); - } + c[i].r = GetBits(uStartBit, RGBAPrec.r); + } - // Green channel - for (unsigned i = 0; i < uNumEndPts; i++) { - if (uStartBit + RGBAPrec.g > 128) { + // Green channel + for (unsigned i = 0; i < uNumEndPts; i++) { + if (uStartBit + RGBAPrec.g > 128) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } + ZeroOutPixel(out); + return; + } - c[i].g = GetBits(uStartBit, RGBAPrec.g); - } + c[i].g = GetBits(uStartBit, RGBAPrec.g); + } - // Blue channel - for (unsigned i = 0; i < uNumEndPts; i++) { - if (uStartBit + RGBAPrec.b > 128) { + // Blue channel + for (unsigned i = 0; i < uNumEndPts; i++) { + if (uStartBit + RGBAPrec.b > 128) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } + ZeroOutPixel(out); + return; + } - c[i].b = GetBits(uStartBit, RGBAPrec.b); - } + c[i].b = GetBits(uStartBit, RGBAPrec.b); + } - // Alpha channel - for (unsigned i = 0; i < uNumEndPts; i++) { - if (uStartBit + RGBAPrec.a > 128) { + // Alpha channel + for (unsigned i = 0; i < uNumEndPts; i++) { + if (uStartBit + RGBAPrec.a > 128) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } - - c[i].a = RGBAPrec.a ? GetBits(uStartBit, RGBAPrec.a) : 255u; - } - - // P-bits - assert(ms_aInfo[uMode].uPBits <= 6); - LUISA_ASSUME(ms_aInfo[uMode].uPBits <= 6); - for (unsigned i = 0; i < ms_aInfo[uMode].uPBits; i++) { - if (uStartBit > 127) { + ZeroOutPixel(out); + return; + } + + c[i].a = RGBAPrec.a ? GetBits(uStartBit, RGBAPrec.a) : 255u; + } + + // P-bits + assert(ms_aInfo[uMode].uPBits <= 6); + LUISA_ASSUME(ms_aInfo[uMode].uPBits <= 6); + for (unsigned i = 0; i < ms_aInfo[uMode].uPBits; i++) { + if (uStartBit > 127) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } - - P[i] = GetBit(uStartBit); - } - - if (ms_aInfo[uMode].uPBits) { - for (unsigned i = 0; i < uNumEndPts; i++) { - size_t pi = i * ms_aInfo[uMode].uPBits / uNumEndPts; - for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) { - if (RGBAPrec[ch] != RGBAPrecWithP[ch]) { - c[i][ch] = static_cast((unsigned(c[i][ch]) << 1) | P[pi]); - } - } - } - } - - for (unsigned i = 0; i < uNumEndPts; i++) { + ZeroOutPixel(out); + return; + } + + P[i] = GetBit(uStartBit); + } + + if (ms_aInfo[uMode].uPBits) { + for (unsigned i = 0; i < uNumEndPts; i++) { + size_t pi = i * ms_aInfo[uMode].uPBits / uNumEndPts; + for (uint8_t ch = 0; ch < BC7_NUM_CHANNELS; ch++) { + if (RGBAPrec[ch] != RGBAPrecWithP[ch]) { + c[i][ch] = static_cast((unsigned(c[i][ch]) << 1) | P[pi]); + } + } + } + } + + for (unsigned i = 0; i < uNumEndPts; i++) { #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wstringop-overflow" #endif - c[i] = Unquantize(c[i], RGBAPrecWithP); + c[i] = Unquantize(c[i], RGBAPrecWithP); #ifdef __GNUC_ #pragma GCC diagnostic pop #endif - } + } - uint8_t w1, w2; + uint8_t w1[NUM_PIXELS_PER_BLOCK], w2[NUM_PIXELS_PER_BLOCK]; - // read color indices - const size_t uNumBits = IsFixUpOffset(ms_aInfo[uMode].uPartitions, uShape, pos) ? uIndexPrec - 1u : uIndexPrec; - if (uStartBit + uNumBits > 128) { + // read color indices + for (int i = 0; i < NUM_PIXELS_PER_BLOCK; i++) { + const size_t uNumBits = IsFixUpOffset(ms_aInfo[uMode].uPartitions, uShape, i) ? uIndexPrec - 1u + : uIndexPrec; + if (uStartBit + uNumBits > 128) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } - w1 = GetBits(uStartBit, uNumBits); - - // read alpha indices - if (uIndexPrec2) { - const size_t uNumBits = pos ? uIndexPrec2 : uIndexPrec2 - 1u; - if (uStartBit + uNumBits > 128) { + ZeroOutPixel(out); + return; + } + w1[i] = GetBits(uStartBit, uNumBits); + } + + // read alpha indices + if (uIndexPrec2) { + for (int i = 0; i < NUM_PIXELS_PER_BLOCK; i++) { + const size_t uNumBits = i ? uIndexPrec2 : uIndexPrec2 - 1u; + if (uStartBit + uNumBits > 128) { #if defined(_WIN32) && defined(_DEBUG) - OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); + OutputDebugStringA("BC7: Invalid block encountered during decoding\n"); #endif - ZeroOutPixel(out); - return; - } - w2 = GetBits(uStartBit, uNumBits); - } - - const uint8_t uRegion = g_aPartitionTable[uPartitions][uShape][pos]; - LDRColorA outPixel; - if (uIndexPrec2 == 0) { - LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w1, w1, uIndexPrec, uIndexPrec, outPixel); - } else { - if (uIndexMode == 0) { - LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w1, w2, uIndexPrec, uIndexPrec2, outPixel); - } else { - LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w2, w1, uIndexPrec2, uIndexPrec, outPixel); - } - } - - switch (uRotation) { - case 1: std::swap(outPixel.r, outPixel.a); break; - case 2: std::swap(outPixel.g, outPixel.a); break; - case 3: std::swap(outPixel.b, outPixel.a); break; - default: break; - } - - out[0] = outPixel.r * (1.0f / 255.0f); - out[1] = outPixel.g * (1.0f / 255.0f); - out[2] = outPixel.b * (1.0f / 255.0f); - out[3] = outPixel.a * (1.0f / 255.0f); - } else { + ZeroOutPixel(out); + return; + } + w2[i] = GetBits(uStartBit, uNumBits); + } + } + + for (int i = 0; i < NUM_PIXELS_PER_BLOCK; ++i) { + if (i != pos) + continue; + const uint8_t uRegion = g_aPartitionTable[uPartitions][uShape][i]; + LDRColorA outPixel; + if (uIndexPrec2 == 0) { + LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w1[i], w1[i], uIndexPrec, uIndexPrec, + outPixel); + } else { + if (uIndexMode == 0) { + LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w1[i], w2[i], uIndexPrec, + uIndexPrec2, outPixel); + } else { + LDRColorA::Interpolate(c[uRegion << 1], c[(uRegion << 1) + 1], w2[i], w1[i], uIndexPrec2, + uIndexPrec, outPixel); + } + } + + switch (uRotation) { + case 1: + std::swap(outPixel.r, outPixel.a); + break; + case 2: + std::swap(outPixel.g, outPixel.a); + break; + case 3: + std::swap(outPixel.b, outPixel.a); + break; + default: + break; + } + + out[0] = outPixel.r * (1.0f / 255.0f); + out[1] = outPixel.g * (1.0f / 255.0f); + out[2] = outPixel.b * (1.0f / 255.0f); + out[3] = outPixel.a * (1.0f / 255.0f); + break; + } + } + else [[unlikely]] + { #if defined(_WIN32) && defined(_DEBUG) OutputDebugStringA("BC7: Reserved mode 8 encountered during decoding\n"); #endif diff --git a/src/backends/fallback/fallback_texture_bc.h b/src/backends/fallback/fallback_texture_bc.h index b59e01d39..e85256f1a 100644 --- a/src/backends/fallback/fallback_texture_bc.h +++ b/src/backends/fallback/fallback_texture_bc.h @@ -198,7 +198,7 @@ inline HDRColorA *HDRColorALerp(HDRColorA *pOut, const HDRColorA *pC1, const HDR return pOut; } -#pragma pack(push, 1) +// #pragma pack(push, 1) // BC1/DXT1 compression (4 bits per texel) struct D3DX_BC1 { uint16_t rgb[2];// 565 colors diff --git a/src/backends/fallback/fallback_texture_sampling.cpp b/src/backends/fallback/fallback_texture_sampling.cpp deleted file mode 100644 index ebc3152b0..000000000 --- a/src/backends/fallback/fallback_texture_sampling.cpp +++ /dev/null @@ -1,404 +0,0 @@ -// -// Created by swfly on 2024/11/16. -// - -#include "fallback_texture.h" -#include "fallback_texture_bc.h" -#include "llvm_abi.h" - -//swfly tries to write more about sampling bc textures -namespace luisa::compute::fallback -{ - void texture_write_2d_float_wrapper(void* ptr, uint x, uint y, void* val) - { - auto b = static_cast(val); - auto view = reinterpret_cast(ptr); - texture_write_2d_float(reinterpret_cast(ptr), x, y, *(float4 *) val); - } - - void texture_read_2d_float_wrapper(void* ptr, uint x, uint y, void* out) - { - *(float4 *) out = texture_read_2d_float(reinterpret_cast(ptr), x, y); - } - - void texture_write_2d_uint_wrapper(void* ptr, uint x, uint y, void* val) - { - auto b = static_cast(val); - auto view = reinterpret_cast(ptr); - texture_write_2d_uint(reinterpret_cast(ptr), x, y, *(uint4 *) val); - } - - void texture_read_2d_uint_wrapper(void* ptr, uint x, uint y, void* out) - { - *(uint4 *) out = texture_read_2d_uint(reinterpret_cast(ptr), x, y); - } - - void luisa_bc7_read(const FallbackTextureView* tex, uint x, uint y, float4& out) noexcept - { - auto block_pos = make_uint2(x / 4, y / 4); - auto block_per_row = tex->size2d().x / 4; - const bc::BC7Block* bc_block = reinterpret_cast(tex->data()) + ( - block_pos.x + block_pos.y * block_per_row); - bc_block->Decode(x % 4, y % 4, reinterpret_cast(&out)); - } - - void luisa_bc6h_read(const FallbackTextureView* tex, int x, int y, float4& out) noexcept - { - auto block_pos = make_uint2(x / 4, y / 4); - auto block_per_row = tex->size2d().x / 4; - const bc::BC6HBlock* bc_block = reinterpret_cast(tex->data()) + ( - block_pos.x + block_pos.y * block_per_row); - bc_block->Decode(false, x % 4, y % 4, reinterpret_cast(&out)); - } - - int4 fallback::texture_read_2d_int(const FallbackTextureView* tex, uint x, uint y) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - float4 out; - luisa_bc7_read(tex, x, y, out); - return make_int4(out.x * 255.f, out.y * 255.f, out.z * 255.f, out.w * 255.f); - } - case PixelStorage::BC6: - { - float4 out; - luisa_bc6h_read(tex, x, y, out); - return make_int4(out.x * 255.f, out.y * 255.f, out.z * 255.f, out.w * 255.f); - } - default: - return tex->read2d(make_uint2(x, y)); - } - } - - int4 fallback::texture_read_3d_int(const FallbackTextureView* tex, uint x, uint y, uint z) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - LUISA_ERROR("Block compression doesn't work for 3D texture"); - return make_int4(0); - } - case PixelStorage::BC6: - { - LUISA_ERROR("Block compression doesn't work for 3D texture"); - return make_int4(0); - } - default: - return tex->read2d(make_uint2(x, y)); - } - } - - uint4 fallback::texture_read_2d_uint(const FallbackTextureView* tex, uint x, uint y) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - float4 out; - luisa_bc7_read(tex, x, y, out); - return make_uint4(out.x * 255.f, out.y * 255.f, out.z * 255.f, out.w * 255.f); - } - case PixelStorage::BC6: - { - float4 out; - luisa_bc6h_read(tex, x, y, out); - return make_uint4(out.x * 255.f, out.y * 255.f, out.z * 255.f, out.w * 255.f); - } - default: - return tex->read2d(make_uint2(x, y)); - } - } - - uint4 fallback::texture_read_3d_uint(const FallbackTextureView* tex, uint x, uint y, uint z) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - LUISA_ERROR("Block compression doesn't work for 3D texture"); - return make_uint4(0); - } - case PixelStorage::BC6: - { - LUISA_ERROR("Block compression doesn't work for 3D texture"); - return make_uint4(0); - } - default: - return tex->read3d(make_uint3(x, y, z)); - } - } - - float4 fallback::texture_read_2d_float(const FallbackTextureView* tex, uint x, uint y) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - float4 out; - luisa_bc7_read(tex, x, y, out); - return out; - } - case PixelStorage::BC6: - { - float4 out; - luisa_bc6h_read(tex, x, y, out); - return out; - } - default: - return tex->read2d(make_uint2(x, y)); - } - } - - void fallback::texture_write_2d_float(const FallbackTextureView* tex, uint x, uint y, float4 value) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - LUISA_ERROR("cannot write to BC texture"); - break; - } - case PixelStorage::BC6: - { - LUISA_ERROR("cannot write to BC texture"); - break; - } - default: - return tex->write2d(make_uint2(x, y), value); - } - } - void fallback::texture_write_2d_uint(const FallbackTextureView* tex, uint x, uint y, uint4 value) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - LUISA_ERROR("cannot write to BC texture"); - break; - } - case PixelStorage::BC6: - { - LUISA_ERROR("cannot write to BC texture"); - break; - } - default: - return tex->write2d(make_uint2(x, y), value); - } - } - - float4 fallback::texture_read_3d_float(const FallbackTextureView* tex, uint x, uint y, uint z) noexcept - { - switch (tex->storage()) - { - case PixelStorage::BC7: - { - LUISA_ERROR("Block compression doesn't work for 3D texture"); - return make_float4(0.f); - } - case PixelStorage::BC6: - { - LUISA_ERROR("Block compression doesn't work for 3D texture"); - return make_float4(0.f); - } - default: - return tex->read3d(make_uint3(x, y, z)); - } - } - - - float4 fallback::bindless_texture_2d_read(const FallbackTexture* tex, uint level, uint x, uint y) noexcept - { - auto view = tex->view(level); - return texture_read_2d_float(&view, x, y); - } - - float4 fallback::bindless_texture_3d_read(const FallbackTexture* tex, uint level, uint x, uint y, uint z) noexcept - { - auto view = tex->view(level); - return texture_read_3d_float(&view, x, y, z); - } - - - //2D sampling - template - [[nodiscard]] inline auto texture_coord_point(Sampler::Address address, const T& uv, T s) noexcept - { - switch (address) - { - case Sampler::Address::EDGE: return luisa::clamp(uv, 0.0f, one_minus_epsilon) * s; - case Sampler::Address::REPEAT: return luisa::fract(uv) * s; - case Sampler::Address::MIRROR: - { - auto uv0 = luisa::fmod(luisa::abs(uv), T{2.0f}); - uv0 = select(2.f - uv, uv, uv < T{1.f}); - return luisa::min(uv, one_minus_epsilon) * s; - } - case Sampler::Address::ZERO: return luisa::select(uv * s, T{65536.f}, uv < 0.f || uv >= 1.f); - } - return T{65536.f}; - } - - [[nodiscard]] inline auto texture_sample_point(FallbackTextureView* view, Sampler::Address address, - const float2& uv) noexcept - { - auto size = make_float2(view->size2d()); - auto c = make_uint2(texture_coord_point(address, uv, size)); - return texture_read_2d_float(view, c.x, c.y); - } - - [[nodiscard]] inline auto texture_coord_linear(Sampler::Address address, float2 uv, const float2& size) noexcept - { - auto s = make_float2(size); - auto inv_s = 1.f / s; - auto c_min = texture_coord_point(address, uv - .5f * inv_s, s); - auto c_max = texture_coord_point(address, uv + .5f * inv_s, s); - return std::make_pair(luisa::min(c_min, c_max), luisa::max(c_min, c_max)); - } - - [[nodiscard]] inline auto texture_sample_linear(FallbackTextureView* view, Sampler::Address address, - const float2& uv) noexcept - { - auto size = make_float2(view->size2d()); - auto [st_min, st_max] = texture_coord_linear(address, uv, size); - auto t = luisa::fract(st_max); - auto c0 = make_uint2(st_min); - auto c1 = make_uint2(st_max); - auto v00 = texture_read_2d_float(view, c0.x, c0.y); - auto v01 = texture_read_2d_float(view, c1.x, c0.y); - auto v10 = texture_read_2d_float(view, c0.x, c1.y); - auto v11 = texture_read_2d_float(view, c1.x, c1.y); - return luisa::lerp(luisa::lerp(v00, v01, t.x), - luisa::lerp(v10, v11, t.x), t.y); - } - - float4 fallback::bindless_texture_2d_sample(const FallbackTexture* tex, uint sampler, float u, float v) noexcept - { - auto s = Sampler::decode(sampler); - auto view = tex->view(0); - return s.filter() == Sampler::Filter::POINT - ? texture_sample_point(&view, s.address(), make_float2(u, v)) - : texture_sample_linear(&view, s.address(), make_float2(u, v)); - } - - float4 bindless_texture_2d_sample_level(const FallbackTexture* tex, uint sampler, float u, float v, - float lod) noexcept - { - auto s = Sampler::decode(sampler); - auto filter = s.filter(); - if (lod <= 0.f || tex->mip_levels() == 0u || - filter == Sampler::Filter::POINT) - { - return bindless_texture_2d_sample(tex, sampler, u, v); - } - auto level0 = std::min(static_cast(lod), - tex->mip_levels() - 1u); - auto view0 = tex->view(level0); - auto v0 = texture_sample_linear( - &view0, s.address(), make_float2(u, v)); - if (level0 == tex->mip_levels() - 1u || - filter == Sampler::Filter::LINEAR_POINT) - { - return v0; - } - auto view1 = tex->view(level0 + 1); - auto v1 = texture_sample_linear( - &view1, s.address(), make_float2(u, v)); - return luisa::lerp(v0, v1, luisa::fract(lod)); - } - - //swfly: im too lazy to do this. complete it someday - float4 bindless_texture_2d_sample_grad(const FallbackTexture* tex, uint sampler, float u, float v, int64_t dpdx, - int64_t dpdy) noexcept - { - return bindless_texture_2d_sample(tex, sampler, u, v); - } - - //3D sampling - [[nodiscard]] inline auto texture_sample_point(FallbackTextureView* view, Sampler::Address address, - float3 uv) noexcept - { - auto size = make_float3(view->size3d()); - auto c = make_uint3(texture_coord_point(address, uv, size)); - return texture_read_3d_float(view, c.x, c.y, c.z); - } - - [[nodiscard]] inline auto texture_coord_linear(Sampler::Address address, float3 uv, float3 size) noexcept - { - auto s = make_float3(size); - auto inv_s = 1.f / s; - auto c_min = texture_coord_point(address, uv - .5f * inv_s, s); - auto c_max = texture_coord_point(address, uv + .5f * inv_s, s); - return std::make_pair(luisa::min(c_min, c_max), luisa::max(c_min, c_max)); - } - - [[nodiscard]] inline auto texture_sample_linear(FallbackTextureView* view, Sampler::Address address, - float3 uvw) noexcept - { - auto size = make_float3(view->size3d()); - auto [st_min, st_max] = texture_coord_linear(address, uvw, size); - auto t = luisa::fract(st_max); - auto c0 = make_uint3(st_min); - auto c1 = make_uint3(st_max); - auto v000 = texture_read_3d_float(view, c0.x, c0.y, c0.z); - auto v001 = texture_read_3d_float(view, c1.x, c0.y, c0.z); - auto v010 = texture_read_3d_float(view, c0.x, c1.y, c0.z); - auto v011 = texture_read_3d_float(view, c1.x, c1.y, c0.z); - auto v100 = texture_read_3d_float(view, c0.x, c0.y, c1.z); - auto v101 = texture_read_3d_float(view, c1.x, c0.y, c1.z); - auto v110 = texture_read_3d_float(view, c0.x, c1.y, c1.z); - auto v111 = texture_read_3d_float(view, c1.x, c1.y, c1.z); - return luisa::lerp( - luisa::lerp(luisa::lerp(v000, v001, t.x), - luisa::lerp(v010, v011, t.x), t.y), - luisa::lerp(luisa::lerp(v100, v101, t.x), - luisa::lerp(v110, v111, t.x), t.y), - t.z); - } - - float4 fallback::bindless_texture_3d_sample(const FallbackTexture* tex, uint sampler, float u, float v, - float w) noexcept - { - auto s = Sampler::decode(sampler); - auto view = tex->view(0); - return s.filter() == Sampler::Filter::POINT - ? texture_sample_point(&view, s.address(), make_float3(u, v, w)) - : texture_sample_linear(&view, s.address(), make_float3(u, v, w)); - } - - float4 bindless_texture_3d_sample_level(const FallbackTexture* tex, uint sampler, float u, float v, float w, - float lod) noexcept - { - auto s = Sampler::decode(sampler); - auto filter = s.filter(); - if (lod <= 0.f || tex->mip_levels() == 0u || - filter == Sampler::Filter::POINT) - { - return bindless_texture_3d_sample(tex, sampler, u, v, w); - } - auto level0 = std::min(static_cast(lod), - tex->mip_levels() - 1u); - auto view0 = tex->view(level0); - auto v0 = texture_sample_linear( - &view0, s.address(), make_float3(u, v, w)); - if (level0 == tex->mip_levels() - 1u || - filter == Sampler::Filter::LINEAR_POINT) - { - return v0; - } - auto view1 = tex->view(level0 + 1); - auto v1 = texture_sample_linear( - &view1, s.address(), make_float3(u, v, w)); - return luisa::lerp(v0, v1, luisa::fract(lod)); - } - - - //swfly: im too lazy to do this. complete it someday - float4 bindless_texture_3d_sample_grad(const FallbackTexture* tex, uint sampler, float u, float v, float w, - int64_t dudxy, int64_t dvdxy, int64_t dwdxy) noexcept - { - return bindless_texture_3d_sample(tex, sampler, u, v, w); - } -} // namespace luisa::compute::fallback diff --git a/src/backends/fallback/llvm_abi.h b/src/backends/fallback/llvm_abi.h deleted file mode 100644 index e812e777d..000000000 --- a/src/backends/fallback/llvm_abi.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Created by mike on 22-6-9. -// - -#pragma once - -#include -#include - -namespace luisa::compute::fallback::detail { - -[[nodiscard]] inline auto decode_float4(int64_t v0, int64_t v1) noexcept { - return luisa::bit_cast(std::array{v0, v1}); -} - -[[nodiscard]] inline auto decode_int4(int64_t v0, int64_t v1) noexcept { - return luisa::bit_cast(std::array{v0, v1}); -} - -[[nodiscard]] inline auto decode_uint4(int64_t v0, int64_t v1) noexcept { - return luisa::bit_cast(std::array{v0, v1}); -} - -[[nodiscard]] inline auto decode_uint3(int64_t v0, int64_t v1) noexcept { - return luisa::bit_cast(std::array{v0, v1}); -} - -[[nodiscard]] inline auto decode_uint2(int64_t x) noexcept { - return luisa::bit_cast(x); -} - -[[nodiscard]] inline auto decode_float2(int64_t x) noexcept { - return luisa::bit_cast(x); -} - -[[nodiscard]] inline auto encode_int4(int4 x) noexcept { - return luisa::bit_cast(x); -} - -[[nodiscard]] inline auto encode_uint4(uint4 x) noexcept { - return luisa::bit_cast(x); -} - -[[nodiscard]] inline auto encode_float4(float4 x) noexcept { - return luisa::bit_cast(x); -} - -}// namespace luisa::compute::llvm::detail diff --git a/src/backends/fallback/llvm_codegen.cpp b/src/backends/fallback/llvm_codegen.cpp deleted file mode 100644 index 7afe3e056..000000000 --- a/src/backends/fallback/llvm_codegen.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#include "llvm_codegen.h" - -namespace luisa::compute::fallback { - -LLVMCodegen::LLVMCodegen(::llvm::LLVMContext &ctx) noexcept - : _context{ctx} {} - -std::unique_ptr<::llvm::Module> LLVMCodegen::emit(Function f) noexcept { - auto module_name = luisa::format("module_{:016x}", f.hash()); - auto module = std::make_unique<::llvm::Module>( - ::llvm::StringRef{module_name.data(), module_name.size()}, _context); - _module = module.get(); - static_cast(_create_function(f)); - for (auto &&func : _module->functions()) { - for (auto &&bb : func) { - for (auto &&inst : bb) { - if (::llvm::isa<::llvm::FPMathOperator>(&inst)) { - inst.setFast(true); - } - } - } - } - _module = nullptr; - _constants.clear(); - _struct_types.clear(); - return module; -} - -LLVMCodegen::FunctionContext *LLVMCodegen::_current_context() noexcept { - LUISA_ASSERT(!_function_stack.empty(), "Empty function context stack."); - return _function_stack.back().get(); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen.h b/src/backends/fallback/llvm_codegen.h deleted file mode 100644 index 4ceb5c982..000000000 --- a/src/backends/fallback/llvm_codegen.h +++ /dev/null @@ -1,345 +0,0 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if LLVM_VERSION_MAJOR >= 14 -#include -#else -#include -#endif - -#include -#include -#include -#include -#include -#include - -namespace luisa::compute::llvm { - -class LLVMCodegen : public StmtVisitor { - -public: - static constexpr auto accel_handle_size = sizeof(LLVMAccel::Handle); - static constexpr auto buffer_handle_size = sizeof(const void *); - static constexpr auto texture_handle_size = sizeof(LLVMTextureView); - static constexpr auto bindless_array_handle_size = sizeof(const void *); - -private: - struct FunctionContext { - Function function; - ::llvm::Function *ir; - ::llvm::Value *ret; - ::llvm::BasicBlock *exit_block; - luisa::unique_ptr<::llvm::IRBuilder<>> builder; - luisa::unordered_map variables; - luisa::vector<::llvm::BasicBlock *> break_targets; - luisa::vector<::llvm::BasicBlock *> continue_targets; - luisa::vector<::llvm::SwitchInst *> switch_stack; - ::llvm::BasicBlock *coro_cleanup; - ::llvm::BasicBlock *coro_suspend; - FunctionContext(Function f, ::llvm::Function *ir, ::llvm::Value *ret, - ::llvm::BasicBlock *exit_block, - luisa::unique_ptr<::llvm::IRBuilder<>> builder, - luisa::unordered_map variables, - ::llvm::BasicBlock *coro_cleanup = nullptr, - ::llvm::BasicBlock *coro_suspend = nullptr) noexcept - : function{f}, ir{ir}, ret{ret}, exit_block{exit_block}, - builder{std::move(builder)}, variables{std::move(variables)}, - coro_cleanup{coro_cleanup}, coro_suspend{coro_suspend} {} - }; - -private: - struct LLVMStruct { - ::llvm::StructType *type; - luisa::vector member_indices; - }; - -private: - ::llvm::LLVMContext &_context; - ::llvm::Module *_module{nullptr}; - luisa::unordered_map _struct_types; - luisa::unordered_map _constants; - luisa::vector> _function_stack; - -private: - void _emit_function() noexcept; - [[nodiscard]] luisa::string _variable_name(Variable v) const noexcept; - [[nodiscard]] luisa::string _function_name(Function f) const noexcept; - [[nodiscard]] ::llvm::Function *_create_function(Function f) noexcept; - [[nodiscard]] luisa::unique_ptr _create_kernel_program(Function f) noexcept; - [[nodiscard]] luisa::unique_ptr _create_kernel_context(Function f) noexcept; - [[nodiscard]] luisa::unique_ptr _create_callable_context(Function f) noexcept; - [[nodiscard]] ::llvm::Type *_create_type(const Type *t) noexcept; - [[nodiscard]] ::llvm::Type *_bindless_item_type() noexcept; - [[nodiscard]] ::llvm::Type *_bindless_texture_type() noexcept; - [[nodiscard]] ::llvm::Value *_create_expr(const Expression *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_unary_expr(const UnaryExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_binary_expr(const BinaryExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_member_expr(const MemberExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_access_expr(const AccessExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_literal_expr(const LiteralExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_ref_expr(const RefExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_constant_expr(const ConstantExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_call_expr(const CallExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_cast_expr(const CastExpr *expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_custom_op_expr(const CpuCustomOpExpr * expr) noexcept; - [[nodiscard]] ::llvm::Value *_create_alloca(::llvm::Type *t, luisa::string_view name) noexcept; - [[nodiscard]] ::llvm::Value *_create_stack_variable(::llvm::Value *v, luisa::string_view name = "") noexcept; - [[nodiscard]] FunctionContext *_current_context() noexcept; - void _create_assignment(const Type *dst_type, const Type *src_type, ::llvm::Value *p_dst, ::llvm::Value *p_src) noexcept; - - // built-in make_vector functions - [[nodiscard]] ::llvm::Value *_make_int2(::llvm::Value *px, ::llvm::Value *py) noexcept; - [[nodiscard]] ::llvm::Value *_make_int3(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz) noexcept; - [[nodiscard]] ::llvm::Value *_make_int4(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz, ::llvm::Value *pw) noexcept; - [[nodiscard]] ::llvm::Value *_make_bool2(::llvm::Value *px, ::llvm::Value *py) noexcept; - [[nodiscard]] ::llvm::Value *_make_bool3(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz) noexcept; - [[nodiscard]] ::llvm::Value *_make_bool4(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz, ::llvm::Value *pw) noexcept; - [[nodiscard]] ::llvm::Value *_make_float2(::llvm::Value *px, ::llvm::Value *py) noexcept; - [[nodiscard]] ::llvm::Value *_make_float3(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz) noexcept; - [[nodiscard]] ::llvm::Value *_make_float4(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz, ::llvm::Value *pw) noexcept; - [[nodiscard]] ::llvm::Value *_make_float2x2(::llvm::Value *p0, ::llvm::Value *p1) noexcept; - [[nodiscard]] ::llvm::Value *_make_float3x3(::llvm::Value *p0, ::llvm::Value *p1, ::llvm::Value *p2) noexcept; - [[nodiscard]] ::llvm::Value *_make_float4x4(::llvm::Value *p0, ::llvm::Value *p1, ::llvm::Value *p2, ::llvm::Value *p3) noexcept; - - // literals - [[nodiscard]] ::llvm::Value *_literal(int x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(uint x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(bool x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(int2 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(uint2 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(bool2 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float2 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(int3 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(uint3 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(bool3 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float3 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(int4 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(uint4 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(bool4 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float4 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float2x2 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float3x3 x) noexcept; - [[nodiscard]] ::llvm::Value *_literal(float4x4 x) noexcept; - - // constant data - [[nodiscard]] ::llvm::Value *_create_constant(ConstantData c) noexcept; - - // built-in short-cut logical operators - [[nodiscard]] ::llvm::Value *_short_circuit_and(const Expression *lhs, const Expression *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_short_circuit_or(const Expression *lhs, const Expression *rhs) noexcept; - - // built-in operators - [[nodiscard]] ::llvm::Value *_builtin_unary_plus(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_unary_minus(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_unary_not(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_unary_bit_not(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_and(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_or(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_xor(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_add(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sub(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_mul(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_div(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_mod(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_lt(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_le(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_gt(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_ge(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_eq(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_ne(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_shl(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_shr(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_add_matrix_scalar( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_add_scalar_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_add_matrix_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sub_matrix_scalar( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sub_scalar_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sub_matrix_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_mul_matrix_scalar( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_mul_scalar_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_mul_matrix_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_mul_matrix_vector( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_div_matrix_scalar( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_div_scalar_matrix( - const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept; - - // built-in cast operators - [[nodiscard]] ::llvm::Value *_builtin_static_cast(const Type *t_dst, const Type *t_src, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bitwise_cast(const Type *t_dst, const Type *t_src, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_scalar_to_bool(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_scalar_to_float(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_scalar_to_int(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_scalar_to_uint(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_scalar_to_vector(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_vector_to_vector(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_vector_to_bool_vector(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_vector_to_float_vector(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_vector_to_int_vector(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_vector_to_uint_vector(const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_scalar_to_matrix(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept; - [[nodiscard]] ::llvm::Value *_matrix_to_matrix(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept; - - // built-in functions - [[nodiscard]] ::llvm::Value *_create_builtin_call_expr(const Type *ret_type, CallOp op, luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_all(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_any(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_select(const Type *t_pred, const Type *t_value, ::llvm::Value *pred, - ::llvm::Value *v_true, ::llvm::Value *v_false) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_clamp(const Type *t, ::llvm::Value *v, ::llvm::Value *lo, ::llvm::Value *hi) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_saturate(const Type *t, ::llvm::Value *x) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_lerp(const Type *t, ::llvm::Value *a, ::llvm::Value *b, ::llvm::Value *x) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_step(const Type *t, ::llvm::Value *edge, ::llvm::Value *x) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_abs(const Type *t, ::llvm::Value *x) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_min(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_max(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_fma(const Type *t, ::llvm::Value *a, ::llvm::Value *b, ::llvm::Value *c) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_clz(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_ctz(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_popcount(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_reverse(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_isinf(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_isnan(const Type *t, ::llvm::Value *p) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_buffer_read(const Type *t_value, ::llvm::Value *buffer, ::llvm::Value *p_index) noexcept; - void _builtin_buffer_write(const Type *t_value, ::llvm::Value *buffer, ::llvm::Value *p_index, ::llvm::Value *p_value) noexcept; - void _builtin_assume(::llvm::Value *p) noexcept; - void _builtin_unreachable() noexcept; - [[nodiscard]] ::llvm::Value *_builtin_texture_read(const Type *t, ::llvm::Value *texture, - const Type *t_coord, ::llvm::Value *p_coord) noexcept; - void _builtin_texture_write(const Type *t, ::llvm::Value *texture, const Type *t_coord, - ::llvm::Value *p_coord, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sqrt(const Type *t, ::llvm::Value *x) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_rsqrt(const Type *t, ::llvm::Value *x) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_dot(const Type *t, ::llvm::Value *a, ::llvm::Value *b) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_length_squared(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_normalize(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_floor(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_fract(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_ceil(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_trunc(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_round(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sin(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_cos(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_tan(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_sinh(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_cosh(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_tanh(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_asinh(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_acosh(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atanh(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_exp(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_exp2(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_exp10(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_log(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_log2(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_log10(const Type *t, ::llvm::Value *v) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_pow(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_copysign(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_faceforward( - const Type *t, ::llvm::Value *n, ::llvm::Value *i, ::llvm::Value *nref) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_cross(const Type *t, ::llvm::Value *a, ::llvm::Value *b) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_make_vector2_overloaded(const Type *t_vec, luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_make_vector3_overloaded(const Type *t_vec, luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_make_vector4_overloaded(const Type *t_vec, luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_make_matrix2_overloaded(luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_make_matrix3_overloaded(luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_make_matrix4_overloaded(luisa::span args) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_exchange( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_desired) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_compare_exchange( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_expected, ::llvm::Value *p_desired) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_add( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_sub( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_and( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_or( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_xor( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_min( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_atomic_fetch_max( - const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_inverse(const Type *t, ::llvm::Value *pm) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_determinant(const Type *t, ::llvm::Value *pm) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_transpose(const Type *t, ::llvm::Value *pm) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_trace_closest(::llvm::Value *accel, ::llvm::Value *p_ray) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_trace_any(::llvm::Value *accel, ::llvm::Value *p_ray) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_instance_transform(::llvm::Value *accel, ::llvm::Value *p_index) noexcept; - void _builtin_set_instance_transform(::llvm::Value *accel, ::llvm::Value *p_index, ::llvm::Value *p_mat) noexcept; - void _builtin_set_instance_visibility(::llvm::Value *accel, ::llvm::Value *p_index, ::llvm::Value *p_vis) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_size2d(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_size3d(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_buffer_read(const Type *t, ::llvm::Value *p_items, - ::llvm::Value *p_buffer_index, ::llvm::Value *p_elem_index) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_read2d( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level, ::llvm::Value *p_uv) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_read3d( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level, ::llvm::Value *p_uvw) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_sample2d( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uv) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_sample3d( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uvw) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_sample2d_level( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uv, ::llvm::Value *p_lod) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_sample3d_level( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uvw, ::llvm::Value *p_lod) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_sample2d_grad( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uv, ::llvm::Value *p_dpdx, ::llvm::Value *p_dpdy) noexcept; - [[nodiscard]] ::llvm::Value *_builtin_bindless_texture_sample3d_grad( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uvw, ::llvm::Value *p_dpdx, ::llvm::Value *p_dpdy) noexcept; - void _builtin_synchronize_block() noexcept; - -public: - explicit LLVMCodegen(::llvm::LLVMContext &ctx) noexcept; - void visit(const BreakStmt *stmt) override; - void visit(const ContinueStmt *stmt) override; - void visit(const ReturnStmt *stmt) override; - void visit(const ScopeStmt *stmt) override; - void visit(const IfStmt *stmt) override; - void visit(const LoopStmt *stmt) override; - void visit(const ExprStmt *stmt) override; - void visit(const SwitchStmt *stmt) override; - void visit(const SwitchCaseStmt *stmt) override; - void visit(const SwitchDefaultStmt *stmt) override; - void visit(const AssignStmt *stmt) override; - void visit(const ForStmt *stmt) override; - void visit(const CommentStmt *stmt) override; - [[nodiscard]] std::unique_ptr<::llvm::Module> emit(Function f) noexcept; -}; - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen_builtin.cpp b/src/backends/fallback/llvm_codegen_builtin.cpp deleted file mode 100644 index 9ba591833..000000000 --- a/src/backends/fallback/llvm_codegen_builtin.cpp +++ /dev/null @@ -1,2976 +0,0 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#include - -#include -#include -#include - -namespace luisa::compute::fallback { - -[[nodiscard]] static Function float2x2_inverse() noexcept { - static Callable inverse = [](Float2x2 m) noexcept { - auto inv_det = 1.0f / (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - return inv_det * make_float2x2(m[1][1], -m[0][1], -m[1][0], +m[0][0]); - }; - return inverse.function(); -} - -[[nodiscard]] static Function float3x3_inverse() noexcept { - static Callable inverse = [](Float3x3 m) noexcept { - auto inv_det = 1.0f / - (m[0].x * (m[1].y * m[2].z - m[2].y * m[1].z) - - m[1].x * (m[0].y * m[2].z - m[2].y * m[0].z) + - m[2].x * (m[0].y * m[1].z - m[1].y * m[0].z)); - auto mm = make_float3x3( - m[1].y * m[2].z - m[2].y * m[1].z, - m[2].y * m[0].z - m[0].y * m[2].z, - m[0].y * m[1].z - m[1].y * m[0].z, - m[2].x * m[1].z - m[1].x * m[2].z, - m[0].x * m[2].z - m[2].x * m[0].z, - m[1].x * m[0].z - m[0].x * m[1].z, - m[1].x * m[2].y - m[2].x * m[1].y, - m[2].x * m[0].y - m[0].x * m[2].y, - m[0].x * m[1].y - m[1].x * m[0].y); - return inv_det * mm; - }; - return inverse.function(); -} - -[[nodiscard]] static Function float4x4_inverse() noexcept { - static Callable inverse = [](Float4x4 m) noexcept { - auto coef00 = m[2].z * m[3].w - m[3].z * m[2].w; - auto coef02 = m[1].z * m[3].w - m[3].z * m[1].w; - auto coef03 = m[1].z * m[2].w - m[2].z * m[1].w; - auto coef04 = m[2].y * m[3].w - m[3].y * m[2].w; - auto coef06 = m[1].y * m[3].w - m[3].y * m[1].w; - auto coef07 = m[1].y * m[2].w - m[2].y * m[1].w; - auto coef08 = m[2].y * m[3].z - m[3].y * m[2].z; - auto coef10 = m[1].y * m[3].z - m[3].y * m[1].z; - auto coef11 = m[1].y * m[2].z - m[2].y * m[1].z; - auto coef12 = m[2].x * m[3].w - m[3].x * m[2].w; - auto coef14 = m[1].x * m[3].w - m[3].x * m[1].w; - auto coef15 = m[1].x * m[2].w - m[2].x * m[1].w; - auto coef16 = m[2].x * m[3].z - m[3].x * m[2].z; - auto coef18 = m[1].x * m[3].z - m[3].x * m[1].z; - auto coef19 = m[1].x * m[2].z - m[2].x * m[1].z; - auto coef20 = m[2].x * m[3].y - m[3].x * m[2].y; - auto coef22 = m[1].x * m[3].y - m[3].x * m[1].y; - auto coef23 = m[1].x * m[2].y - m[2].x * m[1].y; - auto fac0 = make_float4(coef00, coef00, coef02, coef03); - auto fac1 = make_float4(coef04, coef04, coef06, coef07); - auto fac2 = make_float4(coef08, coef08, coef10, coef11); - auto fac3 = make_float4(coef12, coef12, coef14, coef15); - auto fac4 = make_float4(coef16, coef16, coef18, coef19); - auto fac5 = make_float4(coef20, coef20, coef22, coef23); - auto Vec0 = make_float4(m[1].x, m[0].x, m[0].x, m[0].x); - auto Vec1 = make_float4(m[1].y, m[0].y, m[0].y, m[0].y); - auto Vec2 = make_float4(m[1].z, m[0].z, m[0].z, m[0].z); - auto Vec3 = make_float4(m[1].w, m[0].w, m[0].w, m[0].w); - auto inv0 = Vec1 * fac0 - Vec2 * fac1 + Vec3 * fac2; - auto inv1 = Vec0 * fac0 - Vec2 * fac3 + Vec3 * fac4; - auto inv2 = Vec0 * fac1 - Vec1 * fac3 + Vec3 * fac5; - auto inv3 = Vec0 * fac2 - Vec1 * fac4 + Vec2 * fac5; - auto sign_a = make_float4(+1.0f, -1.0f, +1.0f, -1.0f); - auto sign_b = make_float4(-1.0f, +1.0f, -1.0f, +1.0f); - auto inv_0 = inv0 * sign_a; - auto inv_1 = inv1 * sign_b; - auto inv_2 = inv2 * sign_a; - auto inv_3 = inv3 * sign_b; - auto dot0 = m[0] * make_float4(inv_0.x, inv_1.x, inv_2.x, inv_3.x); - auto dot1 = dot0.x + dot0.y + dot0.z + dot0.w; - auto inv_det = 1.0f / dot1; - return inv_det * make_float4x4(inv_0, inv_1, inv_2, inv_3); - }; - return inverse.function(); -} - -[[nodiscard]] static Function float2x2_det() noexcept { - static Callable inverse = [](Float2x2 m) noexcept { - return m[0][0] * m[1][1] - m[1][0] * m[0][1]; - }; - return inverse.function(); -} - -[[nodiscard]] static Function float3x3_det() noexcept { - static Callable inverse = [](Float3x3 m) noexcept { - return m[0].x * (m[1].y * m[2].z - m[2].y * m[1].z) - - m[1].x * (m[0].y * m[2].z - m[2].y * m[0].z) + - m[2].x * (m[0].y * m[1].z - m[1].y * m[0].z); - }; - return inverse.function(); -} - -[[nodiscard]] static Function float4x4_det() noexcept { - static Callable inverse = [](Float4x4 m) noexcept { - auto coef00 = m[2].z * m[3].w - m[3].z * m[2].w; - auto coef02 = m[1].z * m[3].w - m[3].z * m[1].w; - auto coef03 = m[1].z * m[2].w - m[2].z * m[1].w; - auto coef04 = m[2].y * m[3].w - m[3].y * m[2].w; - auto coef06 = m[1].y * m[3].w - m[3].y * m[1].w; - auto coef07 = m[1].y * m[2].w - m[2].y * m[1].w; - auto coef08 = m[2].y * m[3].z - m[3].y * m[2].z; - auto coef10 = m[1].y * m[3].z - m[3].y * m[1].z; - auto coef11 = m[1].y * m[2].z - m[2].y * m[1].z; - auto coef12 = m[2].x * m[3].w - m[3].x * m[2].w; - auto coef14 = m[1].x * m[3].w - m[3].x * m[1].w; - auto coef15 = m[1].x * m[2].w - m[2].x * m[1].w; - auto coef16 = m[2].x * m[3].z - m[3].x * m[2].z; - auto coef18 = m[1].x * m[3].z - m[3].x * m[1].z; - auto coef19 = m[1].x * m[2].z - m[2].x * m[1].z; - auto coef20 = m[2].x * m[3].y - m[3].x * m[2].y; - auto coef22 = m[1].x * m[3].y - m[3].x * m[1].y; - auto coef23 = m[1].x * m[2].y - m[2].x * m[1].y; - auto fac0 = make_float4(coef00, coef00, coef02, coef03); - auto fac1 = make_float4(coef04, coef04, coef06, coef07); - auto fac2 = make_float4(coef08, coef08, coef10, coef11); - auto fac3 = make_float4(coef12, coef12, coef14, coef15); - auto fac4 = make_float4(coef16, coef16, coef18, coef19); - auto fac5 = make_float4(coef20, coef20, coef22, coef23); - auto Vec0 = make_float4(m[1].x, m[0].x, m[0].x, m[0].x); - auto Vec1 = make_float4(m[1].y, m[0].y, m[0].y, m[0].y); - auto Vec2 = make_float4(m[1].z, m[0].z, m[0].z, m[0].z); - auto Vec3 = make_float4(m[1].w, m[0].w, m[0].w, m[0].w); - auto inv0 = Vec1 * fac0 - Vec2 * fac1 + Vec3 * fac2; - auto inv1 = Vec0 * fac0 - Vec2 * fac3 + Vec3 * fac4; - auto inv2 = Vec0 * fac1 - Vec1 * fac3 + Vec3 * fac5; - auto inv3 = Vec0 * fac2 - Vec1 * fac4 + Vec2 * fac5; - auto sign_a = make_float4(+1.0f, -1.0f, +1.0f, -1.0f); - auto sign_b = make_float4(-1.0f, +1.0f, -1.0f, +1.0f); - auto inv_0 = inv0 * sign_a; - auto inv_1 = inv1 * sign_b; - auto inv_2 = inv2 * sign_a; - auto inv_3 = inv3 * sign_b; - auto dot0 = m[0] * make_float4(inv_0.x, inv_1.x, inv_2.x, inv_3.x); - return dot0.x + dot0.y + dot0.z + dot0.w; - }; - return inverse.function(); -} - -[[nodiscard]] static Function float2x2_transpose() noexcept { - static Callable inverse = [](Float2x2 m) noexcept { - return make_float2x2(m[0].x, m[1].x, m[0].y, m[1].y); - }; - return inverse.function(); -} - -[[nodiscard]] static Function float3x3_transpose() noexcept { - static Callable inverse = [](Float3x3 m) noexcept { - return make_float3x3( - m[0].x, m[1].x, m[2].x, - m[0].y, m[1].y, m[2].y, - m[0].z, m[1].z, m[2].z); - }; - return inverse.function(); -} - -[[nodiscard]] static Function float4x4_transpose() noexcept { - static Callable inverse = [](Float4x4 m) noexcept { - return make_float4x4( - m[0].x, m[1].x, m[2].x, m[3].x, - m[0].y, m[1].y, m[2].y, m[3].y, - m[0].z, m[1].z, m[2].z, m[3].z, - m[0].w, m[1].w, m[2].w, m[3].w); - }; - return inverse.function(); -} - -::llvm::Value *LLVMCodegen::_builtin_inverse(const Type *t, ::llvm::Value *pm) noexcept { - LUISA_ASSERT(t->is_matrix(), "Expected matrix type."); - auto ast = [t] { - if (t->dimension() == 2u) { return float2x2_inverse(); } - if (t->dimension() == 3u) { return float3x3_inverse(); } - if (t->dimension() == 4u) { return float4x4_inverse(); } - LUISA_ERROR_WITH_LOCATION("Invalid matrix dimension {}.", t->dimension()); - }(); - auto func = _create_function(ast); - auto b = _current_context()->builder.get(); - auto m = b->CreateLoad(_create_type(t), pm, "inverse.m"); - auto ret = b->CreateCall(func->getFunctionType(), func, m, "inverse.ret"); - return _create_stack_variable(ret, "inverse.ret.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_determinant(const Type *t, ::llvm::Value *pm) noexcept { - LUISA_ASSERT(t->is_matrix(), "Expected matrix type."); - auto ast = [t] { - if (t->dimension() == 2u) { return float2x2_det(); } - if (t->dimension() == 3u) { return float3x3_det(); } - if (t->dimension() == 4u) { return float4x4_det(); } - LUISA_ERROR_WITH_LOCATION("Invalid matrix dimension {}.", t->dimension()); - }(); - auto func = _create_function(ast); - auto b = _current_context()->builder.get(); - auto m = b->CreateLoad(_create_type(t), pm, "determinant.m"); - auto ret = b->CreateCall(func->getFunctionType(), func, m, "determinant.ret"); - return _create_stack_variable(ret, "determinant.ret.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_transpose(const Type *t, ::llvm::Value *pm) noexcept { - LUISA_ASSERT(t->is_matrix(), "Expected matrix type."); - auto ast = [t] { - if (t->dimension() == 2u) { return float2x2_transpose(); } - if (t->dimension() == 3u) { return float3x3_transpose(); } - if (t->dimension() == 4u) { return float4x4_transpose(); } - LUISA_ERROR_WITH_LOCATION("Invalid matrix dimension {}.", t->dimension()); - }(); - auto func = _create_function(ast); - auto b = _current_context()->builder.get(); - auto m = b->CreateLoad(_create_type(t), pm, "transpose.m"); - auto ret = b->CreateCall(func->getFunctionType(), func, m, "transpose.ret"); - return _create_stack_variable(ret, "transpose.ret.addr"); -} - -[[nodiscard]] ::llvm::Function *_declare_external_math_function( - ::llvm::Module *module, luisa::string_view name, size_t n_args) noexcept { - auto func_name = luisa::format("{}f", name); - auto f = module->getFunction(::llvm::StringRef{func_name.data(), func_name.size()}); - auto ir_type = ::llvm::Type::getFloatTy(module->getContext()); - if (f == nullptr) { - ::llvm::SmallVector<::llvm::Type *, 2u> arg_types(n_args, ir_type); - f = ::llvm::Function::Create( - ::llvm::FunctionType::get(ir_type, arg_types, false), - ::llvm::Function::ExternalLinkage, - ::llvm::StringRef{func_name.data(), func_name.size()}, - module); - f->setNoSync(); - f->setWillReturn(); - f->setDoesNotThrow(); - f->setMustProgress(); - f->setSpeculatable(); - f->setDoesNotAccessMemory(); - f->setDoesNotFreeMemory(); - } - return f; -} - -#pragma clang diagnostic push -#pragma ide diagnostic ignored "cppcoreguidelines-pro-type-static-cast-downcast" -[[nodiscard]] ::llvm::Value *_call_external_math_function( - ::llvm::Module *module, ::llvm::IRBuilder<> *builder, const Type *t, luisa::string_view name, - ::llvm::SmallVector<::llvm::Type *, 2u> t_args, ::llvm::SmallVector<::llvm::Value *, 2u> p_args) noexcept { - auto f = _declare_external_math_function(module, name, p_args.size()); - ::llvm::SmallVector<::llvm::Value *, 2u> args; - for (auto i = 0u; i < p_args.size(); i++) { - auto value_name = luisa::format("{}.arg{}", name, i); - args.emplace_back(builder->CreateLoad( - t_args[i], p_args[i], - ::llvm::StringRef{value_name.data(), value_name.size()})); - } - // TODO: vectorize... - if (t->is_vector()) { - ::llvm::SmallVector<::llvm::Value *, 4u> v; - for (auto i = 0u; i < t->dimension(); i++) { - ::llvm::SmallVector<::llvm::Value *, 2u> args_i; - for (auto a = 0u; a < args.size(); a++) { - args_i.emplace_back(builder->CreateExtractElement(args[a], i)); - } - v.emplace_back(builder->CreateCall(f, args_i)); - } - auto vec_type = ::llvm::VectorType::get( - ::llvm::Type::getFloatTy(module->getContext()), t->dimension(), false); - auto vec = static_cast<::llvm::Value *>(::llvm::UndefValue::get(vec_type)); - for (auto i = 0u; i < t->dimension(); i++) { - vec = builder->CreateInsertElement(vec, v[i], i); - } - auto p_vec = builder->CreateAlloca(vec_type); - p_vec->setAlignment(::llvm::Align{16}); - builder->CreateStore(vec, p_vec); - return p_vec; - } - // scalar - auto y_name = luisa::format("{}.call", name); - auto y = builder->CreateCall(f, args, ::llvm::StringRef{y_name.data(), y_name.size()}); - auto py_name = luisa::format("{}.call.addr", name); - auto py = builder->CreateAlloca( - t_args.front(), nullptr, ::llvm::StringRef{py_name.data(), py_name.size()}); - py->setAlignment(::llvm::Align{16}); - builder->CreateStore(y, py); - return py; -} -#pragma clang diagnostic pop - -::llvm::Value *LLVMCodegen::_builtin_instance_transform(::llvm::Value *accel, ::llvm::Value *p_index) noexcept { - static Callable impl = [](BufferVar instances, UInt index) noexcept { - auto m = instances.read(index).affine; - return make_float4x4( - m[0], m[4], m[8], 0.f, - m[1], m[5], m[9], 0.f, - m[2], m[6], m[10], 0.f, - m[3], m[7], m[11], 1.f); - }; - auto func = _create_function(impl.function()); - auto b = _current_context()->builder.get(); - auto instances = b->CreateExtractValue(accel, 1, "accel.instance.transform.instances"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "accel.instance.transform.index"); - auto ret = b->CreateCall(func->getFunctionType(), func, {instances, index}, "accel.instance.transform.ret"); - return _create_stack_variable(ret, "accel.instance.transform.ret.addr"); -} - -void LLVMCodegen::_builtin_set_instance_transform(::llvm::Value *accel, ::llvm::Value *p_index, ::llvm::Value *p_mat) noexcept { - static Callable impl = [](BufferVar instances, UInt index, Float4x4 m) noexcept { - auto inst = instances.read(index); - inst.dirty = true; - inst.affine[0] = m[0].x; - inst.affine[1] = m[1].x; - inst.affine[2] = m[2].x; - inst.affine[3] = m[3].x; - inst.affine[4] = m[0].y; - inst.affine[5] = m[1].y; - inst.affine[6] = m[2].y; - inst.affine[7] = m[3].y; - inst.affine[8] = m[0].z; - inst.affine[9] = m[1].z; - inst.affine[10] = m[2].z; - inst.affine[11] = m[3].z; - instances.write(index, inst); - }; - auto func = _create_function(impl.function()); - auto b = _current_context()->builder.get(); - auto instances = b->CreateExtractValue(accel, 1, "accel.instance.transform.instances"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "accel.instance.transform.index"); - auto mat = b->CreateLoad(b->getFloatTy()->getPointerTo(), p_mat, "accel.instance.transform.mat"); - b->CreateCall(func->getFunctionType(), func, {instances, index, mat}); -} - -void LLVMCodegen::_builtin_set_instance_visibility(::llvm::Value *accel, ::llvm::Value *p_index, ::llvm::Value *p_vis) noexcept { - auto b = _current_context()->builder.get(); - auto ptr = b->CreateExtractValue(accel, 1, "accel.instance.visibility.instances"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "accel.instance.visibility.index"); - auto t_instance = _create_type(Type::of()); - auto ptr_vis = b->CreateInBoundsGEP(t_instance, ptr, {index, _literal(1)}, "accel.instance.visibility.vis.ptr"); - auto ptr_dirty = b->CreateInBoundsGEP(t_instance, ptr, {index, _literal(2)}, "accel.instance.visibility.dirty.ptr"); - auto vis = b->CreateLoad(b->getInt32Ty(), p_vis, "accel.instance.visibility.vis"); - b->CreateStore(vis, ptr_vis); - b->CreateStore(_literal(true), ptr_dirty); -} - -::llvm::Value *LLVMCodegen::_create_builtin_call_expr(const Type *ret_type, CallOp op, luisa::span args) noexcept { - auto builder = _current_context()->builder.get(); - switch (op) { - case CallOp::ALL: return _builtin_all( - args[0]->type(), _create_expr(args[0])); - case CallOp::ANY: return _builtin_any( - args[0]->type(), _create_expr(args[0])); - case CallOp::SELECT: return _builtin_select( - args[2]->type(), args[0]->type(), _create_expr(args[2]), - _create_expr(args[1]), _create_expr(args[0])); - case CallOp::CLAMP: return _builtin_clamp( - args[0]->type(), _create_expr(args[0]), - _create_expr(args[1]), _create_expr(args[2])); - case CallOp::SATURATE: return _builtin_saturate( - args[0]->type(), _create_expr(args[0])); - case CallOp::LERP: return _builtin_lerp( - args[0]->type(), _create_expr(args[0]), - _create_expr(args[1]), _create_expr(args[2])); - case CallOp::STEP: return _builtin_step( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ABS: return _builtin_abs( - args[0]->type(), _create_expr(args[0])); - case CallOp::MIN: return _builtin_min( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::MAX: return _builtin_max( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::CLZ: return _builtin_clz( - args[0]->type(), _create_expr(args[0])); - case CallOp::CTZ: return _builtin_ctz( - args[0]->type(), _create_expr(args[0])); - case CallOp::POPCOUNT: return _builtin_popcount( - args[0]->type(), _create_expr(args[0])); - case CallOp::REVERSE: return _builtin_reverse( - args[0]->type(), _create_expr(args[0])); - case CallOp::ISINF: return _builtin_isinf( - args[0]->type(), _create_expr(args[0])); - case CallOp::ISNAN: return _builtin_isnan( - args[0]->type(), _create_expr(args[0])); - case CallOp::ACOS: return _call_external_math_function( - _module, builder, args[0]->type(), "acos", - {_create_type(args[0]->type())}, {_create_expr(args[0])}); - case CallOp::ACOSH: return _builtin_acosh( - args[0]->type(), _create_expr(args[0])); - case CallOp::ASIN: return _call_external_math_function( - _module, builder, args[0]->type(), "asin", - {_create_type(args[0]->type())}, {_create_expr(args[0])}); - case CallOp::ASINH: return _builtin_asinh( - args[0]->type(), _create_expr(args[0])); - case CallOp::ATAN: return _call_external_math_function( - _module, builder, args[0]->type(), "atan", - {_create_type(args[0]->type())}, {_create_expr(args[0])}); - case CallOp::ATAN2: return _call_external_math_function( - _module, builder, args[0]->type(), "atan2", - {_create_type(args[0]->type()), _create_type(args[1]->type())}, - {_create_expr(args[0]), _create_expr(args[1])}); - case CallOp::ATANH: return _builtin_atanh( - args[0]->type(), _create_expr(args[0])); - case CallOp::COS: return _builtin_cos( - args[0]->type(), _create_expr(args[0])); - case CallOp::COSH: return _builtin_cosh( - args[0]->type(), _create_expr(args[0])); - case CallOp::SIN: return _builtin_sin( - args[0]->type(), _create_expr(args[0])); - case CallOp::SINH: return _builtin_sinh( - args[0]->type(), _create_expr(args[0])); - case CallOp::TAN: return _builtin_tan( - args[0]->type(), _create_expr(args[0])); - case CallOp::TANH: return _builtin_tanh( - args[0]->type(), _create_expr(args[0])); - case CallOp::EXP: return _builtin_exp( - args[0]->type(), _create_expr(args[0])); - case CallOp::EXP2: return _builtin_exp2( - args[0]->type(), _create_expr(args[0])); - case CallOp::EXP10: return _builtin_exp10( - args[0]->type(), _create_expr(args[0])); - case CallOp::LOG: return _builtin_log( - args[0]->type(), _create_expr(args[0])); - case CallOp::LOG2: return _builtin_log2( - args[0]->type(), _create_expr(args[0])); - case CallOp::LOG10: return _builtin_log10( - args[0]->type(), _create_expr(args[0])); - case CallOp::POW: return _builtin_pow( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::SQRT: return _builtin_sqrt( - args[0]->type(), _create_expr(args[0])); - case CallOp::RSQRT: return _builtin_rsqrt( - args[0]->type(), _create_expr(args[0])); - case CallOp::CEIL: return _builtin_ceil( - args[0]->type(), _create_expr(args[0])); - case CallOp::FLOOR: return _builtin_floor( - args[0]->type(), _create_expr(args[0])); - case CallOp::FRACT: return _builtin_fract( - args[0]->type(), _create_expr(args[0])); - case CallOp::TRUNC: return _builtin_trunc( - args[0]->type(), _create_expr(args[0])); - case CallOp::ROUND: return _builtin_round( - args[0]->type(), _create_expr(args[0])); - case CallOp::FMA: return _builtin_fma( - args[0]->type(), _create_expr(args[0]), - _create_expr(args[1]), _create_expr(args[2])); - case CallOp::COPYSIGN: return _builtin_copysign( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::CROSS: return _builtin_cross( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::DOT: return _builtin_dot( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::LENGTH: return _builtin_sqrt( - Type::of(), _builtin_length_squared(args[0]->type(), _create_expr(args[0]))); - case CallOp::LENGTH_SQUARED: return _builtin_length_squared( - args[0]->type(), _create_expr(args[0])); - case CallOp::NORMALIZE: return _builtin_normalize( - args[0]->type(), _create_expr(args[0])); - case CallOp::FACEFORWARD: return _builtin_faceforward( - args[0]->type(), _create_expr(args[0]), - _create_expr(args[1]), _create_expr(args[2])); - case CallOp::DETERMINANT: return _builtin_determinant( - args[0]->type(), _create_expr(args[0])); - case CallOp::TRANSPOSE: return _builtin_transpose( - args[0]->type(), _create_expr(args[0])); - case CallOp::INVERSE: return _builtin_inverse( - args[0]->type(), _create_expr(args[0])); - case CallOp::SYNCHRONIZE_BLOCK: - _builtin_synchronize_block(); - return nullptr; - case CallOp::ATOMIC_EXCHANGE: return _builtin_atomic_exchange( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_COMPARE_EXCHANGE: return _builtin_atomic_compare_exchange( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - case CallOp::ATOMIC_FETCH_ADD: return _builtin_atomic_fetch_add( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_FETCH_SUB: return _builtin_atomic_fetch_sub( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_FETCH_AND: return _builtin_atomic_fetch_and( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_FETCH_OR: return _builtin_atomic_fetch_or( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_FETCH_XOR: return _builtin_atomic_fetch_xor( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_FETCH_MIN: return _builtin_atomic_fetch_min( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::ATOMIC_FETCH_MAX: return _builtin_atomic_fetch_max( - args[0]->type(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::BUFFER_READ: return _builtin_buffer_read( - args[0]->type()->element(), _create_expr(args[0]), _create_expr(args[1])); - case CallOp::BUFFER_WRITE: - _builtin_buffer_write( - args[0]->type()->element(), _create_expr(args[0]), _create_expr(args[1]), - _builtin_static_cast(args[0]->type()->element(), args[2]->type(), _create_expr(args[2]))); - return nullptr; - case CallOp::TEXTURE_READ: return _builtin_texture_read( - ret_type, _create_expr(args[0]), args[1]->type(), _create_expr(args[1])); - case CallOp::TEXTURE_WRITE: - _builtin_texture_write( - args[2]->type(), _create_expr(args[0]), args[1]->type(), - _create_expr(args[1]), _create_expr(args[2])); - return nullptr; - case CallOp::BINDLESS_TEXTURE2D_SAMPLE: return _builtin_bindless_texture_sample2d( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE2D_SAMPLE_LEVEL: return _builtin_bindless_texture_sample2d_level( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2]), _create_expr(args[3])); - case CallOp::BINDLESS_TEXTURE2D_SAMPLE_GRAD: return _builtin_bindless_texture_sample2d_grad( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2]), - _create_expr(args[3]), _create_expr(args[4])); - case CallOp::BINDLESS_TEXTURE3D_SAMPLE: return _builtin_bindless_texture_sample3d( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE3D_SAMPLE_LEVEL: return _builtin_bindless_texture_sample3d_level( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2]), _create_expr(args[3])); - case CallOp::BINDLESS_TEXTURE3D_SAMPLE_GRAD: return _builtin_bindless_texture_sample3d_grad( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2]), - _create_expr(args[3]), _create_expr(args[4])); - case CallOp::BINDLESS_TEXTURE2D_READ: return _builtin_bindless_texture_read2d( - _create_expr(args[0]), _create_expr(args[1]), nullptr, _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE3D_READ: return _builtin_bindless_texture_read3d( - _create_expr(args[0]), _create_expr(args[1]), nullptr, _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE2D_READ_LEVEL: return _builtin_bindless_texture_read2d( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[3]), _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE3D_READ_LEVEL: return _builtin_bindless_texture_read3d( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[3]), _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE2D_SIZE: return _builtin_bindless_texture_size2d( - _create_expr(args[0]), _create_expr(args[1]), nullptr); - case CallOp::BINDLESS_TEXTURE3D_SIZE: return _builtin_bindless_texture_size3d( - _create_expr(args[0]), _create_expr(args[1]), nullptr); - case CallOp::BINDLESS_TEXTURE2D_SIZE_LEVEL: return _builtin_bindless_texture_size2d( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - case CallOp::BINDLESS_TEXTURE3D_SIZE_LEVEL: return _builtin_bindless_texture_size3d( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - case CallOp::BINDLESS_BUFFER_READ: return _builtin_bindless_buffer_read( - ret_type, _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - case CallOp::MAKE_BOOL2: return _builtin_make_vector2_overloaded(ret_type, args); - case CallOp::MAKE_BOOL3: return _builtin_make_vector3_overloaded(ret_type, args); - case CallOp::MAKE_BOOL4: return _builtin_make_vector4_overloaded(ret_type, args); - case CallOp::MAKE_INT2: return _builtin_make_vector2_overloaded(ret_type, args); - case CallOp::MAKE_INT3: return _builtin_make_vector3_overloaded(ret_type, args); - case CallOp::MAKE_INT4: return _builtin_make_vector4_overloaded(ret_type, args); - case CallOp::MAKE_UINT2: return _builtin_make_vector2_overloaded(ret_type, args); - case CallOp::MAKE_UINT3: return _builtin_make_vector3_overloaded(ret_type, args); - case CallOp::MAKE_UINT4: return _builtin_make_vector4_overloaded(ret_type, args); - case CallOp::MAKE_FLOAT2: return _builtin_make_vector2_overloaded(ret_type, args); - case CallOp::MAKE_FLOAT3: return _builtin_make_vector3_overloaded(ret_type, args); - case CallOp::MAKE_FLOAT4: return _builtin_make_vector4_overloaded(ret_type, args); - case CallOp::MAKE_FLOAT2X2: return _builtin_make_matrix2_overloaded(args); - case CallOp::MAKE_FLOAT3X3: return _builtin_make_matrix3_overloaded(args); - case CallOp::MAKE_FLOAT4X4: return _builtin_make_matrix4_overloaded(args); - case CallOp::ASSUME: - _builtin_assume(_create_expr(args[0])); - return nullptr; - case CallOp::UNREACHABLE: - _builtin_unreachable(); - return nullptr; - case CallOp::RAY_TRACING_INSTANCE_TRANSFORM: return _builtin_instance_transform( - _create_expr(args[0]), _create_expr(args[1])); - case CallOp::RAY_TRACING_SET_INSTANCE_TRANSFORM: - _builtin_set_instance_transform( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - return nullptr; - case CallOp::RAY_TRACING_SET_INSTANCE_VISIBILITY: - _builtin_set_instance_visibility( - _create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - return nullptr; - case CallOp::RAY_TRACING_TRACE_CLOSEST: return _builtin_trace_closest( - _create_expr(args[0]), _create_expr(args[1])); - case CallOp::RAY_TRACING_TRACE_ANY: return _builtin_trace_any( - _create_expr(args[0]), _create_expr(args[1])); - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid built-in call."); -} - -// TODO: optimize memory allocation for coroutine frames -void LLVMCodegen::_builtin_synchronize_block() noexcept { - auto ctx = _current_context(); - auto b = ctx->builder.get(); - auto i8_type = ::llvm::Type::getInt8Ty(_context); - auto i1_type = ::llvm::Type::getInt1Ty(_context); - auto coro_state = b->CreateIntrinsic( - ::llvm::Intrinsic::coro_suspend, {}, - {::llvm::ConstantTokenNone::get(_context), - ::llvm::ConstantInt::get(i1_type, false)}, - nullptr, "synchronize.block.state"); - auto resume = ::llvm::BasicBlock::Create( - _context, "synchronize.block.resume", ctx->ir); - resume->moveAfter(b->GetInsertBlock()); - auto coro_switch = b->CreateSwitch( - coro_state, ctx->coro_suspend, 2u); - coro_switch->addCase( - ::llvm::ConstantInt::get(i8_type, 0), resume); - coro_switch->addCase( - ::llvm::ConstantInt::get(i8_type, 1), ctx->coro_cleanup); - b->SetInsertPoint(resume); -} - -[[nodiscard]] inline auto is_scalar_or_vector(const Type *t, Type::Tag tag) noexcept { - return t->tag() == tag || - (t->is_vector() && t->element()->tag() == tag); -} - -::llvm::Value *LLVMCodegen::_builtin_all(const Type *t, ::llvm::Value *v) noexcept { - auto b = _current_context()->builder.get(); - auto pred_type = ::llvm::FixedVectorType::get(b->getInt1Ty(), t->dimension()); - v = b->CreateLoad(_create_type(t), v, "all.load"); - v = b->CreateTrunc(v, pred_type, "all.pred"); - return _create_stack_variable(b->CreateAndReduce(v), "all.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_any(const Type *t, ::llvm::Value *v) noexcept { - auto b = _current_context()->builder.get(); - auto pred_type = ::llvm::FixedVectorType::get(b->getInt1Ty(), t->dimension()); - v = b->CreateLoad(_create_type(t), v, "any.load"); - v = b->CreateTrunc(v, pred_type, "any.pred"); - return _create_stack_variable(b->CreateOrReduce(v), "any.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_select(const Type *t_pred, const Type *t_value, - ::llvm::Value *pred, ::llvm::Value *v_true, ::llvm::Value *v_false) noexcept { - auto b = _current_context()->builder.get(); - auto pred_type = static_cast<::llvm::Type *>(b->getInt1Ty()); - if (t_pred->is_vector()) { pred_type = ::llvm::FixedVectorType::get(pred_type, t_pred->dimension()); } - auto pred_load = b->CreateLoad(_create_type(t_pred), pred, "sel.pred.load"); - auto bv = b->CreateTrunc(pred_load, pred_type, "sel.pred.bv"); - auto v_true_load = b->CreateLoad(_create_type(t_value), v_true, "sel.true"); - auto v_false_load = b->CreateLoad(_create_type(t_value), v_false, "sel.false"); - auto result = b->CreateSelect(bv, v_true_load, v_false_load, "sel"); - return _create_stack_variable(result, "sel.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_clamp(const Type *t, ::llvm::Value *v, ::llvm::Value *lo, ::llvm::Value *hi) noexcept { - return _builtin_min(t, _builtin_max(t, v, lo), hi); -} - -::llvm::Value *LLVMCodegen::_builtin_lerp(const Type *t, ::llvm::Value *a, ::llvm::Value *b, ::llvm::Value *x) noexcept { - auto s = _builtin_sub(t, b, a); - return _builtin_fma(t, x, s, a);// lerp(a, b, x) == x * (b - a) + a == fma(x, (b - a), a) -} - -::llvm::Value *LLVMCodegen::_builtin_step(const Type *t, ::llvm::Value *edge, ::llvm::Value *x) noexcept { - auto b = _current_context()->builder.get(); - auto zero = _builtin_static_cast( - t, Type::of(), _create_stack_variable(_literal(0.0f), "step.zero.addr")); - auto one = _builtin_static_cast( - t, Type::of(), _create_stack_variable(_literal(1.0f), "step.one.addr")); - if (t->is_scalar()) { return _builtin_select(Type::of(), t, _builtin_lt(t, x, edge), zero, one); } - if (t->dimension() == 2u) { return _builtin_select(Type::of(), t, _builtin_lt(t, x, edge), zero, one); } - if (t->dimension() == 3u) { return _builtin_select(Type::of(), t, _builtin_lt(t, x, edge), zero, one); } - if (t->dimension() == 4u) { return _builtin_select(Type::of(), t, _builtin_lt(t, x, edge), zero, one); } - LUISA_ERROR_WITH_LOCATION("Invalid type '{}' for step.", t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_saturate(const Type *t, ::llvm::Value *x) noexcept { - LUISA_ASSERT(t->tag() == Type::Tag::FLOAT, - "Invalid type '{}' for saturate", - t->description()); - static Callable saturate = [](Float x) noexcept { - return clamp(x, 0.f, 1.f); - }; - auto func = _create_function(saturate.function()); - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - x = b->CreateLoad(ir_type, x, "saturate.x"); - auto ret = b->CreateCall(func->getFunctionType(), func, x, "saturate.ret"); - return _create_stack_variable(ret, "saturate.ret.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_abs(const Type *t, ::llvm::Value *x) noexcept { - auto b = _current_context()->builder.get(); - if (is_scalar_or_vector(t, Type::Tag::UINT)) { return x; } - auto ir_type = _create_type(t); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::abs, {ir_type}, - {b->CreateLoad(ir_type, x, "iabs.x")}, - nullptr, "iabs"); - return _create_stack_variable(m, "iabs.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::fabs, {ir_type}, - {b->CreateLoad(ir_type, x, "fabs.x")}, - nullptr, "fabs"); - return _create_stack_variable(m, "fabs.addr"); - } - LUISA_ERROR_WITH_LOCATION("Invalid type '{}' for abs", t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_min(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::minnum, {ir_type}, - {b->CreateLoad(ir_type, x, "fmin.x"), - b->CreateLoad(ir_type, y, "fmin.y")}, - nullptr, "fmin"); - return _create_stack_variable(m, "fmin.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::INT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::smin, {ir_type}, - {b->CreateLoad(ir_type, x, "imin.x"), - b->CreateLoad(ir_type, y, "imin.y")}, - nullptr, "imin"); - return _create_stack_variable(m, "imin.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::umin, {ir_type}, - {b->CreateLoad(ir_type, x, "umin.x"), - b->CreateLoad(ir_type, y, "umin.y")}, - nullptr, "umin"); - return _create_stack_variable(m, "umin.addr"); - } - LUISA_ERROR_WITH_LOCATION("Invalid type '{}' for min.", t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_max(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::maxnum, {ir_type}, - {b->CreateLoad(ir_type, x, "fmax.x"), - b->CreateLoad(ir_type, y, "fmax.y")}, - nullptr, "fmax"); - return _create_stack_variable(m, "fmax.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::INT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::smax, {ir_type}, - {b->CreateLoad(ir_type, x, "imax.x"), - b->CreateLoad(ir_type, y, "imax.y")}, - nullptr, "imax"); - return _create_stack_variable(m, "imax.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::umax, {ir_type}, - {b->CreateLoad(ir_type, x, "umax.x"), - b->CreateLoad(ir_type, y, "umax.y")}, - nullptr, "umax"); - return _create_stack_variable(m, "umax.addr"); - } - LUISA_ERROR_WITH_LOCATION("Invalid type '{}' for max.", t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_clz(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto x = b->CreateIntrinsic( - ::llvm::Intrinsic::ctlz, {ir_type}, - {b->CreateLoad(ir_type, p, "clz.x")}, - nullptr, "clz"); - return _create_stack_variable(x, "clz.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_ctz(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto x = b->CreateIntrinsic( - ::llvm::Intrinsic::cttz, {ir_type}, - {b->CreateLoad(ir_type, p, "ctz.x")}, - nullptr, "ctz"); - return _create_stack_variable(x, "ctz.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_popcount(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto x = b->CreateIntrinsic( - ::llvm::Intrinsic::ctpop, {ir_type}, - {b->CreateLoad(ir_type, p, "popcount.x")}, - nullptr, "popcount"); - return _create_stack_variable(x, "popcount.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_reverse(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto x = b->CreateIntrinsic( - ::llvm::Intrinsic::bitreverse, {ir_type}, - {b->CreateLoad(ir_type, p, "reverse.x")}, - nullptr, "reverse"); - return _create_stack_variable(x, "reverse.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_fma(const Type *t, ::llvm::Value *pa, ::llvm::Value *pb, ::llvm::Value *pc) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::fma, {ir_type}, - {b->CreateLoad(ir_type, pa, "fma.a"), - b->CreateLoad(ir_type, pb, "fma.b"), - b->CreateLoad(ir_type, pc, "fma.c")}, - nullptr, "fma"); - return _create_stack_variable(m, "fma.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_exp(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::exp, {ir_type}, - {b->CreateLoad(ir_type, v, "exp.x")}, - nullptr, "exp"); - return _create_stack_variable(m, "exp.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_exp2(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::exp2, {ir_type}, - {b->CreateLoad(ir_type, v, "exp2.x")}, - nullptr, "exp2"); - return _create_stack_variable(m, "exp2.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_exp10(const Type *t, ::llvm::Value *v) noexcept { - auto ten = _builtin_static_cast( - t, Type::of(), - _create_stack_variable(_literal(10.f), "ten")); - return _builtin_pow(t, ten, v); -} - -::llvm::Value *LLVMCodegen::_builtin_log(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::log, {ir_type}, - {b->CreateLoad(ir_type, v, "log.x")}, - nullptr, "log"); - return _create_stack_variable(m, "log.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_log2(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::log2, {ir_type}, - {b->CreateLoad(ir_type, v, "log2.x")}, - nullptr, "log2"); - return _create_stack_variable(m, "log2.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_log10(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::log10, {ir_type}, - {b->CreateLoad(ir_type, v, "log10.x")}, - nullptr, "log10"); - return _create_stack_variable(m, "log10.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_pow(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::pow, {ir_type}, - {b->CreateLoad(ir_type, x, "pow.x"), - b->CreateLoad(ir_type, y, "pow.y")}, - nullptr, "pow.ret"); - return _create_stack_variable(m, "pow.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_copysign(const Type *t, ::llvm::Value *x, ::llvm::Value *y) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::copysign, {ir_type}, - {b->CreateLoad(ir_type, x, "copysign.x"), - b->CreateLoad(ir_type, y, "copysign.y")}, - nullptr, "copysign"); - return _create_stack_variable(m, "copysign.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_faceforward(const Type *t, ::llvm::Value *n, ::llvm::Value *i, ::llvm::Value *nref) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto dot = b->CreateLoad( - _create_type(Type::of()), - _builtin_dot(t, nref, i), "faceforward.dot"); - auto pos_n = b->CreateLoad( - ir_type, n, "faceforward.pos_n"); - auto neg_n = b->CreateFNeg( - pos_n, "faceforward.neg_n"); - auto m = b->CreateSelect( - b->CreateFCmpOLT(dot, _literal(0.f)), - pos_n, neg_n, "faceforward.select"); - return _create_stack_variable(m, "faceforward.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_sin(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::sin, {ir_type}, - {b->CreateLoad(ir_type, v, "sin.x")}, - nullptr, "sin"); - return _create_stack_variable(m, "sin.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_cos(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::cos, {ir_type}, - {b->CreateLoad(ir_type, v, "cos.x")}, - nullptr, "cos"); - return _create_stack_variable(m, "cos.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_tan(const Type *t, ::llvm::Value *v) noexcept { - auto one = _create_stack_variable(_literal(1.f), "tan.one"); - if (t->is_vector()) { one = _builtin_static_cast(t, t->element(), one); } - return _builtin_mul(t, _builtin_sin(t, v), _builtin_div(t, one, _builtin_cos(t, v))); -} - -::llvm::Value *LLVMCodegen::_builtin_sqrt(const Type *t, ::llvm::Value *x) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::sqrt, {ir_type}, - {b->CreateLoad(ir_type, x, "sqrt.x")}, - nullptr, "sqrt"); - return _create_stack_variable(m, "sqrt.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_fract(const Type *t, ::llvm::Value *v) noexcept { - return _builtin_sub(t, v, _builtin_floor(t, v)); -} - -::llvm::Value *LLVMCodegen::_builtin_floor(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::floor, {ir_type}, - {b->CreateLoad(ir_type, v, "floor.x")}, - nullptr, "floor"); - return _create_stack_variable(m, "floor.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_ceil(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::ceil, {ir_type}, - {b->CreateLoad(ir_type, v, "ceil.x")}, - nullptr, "ceil"); - return _create_stack_variable(m, "ceil.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_trunc(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::trunc, {ir_type}, - {b->CreateLoad(ir_type, v, "trunc.x")}, - nullptr, "trunc"); - return _create_stack_variable(m, "trunc.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_round(const Type *t, ::llvm::Value *v) noexcept { - auto ir_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto m = b->CreateIntrinsic( - ::llvm::Intrinsic::round, {ir_type}, - {b->CreateLoad(ir_type, v, "round.x")}, - nullptr, "round"); - return _create_stack_variable(m, "round.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_rsqrt(const Type *t, ::llvm::Value *x) noexcept { - auto s = _builtin_sqrt(t, x); - auto one = _builtin_static_cast( - t, Type::of(), - _create_stack_variable(_literal(1.f), "rsqrt.one")); - return _builtin_div(t, one, s); -} - -static constexpr auto atomic_operation_order = ::llvm::AtomicOrdering::Monotonic; - -::llvm::Value *LLVMCodegen::_builtin_atomic_exchange(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_desired) noexcept { - auto b = _current_context()->builder.get(); - auto desired = b->CreateLoad( - _create_type(t), p_desired, "atomic.exchange.desired"); - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Xchg, p_atomic, - desired, {}, atomic_operation_order); - old->setName("atomic.exchange.old"); - return _create_stack_variable(old, "atomic.exchange.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_compare_exchange(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_expected, ::llvm::Value *p_desired) noexcept { - auto b = _current_context()->builder.get(); - auto expected = static_cast<::llvm::Value *>(b->CreateLoad( - _create_type(t), p_expected, "atomic.compare.exchange.expected")); - auto desired = static_cast<::llvm::Value *>(b->CreateLoad( - _create_type(t), p_desired, "atomic.compare.exchange.desired")); - if (t->tag() == Type::Tag::FLOAT) { - expected = b->CreateBitCast( - expected, b->getInt32Ty(), - "atomic.compare.exchange.expected.int"); - desired = b->CreateBitCast( - desired, b->getInt32Ty(), - "atomic.compare.exchange.desired.int"); - p_atomic = b->CreateBitOrPointerCast( - p_atomic, ::llvm::PointerType::get(b->getInt32Ty(), 0), - "atomic.compare.exchange.atomic.int"); - } - auto old_and_success = b->CreateAtomicCmpXchg( - p_atomic, expected, desired, {}, - atomic_operation_order, - atomic_operation_order); - old_and_success->setName("atomic.compare.exchange.old_and_success"); - auto old = b->CreateExtractValue( - old_and_success, 0, "atomic.compare.exchange.old"); - if (t->tag() == Type::Tag::FLOAT) { - old = b->CreateBitCast( - old, b->getFloatTy(), - "atomic.compare.exchange.old.float"); - } - return _create_stack_variable(old, "atomic.compare.exchange.addr"); -} - -// TODO: atomic_fetch_add for float seems not correct, hence it is manually implemented with atomic_compare_exchange -[[nodiscard]] inline ::llvm::Value *_atomic_fetch_add_float(::llvm::IRBuilder<> *builder, ::llvm::Value *ptr, ::llvm::Value *v_float) noexcept { -#define LUISA_COMPUTE_LLVM_USE_ATOMIC_FADD 0 -#if LUISA_COMPUTE_LLVM_USE_ATOMIC_FADD - auto old = builder->CreateAtomicRMW( - ::llvm::AtomicRMWInst::FAdd, ptr, - v_float, {}, atomic_operation_order); - old->setName("atomic.fetch.add.old"); - auto p_old = builder->CreateAlloca( - builder->getFloatTy(), nullptr, - "atomic.fetch.add.old.addr"); - p_old->setAlignment(::llvm::Align{16}); - builder->CreateStore(old, p_old); - return p_old; -#else - auto p_old = builder->CreateAlloca(builder->getFloatTy(), nullptr, "atomic.fetch.add.old.addr"); - p_old->setAlignment(::llvm::Align{16}); - auto v_int = builder->CreateBitCast(v_float, builder->getInt32Ty(), "atomic.fetch.add.value.int"); - auto ptr_int = builder->CreateBitOrPointerCast(ptr, ::llvm::PointerType::get(builder->getInt32Ty(), 0), "atomic.fetch.add.ptr.int"); - auto func = builder->GetInsertBlock()->getParent(); - auto loop = ::llvm::BasicBlock::Create(builder->getContext(), "atomic.fetch.add.loop", func); - auto loop_out = ::llvm::BasicBlock::Create(builder->getContext(), "atomic.fetch.add.loop.out", func); - loop->moveAfter(builder->GetInsertBlock()); - builder->CreateBr(loop); - builder->SetInsertPoint(loop); - auto expected = builder->CreateLoad(builder->getFloatTy(), ptr, "atomic.fetch.add.expected"); - builder->CreateStore(expected, p_old); - auto desired = builder->CreateFAdd(expected, v_float, "atomic.fetch.add.desired"); - auto desired_int = builder->CreateBitCast(desired, builder->getInt32Ty(), "atomic.fetch.add.desired.int"); - auto expected_int = builder->CreateBitCast(expected, builder->getInt32Ty(), "atomic.fetch.add.expected.int"); - auto old_and_success = builder->CreateAtomicCmpXchg( - ptr_int, expected_int, desired_int, {}, atomic_operation_order, atomic_operation_order); - old_and_success->setName("atomic.fetch.add.old_and_success"); - auto success = builder->CreateExtractValue(old_and_success, 1, "atomic.fetch.add.success"); - builder->CreateCondBr(success, loop_out, loop); - loop_out->moveAfter(builder->GetInsertBlock()); - builder->SetInsertPoint(loop_out); - return p_old; -#endif -#undef LUISA_COMPUTE_LLVM_USE_ATOMIC_FADD -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_add(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value = b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.add.value"); - if (t->tag() == Type::Tag::FLOAT) { - return _atomic_fetch_add_float(b, p_atomic, value); - } - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Add, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.add.old"); - return _create_stack_variable(old, "atomic.fetch.add.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_sub(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - if (t->tag() == Type::Tag::FLOAT) { - return _builtin_atomic_fetch_add( - t, p_atomic, _builtin_unary_minus(t, p_value)); - } - auto value = b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.sub.value"); - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Sub, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.sub.old"); - return _create_stack_variable(old, "atomic.fetch.sub.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_and(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value = b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.and.value"); - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::And, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.and.old"); - return _create_stack_variable(old, "atomic.fetch.and.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_or(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value = b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.or.value"); - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Or, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.or.old"); - return _create_stack_variable(old, "atomic.fetch.or.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_xor(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value = b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.xor.value"); - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Xor, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.xor.old"); - return _create_stack_variable(old, "atomic.fetch.xor.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_min(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value = static_cast<::llvm::Value *>(b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.min.value")); - if (t->tag() == Type::Tag::UINT) { - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::UMin, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.min.old"); - return _create_stack_variable(old, "atomic.fetch.min.addr"); - } - if (t->tag() == Type::Tag::FLOAT) { - auto elem_type = b->getInt32Ty(); - value = b->CreateBitCast( - value, elem_type, "atomic.fetch.min.value.int"); - p_atomic = b->CreateBitOrPointerCast( - p_atomic, ::llvm::PointerType::get(elem_type, 0), - "atomic.fetch.min.addr.int"); - auto old = static_cast<::llvm::Value *>( - b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Min, p_atomic, - value, {}, atomic_operation_order)); - old->setName("atomic.fetch.min.old.int"); - old = b->CreateBitCast( - old, b->getFloatTy(), "atomic.fetch.min.old"); - return _create_stack_variable(old, "atomic.fetch.min.addr"); - } - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Min, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.min.old"); - return _create_stack_variable(old, "atomic.fetch.min.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_atomic_fetch_max(const Type *t, ::llvm::Value *p_atomic, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value = static_cast<::llvm::Value *>(b->CreateLoad( - _create_type(t), p_value, "atomic.fetch.max.value")); - if (t->tag() == Type::Tag::UINT) { - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::UMax, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.max.old"); - return _create_stack_variable(old, "atomic.fetch.max.addr"); - } - if (t->tag() == Type::Tag::FLOAT) { - auto elem_type = b->getInt32Ty(); - value = b->CreateBitCast( - value, elem_type, "atomic.fetch.max.value.int"); - p_atomic = b->CreateBitOrPointerCast( - p_atomic, ::llvm::PointerType::get(elem_type, 0), - "atomic.fetch.max.addr.int"); - auto old = static_cast<::llvm::Value *>( - b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Max, p_atomic, - value, {}, atomic_operation_order)); - old->setName("atomic.fetch.max.old.int"); - old = b->CreateBitCast( - old, b->getFloatTy(), "atomic.fetch.max.old"); - return _create_stack_variable(old, "atomic.fetch.max.addr"); - } - auto old = b->CreateAtomicRMW( - ::llvm::AtomicRMWInst::Max, p_atomic, - value, {}, atomic_operation_order); - old->setName("atomic.fetch.max.old"); - return _create_stack_variable(old, "atomic.fetch.max.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_normalize(const Type *t, ::llvm::Value *v) noexcept { - auto norm = _builtin_rsqrt(Type::of(), _builtin_dot(t, v, v)); - auto norm_v = _builtin_static_cast(t, Type::of(), norm); - return _builtin_mul(t, v, norm_v); -} - -::llvm::Value *LLVMCodegen::_builtin_dot(const Type *t, ::llvm::Value *va, ::llvm::Value *vb) noexcept { - auto b = _current_context()->builder.get(); - auto type = _create_type(t); - va = b->CreateLoad(type, va, "dot.a"); - vb = b->CreateLoad(type, vb, "dot.b"); - auto mul = b->CreateFMul(va, vb, "dot.mul"); - auto sum = b->CreateFAddReduce(_literal(0.f), mul); - sum->setName("dot.sum"); - return _create_stack_variable(sum, "dot.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_add(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "add.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "add.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateNSWAdd(lhs_v, rhs_v, "add"), - "add.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateAdd(lhs_v, rhs_v, "add"), - "add.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFAdd(lhs_v, rhs_v, "add"), - "add.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for add.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_sub(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "sub.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "sub.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateNSWSub(lhs_v, rhs_v, "sub"), - "sub.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateSub(lhs_v, rhs_v, "sub"), - "sub.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFSub(lhs_v, rhs_v, "sub"), - "sub.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for sub.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_mul(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "mul.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "mul.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateNSWMul(lhs_v, rhs_v, "mul"), - "mul.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateMul(lhs_v, rhs_v, "mul"), - "mul.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFMul(lhs_v, rhs_v, "mul"), - "mul.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for mul.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_div(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "div.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "div.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateSDiv(lhs_v, rhs_v, "div"), - "div.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateUDiv(lhs_v, rhs_v, "div"), - "div.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFDiv(lhs_v, rhs_v, "div"), - "div.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for div.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_mod(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "mod.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "mod.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateSRem(lhs_v, rhs_v, "mod"), - "mod.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateURem(lhs_v, rhs_v, "mod"), - "mod.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for mod.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_and(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - LUISA_ASSERT(is_scalar_or_vector(t, Type::Tag::INT) || - is_scalar_or_vector(t, Type::Tag::UINT) || - is_scalar_or_vector(t, Type::Tag::BOOL), - "Invalid type '{}' for and.", t->description()); - auto b = _current_context()->builder.get(); - auto result = b->CreateAnd( - b->CreateLoad(_create_type(t), lhs, "and.lhs"), - b->CreateLoad(_create_type(t), rhs, "and.rhs"), "and"); - return _create_stack_variable(result, "and.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_or(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - LUISA_ASSERT(is_scalar_or_vector(t, Type::Tag::INT) || - is_scalar_or_vector(t, Type::Tag::UINT) || - is_scalar_or_vector(t, Type::Tag::BOOL), - "Invalid type '{}' for or.", t->description()); - auto b = _current_context()->builder.get(); - auto result = b->CreateOr( - b->CreateLoad(_create_type(t), lhs, "or.lhs"), - b->CreateLoad(_create_type(t), rhs, "or.rhs"), "or"); - return _create_stack_variable(result, "or.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_xor(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - LUISA_ASSERT(is_scalar_or_vector(t, Type::Tag::INT) || - is_scalar_or_vector(t, Type::Tag::UINT) || - is_scalar_or_vector(t, Type::Tag::BOOL), - "Invalid type '{}' for xor.", t->description()); - auto b = _current_context()->builder.get(); - auto result = b->CreateXor( - b->CreateLoad(_create_type(t), lhs, "xor.lhs"), - b->CreateLoad(_create_type(t), rhs, "xor.rhs"), "xor"); - return _create_stack_variable(result, "xor.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_lt(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "lt.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "lt.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateICmpSLT(lhs_v, rhs_v, "lt"), - "lt.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateICmpULT(lhs_v, rhs_v, "lt"), - "lt.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFCmpOLT(lhs_v, rhs_v, "lt"), - "lt.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::BOOL)) { - return _create_stack_variable( - b->CreateICmpULT(lhs_v, rhs_v, "lt"), - "lt.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for lt.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_le(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "le.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "le.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateICmpSLE(lhs_v, rhs_v, "le"), - "le.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateICmpULE(lhs_v, rhs_v, "le"), - "le.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFCmpOLE(lhs_v, rhs_v, "le"), - "le.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::BOOL)) { - return _create_stack_variable( - b->CreateICmpULE(lhs_v, rhs_v, "le"), - "le.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for le.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_gt(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "gt.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "gt.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateICmpSGT(lhs_v, rhs_v, "gt"), - "gt.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateICmpUGT(lhs_v, rhs_v, "gt"), - "gt.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFCmpOGT(lhs_v, rhs_v, "gt"), - "gt.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::BOOL)) { - return _create_stack_variable( - b->CreateICmpUGT(lhs_v, rhs_v, "gt"), - "gt.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for gt.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_ge(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "ge.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "ge.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateICmpSGE(lhs_v, rhs_v, "ge"), - "ge.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateICmpUGE(lhs_v, rhs_v, "ge"), - "ge.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFCmpOGE(lhs_v, rhs_v, "ge"), - "ge.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::BOOL)) { - return _create_stack_variable( - b->CreateICmpUGE(lhs_v, rhs_v, "ge"), - "ge.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for ge.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_eq(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "eq.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "eq.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateICmpEQ(lhs_v, rhs_v, "eq"), - "eq.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateICmpEQ(lhs_v, rhs_v, "eq"), - "eq.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFCmpOEQ(lhs_v, rhs_v, "eq"), - "eq.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::BOOL)) { - return _create_stack_variable( - b->CreateICmpEQ(lhs_v, rhs_v, "eq"), - "eq.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for eq.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_ne(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "neq.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "neq.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateICmpNE(lhs_v, rhs_v, "neq"), - "neq.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateICmpNE(lhs_v, rhs_v, "neq"), - "neq.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::FLOAT)) { - return _create_stack_variable( - b->CreateFCmpONE(lhs_v, rhs_v, "neq"), - "neq.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::BOOL)) { - return _create_stack_variable( - b->CreateICmpNE(lhs_v, rhs_v, "neq"), - "neq.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for neq.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_shl(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "shl.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "shl.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT) || - is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateShl(lhs_v, rhs_v, "shl"), - "shl.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for shl.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_shr(const Type *t, ::llvm::Value *lhs, ::llvm::Value *rhs) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto lhs_v = b->CreateLoad(ir_type, lhs, "shr.lhs"); - auto rhs_v = b->CreateLoad(ir_type, rhs, "shr.rhs"); - if (is_scalar_or_vector(t, Type::Tag::INT)) { - return _create_stack_variable( - b->CreateAShr(lhs_v, rhs_v, "shr"), - "shr.addr"); - } - if (is_scalar_or_vector(t, Type::Tag::UINT)) { - return _create_stack_variable( - b->CreateLShr(lhs_v, rhs_v, "shr"), - "shr.addr"); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid operand type '{}' for shr.", - t->description()); -} - -void LLVMCodegen::_builtin_assume(::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto pred = b->CreateICmpNE( - b->CreateLoad( - _create_type(Type::of()), p, "assume.load"), - _literal(false), "assume.pred"); - b->CreateAssumption(pred); -} - -void LLVMCodegen::_builtin_unreachable() noexcept { - _current_context()->builder->CreateUnreachable(); -} - -::llvm::Value *LLVMCodegen::_builtin_isinf(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - if (t->is_scalar()) { - auto bits = b->CreateLoad( - b->getInt32Ty(), - _builtin_bitwise_cast(Type::of(), t, p), - "isinf.bits"); - auto is_inf = b->CreateLogicalOr( - b->CreateICmpEQ(bits, _literal(0x7f800000u), "isinf.pos"), - b->CreateICmpEQ(bits, _literal(0xff800000u), "isinf.neg"), - "isinf.pred"); - return _create_stack_variable(is_inf, "isinf.addr"); - } - switch (t->dimension()) { - case 2u: { - auto bits = b->CreateLoad( - _create_type(Type::of()), - _builtin_bitwise_cast(Type::of(), t, p), - "isinf.bits"); - auto is_inf = b->CreateLogicalOr( - b->CreateICmpEQ(bits, _literal(make_uint2(0x7f800000u)), "isinf.pos"), - b->CreateICmpEQ(bits, _literal(make_uint2(0xff800000u)), "isinf.neg"), - "isinf.pred"); - return _create_stack_variable(is_inf, "isinf.addr"); - } - case 3u: { - auto bits = b->CreateLoad( - _create_type(Type::of()), - _builtin_bitwise_cast(Type::of(), t, p), - "isinf.bits"); - auto is_inf = b->CreateLogicalOr( - b->CreateICmpEQ(bits, _literal(make_uint3(0x7f800000u)), "isinf.pos"), - b->CreateICmpEQ(bits, _literal(make_uint3(0xff800000u)), "isinf.neg"), - "isinf.pred"); - return _create_stack_variable(is_inf, "isinf.addr"); - } - case 4u: { - auto bits = b->CreateLoad( - _create_type(Type::of()), - _builtin_bitwise_cast(Type::of(), t, p), - "isinf.bits"); - auto is_inf = b->CreateLogicalOr( - b->CreateICmpEQ(bits, _literal(make_uint4(0x7f800000u)), "isinf.pos"), - b->CreateICmpEQ(bits, _literal(make_uint4(0xff800000u)), "isinf.neg"), - "isinf.pred"); - return _create_stack_variable(is_inf, "isinf.addr"); - } - default: break; - } - LUISA_ERROR_WITH_LOCATION( - "Invalid argument type '{}' for isinf.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_isnan(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - if (t->is_scalar()) { - auto bits = b->CreateLoad( - b->getInt32Ty(), - _builtin_bitwise_cast(Type::of(), t, p), - "isnan.bits"); - auto is_nan = b->CreateLogicalAnd( - b->CreateICmpEQ( - b->CreateAnd(bits, _literal(0x7f800000u), "isnan.exp"), - _literal(0x7f800000u), "isnan.exp.cmp"), - b->CreateICmpNE( - b->CreateAnd(bits, _literal(0x7fffffu), "isnan.mant"), - _literal(0u), "isnan.mant.cmp"), - "isnan.pred"); - return _create_stack_variable(is_nan, "isnan.addr"); - } - switch (t->dimension()) { - case 2u: { - auto bits = b->CreateLoad( - _create_type(Type::of()), - _builtin_bitwise_cast(Type::of(), t, p), - "isnan.bits"); - auto is_nan = b->CreateLogicalAnd( - b->CreateICmpEQ( - b->CreateAnd(bits, _literal(make_uint2(0x7f800000u)), "isnan.exp"), - _literal(make_uint2(0x7f800000u)), "isnan.exp.cmp"), - b->CreateICmpNE( - b->CreateAnd(bits, _literal(make_uint2(0x7fffffu)), "isnan.mant"), - _literal(make_uint2(0u)), "isnan.mant.cmp"), - "isnan.pred"); - return _create_stack_variable(is_nan, "isnan.addr"); - } - case 3u: { - auto bits = b->CreateLoad( - _create_type(Type::of()), - _builtin_bitwise_cast(Type::of(), t, p), - "isnan.bits"); - auto is_nan = b->CreateLogicalAnd( - b->CreateICmpEQ( - b->CreateAnd(bits, _literal(make_uint3(0x7f800000u)), "isnan.exp"), - _literal(make_uint3(0x7f800000u)), "isnan.exp.cmp"), - b->CreateICmpNE( - b->CreateAnd(bits, _literal(make_uint3(0x7fffffu)), "isnan.mant"), - _literal(make_uint3(0u)), "isnan.mant.cmp"), - "isnan.pred"); - return _create_stack_variable(is_nan, "isnan.addr"); - } - case 4u: { - auto bits = b->CreateLoad( - _create_type(Type::of()), - _builtin_bitwise_cast(Type::of(), t, p), - "isnan.bits"); - auto is_nan = b->CreateLogicalAnd( - b->CreateICmpEQ( - b->CreateAnd(bits, _literal(make_uint4(0x7f800000u)), "isnan.exp"), - _literal(make_uint4(0x7f800000u)), "isnan.exp.cmp"), - b->CreateICmpNE( - b->CreateAnd(bits, _literal(make_uint4(0x7fffffu)), "isnan.mant"), - _literal(make_uint4(0u)), "isnan.mant.cmp"), - "isnan.pred"); - return _create_stack_variable(is_nan, "isnan.addr"); - } - default: break; - } - LUISA_ERROR_WITH_LOCATION( - "Invalid argument type '{}' for isnan.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_static_cast(const Type *t_dst, const Type *t_src, ::llvm::Value *p) noexcept { - switch (t_dst->tag()) { - case Type::Tag::BOOL: return _scalar_to_bool(t_src, p); - case Type::Tag::FLOAT: return _scalar_to_float(t_src, p); - case Type::Tag::INT: return _scalar_to_int(t_src, p); - case Type::Tag::UINT: return _scalar_to_uint(t_src, p); - case Type::Tag::VECTOR: - return t_src->is_vector() ? - _vector_to_vector(t_dst, t_src, p) : - _scalar_to_vector(t_dst, t_src, p); - case Type::Tag::MATRIX: - return t_src->is_matrix() ? - _matrix_to_matrix(t_dst, t_src, p) : - _scalar_to_matrix(t_dst, t_src, p); - default: break; - } - LUISA_ASSERT(*t_dst == *t_src, "Cannot convert '{}' to '{}'.", - t_src->description(), t_dst->description()); - return p; -} - -::llvm::Value *LLVMCodegen::_builtin_bitwise_cast(const Type *t_dst, const Type *t_src, ::llvm::Value *p) noexcept { - LUISA_ASSERT(t_dst->size() == t_src->size(), - "Invalid bitwise cast: {} to {}.", - t_src->description(), t_dst->description()); - auto b = _current_context()->builder.get(); - auto src_ir_type = _create_type(t_src); - auto dst_ir_type = _create_type(t_dst); - auto p_dst = b->CreateBitOrPointerCast(p, dst_ir_type->getPointerTo(), "bitcast.ptr"); - auto dst = b->CreateLoad(dst_ir_type, p_dst, "bitcast.dst"); - return _create_stack_variable(dst, "bitcast.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_unary_plus(const Type *t, ::llvm::Value *p) noexcept { - return p; -} - -::llvm::Value *LLVMCodegen::_builtin_unary_minus(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - if (t->is_matrix()) { - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t->dimension(); ++i) { - auto name = fmt::format("unary.minus.m{}.addr", i); - m[i] = b->CreateStructGEP( - ir_type, p, i, - ::llvm::StringRef{name.data(), name.size()}); - } - if (t->dimension() == 2u) { - return _make_float2x2( - b->CreateFNeg(m[0]), - b->CreateFNeg(m[1])); - } - if (t->dimension() == 3u) { - return _make_float3x3( - b->CreateFNeg(m[0]), - b->CreateFNeg(m[1]), - b->CreateFNeg(m[2])); - } - if (t->dimension() == 4u) { - return _make_float4x4( - b->CreateFNeg(m[0]), - b->CreateFNeg(m[1]), - b->CreateFNeg(m[2]), - b->CreateFNeg(m[3])); - } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for unary minus.", - t->dimension()); - } - auto x = b->CreateLoad(ir_type, p, "unary.minus.load"); - switch (auto tag = t->is_scalar() ? t->tag() : t->element()->tag()) { - case Type::Tag::BOOL: return _create_stack_variable( - b->CreateNot(x, "unary.minus"), - "unary.minus.addr"); - case Type::Tag::FLOAT: return _create_stack_variable( - b->CreateFNeg(x, "unary.minus"), - "unary.minus.addr"); - case Type::Tag::INT: - case Type::Tag::UINT: return _create_stack_variable( - b->CreateNeg(x, "unary.minus"), - "unary.minus.addr"); - default: break; - } - LUISA_ERROR_WITH_LOCATION( - "Invalid argument type '{}' for unary minus.", - t->description()); -} - -::llvm::Value *LLVMCodegen::_builtin_unary_not(const Type *t, ::llvm::Value *p) noexcept { - auto b = _current_context()->builder.get(); - p = t->is_scalar() ? _scalar_to_bool(t, p) : _vector_to_bool_vector(t, p); - auto i8_type = static_cast<::llvm::Type *>(::llvm::Type::getInt8Ty(_context)); - auto i8_vec_type = t->is_scalar() ? i8_type : ::llvm::FixedVectorType::get(i8_type, t->dimension()); - auto v = b->CreateLoad(i8_vec_type, p); - auto type = static_cast<::llvm::Type *>(b->getInt1Ty()); - if (t->is_vector()) { type = ::llvm::FixedVectorType::get(type, t->dimension()); } - auto nv = b->CreateNot(b->CreateTrunc(v, type), "unary.not"); - return _create_stack_variable(nv, "unary.not.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_unary_bit_not(const Type *t, ::llvm::Value *p) noexcept { - LUISA_ASSERT(t->tag() == Type::Tag::INT || t->tag() == Type::Tag::UINT || - (t->is_vector() && t->element()->tag() == Type::Tag::INT) || - (t->is_vector() && t->element()->tag() == Type::Tag::UINT), - "Invalid argument type '{}' for bitwise not.", - t->description()); - auto b = _current_context()->builder.get(); - auto ir_type = _create_type(t); - auto x = b->CreateLoad(ir_type, p, "unary.bitnot.load"); - return _create_stack_variable(b->CreateNot(x, "unary.bitnot"), "unary.bitnot.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_add_matrix_scalar(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_scalar(), - "Invalid argument types '{}' and '{}' for matrix-scalar addition.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto lhs_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto rhs = _scalar_to_vector(col_type, t_rhs, p_rhs); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto name = fmt::format("add.lhs.m{}.addr", i); - auto col = b->CreateStructGEP( - lhs_type, p_lhs, i, - ::llvm::StringRef{name.data(), name.size()}); - m[i] = _builtin_add(col_type, col, rhs); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-scalar addition.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_add_scalar_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - return _builtin_add_matrix_scalar(t_rhs, t_lhs, p_rhs, p_lhs); -} - -::llvm::Value *LLVMCodegen::_builtin_add_matrix_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_matrix() && - t_lhs->dimension() == t_rhs->dimension(), - "Invalid argument types '{}' and '{}' for matrix-matrix addition.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto matrix_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto lhs_name = fmt::format("add.lhs.m{}.addr", i); - auto rhs_name = fmt::format("add.rhs.m{}.addr", i); - auto lhs = b->CreateStructGEP( - matrix_type, p_lhs, i, - ::llvm::StringRef{lhs_name.data(), lhs_name.size()}); - auto rhs = b->CreateStructGEP( - matrix_type, p_rhs, i, - ::llvm::StringRef{rhs_name.data(), rhs_name.size()}); - m[i] = _builtin_add(col_type, lhs, rhs); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-matrix addition.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_sub_matrix_scalar(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_scalar(), - "Invalid argument types '{}' and '{}' for matrix-scalar subtraction.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto lhs_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto rhs = _scalar_to_vector(col_type, t_rhs, p_rhs); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto name = fmt::format("sub.lhs.m{}.addr", i); - auto col = b->CreateStructGEP( - lhs_type, p_lhs, i, - ::llvm::StringRef{name.data(), name.size()}); - m[i] = _builtin_sub(col_type, col, rhs); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-scalar subtraction.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_sub_scalar_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_scalar() && t_rhs->is_matrix(), - "Invalid argument types '{}' and '{}' for matrix-scalar subtraction.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto matrix_type = _create_type(t_rhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto lhs = _scalar_to_vector(col_type, t_lhs, p_lhs); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto name = fmt::format("add.rhs.m{}.addr", i); - auto rhs_col = b->CreateStructGEP( - matrix_type, p_rhs, i, - ::llvm::StringRef{name.data(), name.size()}); - m[i] = _builtin_sub(col_type, lhs, rhs_col); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-scalar subtraction.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_sub_matrix_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_matrix() && - t_lhs->dimension() == t_rhs->dimension(), - "Invalid argument types '{}' and '{}' for matrix-matrix subtraction.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto matrix_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto lhs_name = fmt::format("sub.lhs.m{}.addr", i); - auto rhs_name = fmt::format("sub.rhs.m{}.addr", i); - auto lhs = b->CreateStructGEP( - matrix_type, p_lhs, i, - ::llvm::StringRef{lhs_name.data(), lhs_name.size()}); - auto rhs = b->CreateStructGEP( - matrix_type, p_rhs, i, - ::llvm::StringRef{rhs_name.data(), rhs_name.size()}); - m[i] = _builtin_sub(col_type, lhs, rhs); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-matrix subtraction.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_mul_matrix_scalar(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_scalar(), - "Invalid argument types '{}' and '{}' for matrix-scalar multiplication.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto lhs_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto rhs = _scalar_to_vector(col_type, t_rhs, p_rhs); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto name = fmt::format("mul.lhs.m{}.addr", i); - auto col = b->CreateStructGEP( - lhs_type, p_lhs, i, - ::llvm::StringRef{name.data(), name.size()}); - m[i] = _builtin_mul(col_type, col, rhs); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-scalar multiplication.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_mul_scalar_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - return _builtin_mul_matrix_scalar(t_rhs, t_lhs, p_rhs, p_lhs); -} - -::llvm::Value *LLVMCodegen::_builtin_mul_matrix_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_matrix() && - t_lhs->dimension() == t_rhs->dimension(), - "Invalid argument types '{}' and '{}' for matrix-matrix multiplication.", - t_lhs->description(), t_rhs->description()); - std::array<::llvm::Value *, 4u> m{}; - auto matrix_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto b = _current_context()->builder.get(); - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto rhs_name = fmt::format("mul.rhs.m{}.addr", i); - auto rhs_col = b->CreateStructGEP( - matrix_type, p_rhs, i, - ::llvm::StringRef{rhs_name.data(), rhs_name.size()}); - m[i] = _builtin_mul_matrix_vector(t_lhs, col_type, p_lhs, rhs_col); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-matrix multiplication.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_mul_matrix_vector(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_vector() && - t_lhs->dimension() == t_rhs->dimension(), - "Invalid argument types '{}' and '{}' for matrix-vector multiplication.", - t_lhs->description(), t_rhs->description()); - std::array<::llvm::Value *, 4u> m{}; - auto b = _current_context()->builder.get(); - auto matrix_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto rhs = b->CreateLoad(_create_type(t_rhs), p_rhs, "mul.rhs"); - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto col_name = fmt::format("mul.lhs.m{}.addr", i); - auto col = b->CreateStructGEP( - matrix_type, p_lhs, i, - ::llvm::StringRef{col_name.data(), col_name.size()}); - auto v_name = fmt::format("mul.rhs.v{}", i); - ::llvm::SmallVector masks(t_rhs->dimension(), static_cast(i)); - auto v = b->CreateShuffleVector(rhs, masks, ::llvm::StringRef{v_name.data(), v_name.size()}); - auto pv_name = fmt::format("mul.rhs.v{}.addr", i); - m[i] = _builtin_mul(col_type, col, _create_stack_variable(v, luisa::string_view{pv_name})); - } - if (t_lhs->dimension() == 2u) { return _builtin_add(col_type, m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _builtin_add(col_type, _builtin_add(col_type, m[0], m[1]), m[2]); } - if (t_lhs->dimension() == 4u) { return _builtin_add(col_type, _builtin_add(col_type, m[0], m[1]), _builtin_add(col_type, m[2], m[3])); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-vector multiplication.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_div_matrix_scalar(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_matrix() && t_rhs->is_scalar(), - "Invalid argument types '{}' and '{}' for matrix-scalar division.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto lhs_type = _create_type(t_lhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto rhs = _scalar_to_vector(col_type, t_rhs, p_rhs); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto name = fmt::format("div.lhs.m{}.addr", i); - auto col = b->CreateStructGEP( - lhs_type, p_lhs, i, - ::llvm::StringRef{name.data(), name.size()}); - m[i] = _builtin_div(col_type, col, rhs); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-scalar division.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_div_scalar_matrix(const Type *t_lhs, const Type *t_rhs, ::llvm::Value *p_lhs, ::llvm::Value *p_rhs) noexcept { - LUISA_ASSERT(t_lhs->is_scalar() && t_rhs->is_matrix(), - "Invalid argument types '{}' and '{}' for matrix-scalar division.", - t_lhs->description(), t_rhs->description()); - auto b = _current_context()->builder.get(); - auto matrix_type = _create_type(t_rhs); - auto col_type = Type::from(luisa::format("vector", t_lhs->dimension())); - auto lhs = _scalar_to_vector(col_type, t_lhs, p_lhs); - std::array<::llvm::Value *, 4u> m{}; - for (auto i = 0u; i < t_lhs->dimension(); ++i) { - auto name = fmt::format("add.rhs.m{}.addr", i); - auto rhs_col = b->CreateStructGEP( - matrix_type, p_rhs, i, - ::llvm::StringRef{name.data(), name.size()}); - m[i] = _builtin_div(col_type, lhs, rhs_col); - } - if (t_lhs->dimension() == 2u) { return _make_float2x2(m[0], m[1]); } - if (t_lhs->dimension() == 3u) { return _make_float3x3(m[0], m[1], m[2]); } - if (t_lhs->dimension() == 4u) { return _make_float4x4(m[0], m[1], m[2], m[3]); } - LUISA_ERROR_WITH_LOCATION( - "Invalid matrix dimension '{}' for matrix-scalar division.", - t_lhs->dimension()); -} - -::llvm::Value *LLVMCodegen::_builtin_buffer_read(const Type *t_value, ::llvm::Value *buffer, ::llvm::Value *p_index) noexcept { - auto b = _current_context()->builder.get(); - auto value_type = _create_type(t_value); - auto index = b->CreateLoad(_create_type(Type::of()), p_index, "buffer.read.index"); - auto ptr = b->CreateInBoundsGEP(value_type, buffer, index, "buffer.read.ptr"); - auto value = b->CreateLoad(value_type, ptr, "buffer.read"); - return _create_stack_variable(value, "buffer.read.addr"); -} - -void LLVMCodegen::_builtin_buffer_write(const Type *t_value, ::llvm::Value *buffer, ::llvm::Value *p_index, ::llvm::Value *p_value) noexcept { - auto b = _current_context()->builder.get(); - auto value_type = _create_type(t_value); - auto index = b->CreateLoad(_create_type(Type::of()), p_index, "buffer.write.index"); - auto ptr = b->CreateInBoundsGEP(value_type, buffer, index, "buffer.write.ptr"); - _create_assignment(t_value, t_value, ptr, p_value); -} - -::llvm::Value *LLVMCodegen::_builtin_texture_read(const Type *t, ::llvm::Value *texture, - const Type *t_coord, ::llvm::Value *p_coord) noexcept { - LUISA_ASSERT(t->is_vector() && t->dimension() == 4u, - "Invalid type '{}' for texture-read.", - t->description()); - // <4 x float> texture.read.Nd.type(i64 t0, i64 t1, i64 c0, i64 c2) - auto b = _current_context()->builder.get(); - auto coord = b->CreateLoad(_create_type(t_coord), p_coord, "texture.read.coord"); - auto coord_type = static_cast<::llvm::FixedVectorType *>(coord->getType()); - auto dim = coord_type->getNumElements() == 2u ? 2u : 3u; - auto func_name = luisa::format("texture.read.{}d.{}", dim, t->element()->description()); - auto func = _module->getFunction(::llvm::StringRef{func_name.data(), func_name.size()}); - auto i64_type = ::llvm::Type::getInt64Ty(_context); - auto f32v4_type = ::llvm::FixedVectorType::get(b->getFloatTy(), 4u); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - f32v4_type, - {i64_type, i64_type, i64_type, i64_type}, - false), - ::llvm::Function::ExternalLinkage, - ::llvm::StringRef{func_name.data(), func_name.size()}, - _module); - func->setNoSync(); - func->setWillReturn(); - func->setDoesNotThrow(); - func->setMustProgress(); - func->setDoesNotRecurse(); - func->setOnlyReadsMemory(); - func->setDoesNotFreeMemory(); - func->setOnlyAccessesInaccessibleMemOrArgMem(); - } - auto t0 = b->CreateExtractValue(texture, 0u, "texture.read.texture.t0"); - auto t1 = b->CreateExtractValue(texture, 1u, "texture.read.texture.t1"); - std::array shuffle{0, 1, 0, 0}; - if (dim == 3u) { shuffle[2] = 2; } - auto coord_vector = _create_stack_variable( - b->CreateShuffleVector( - coord, shuffle, "texture.read.coord.vector"), - "texture.read.coord.vector.addr"); - auto i64v2_type = ::llvm::FixedVectorType::get(i64_type, 2u); - p_coord = b->CreateBitOrPointerCast( - coord_vector, i64v2_type->getPointerTo(0), - "texture.read.coord.ulong2.addr"); - coord = b->CreateLoad(i64v2_type, p_coord, "texture.read.coord.ulong2"); - auto c0 = b->CreateExtractElement(coord, static_cast(0u), "texture.read.coord.c0"); - auto c1 = b->CreateExtractElement(coord, static_cast(1u), "texture.read.coord.c1"); - auto ret = static_cast<::llvm::Value *>(b->CreateCall(func, {t0, t1, c0, c1}, "texture.read.ret")); - if (t->element()->tag() != Type::Tag::FLOAT) { ret = b->CreateBitCast(ret, _create_type(t), "texture.read.ret.cast"); } - return _create_stack_variable(ret, "texture.read.addr"); -} - -void LLVMCodegen::_builtin_texture_write(const Type *t, ::llvm::Value *texture, const Type *t_coord, - ::llvm::Value *p_coord, ::llvm::Value *p_value) noexcept { - LUISA_ASSERT(t->is_vector() && t->dimension() == 4u, - "Invalid type '{}' for texture-write.", - t->description()); - // texture.write.Nd.type(i64 t0, i64 t1, i64 c0, i64 c1, i64 v0, i64 v1) - auto b = _current_context()->builder.get(); - auto coord = b->CreateLoad(_create_type(t_coord), p_coord, "texture.write.coord"); - auto coord_type = static_cast<::llvm::FixedVectorType *>(coord->getType()); - auto dim = coord_type->getNumElements() == 2u ? 2u : 3u; - auto func_name = luisa::format("texture.write.{}d.{}", dim, t->element()->description()); - auto func = _module->getFunction(::llvm::StringRef{func_name.data(), func_name.size()}); - auto i64_type = ::llvm::Type::getInt64Ty(_context); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::Type::getVoidTy(_context), - {i64_type, i64_type, i64_type, i64_type, i64_type, i64_type}, - false), - ::llvm::Function::ExternalLinkage, - ::llvm::StringRef{func_name.data(), func_name.size()}, - _module); - func->setNoSync(); - func->setWillReturn(); - func->setDoesNotThrow(); - func->setMustProgress(); - func->setDoesNotRecurse(); - func->setDoesNotFreeMemory(); - func->setOnlyAccessesInaccessibleMemOrArgMem(); - } - auto t0 = b->CreateExtractValue(texture, 0u, "texture.write.texture.t0"); - auto t1 = b->CreateExtractValue(texture, 1u, "texture.write.texture.t1"); - std::array shuffle{0, 1, 0, 0}; - if (dim == 3u) { shuffle[2] = 2; } - auto i64v2_type = ::llvm::FixedVectorType::get(i64_type, 2u); - auto coord_vector = _create_stack_variable( - b->CreateShuffleVector( - coord, shuffle, "texture.write.coord.vector"), - "texture.write.coord.vector.addr"); - p_coord = b->CreateBitOrPointerCast( - coord_vector, i64v2_type->getPointerTo(0), - "texture.write.coord.ulong2.addr"); - coord = b->CreateLoad(i64v2_type, p_coord, "texture.write.coord.ulong2"); - auto c0 = b->CreateExtractElement(coord, static_cast(0u), "texture.write.coord.c0"); - auto c1 = b->CreateExtractElement(coord, static_cast(1u), "texture.write.coord.c1"); - p_value = b->CreateBitOrPointerCast( - p_value, i64v2_type->getPointerTo(0), "texture.write.value.ulong2.addr"); - auto value = b->CreateLoad(i64v2_type, p_value, "texture.write.value.ulong"); - auto v0 = b->CreateExtractElement(value, static_cast(0u), "texture.write.value.v0"); - auto v1 = b->CreateExtractElement(value, static_cast(1u), "texture.write.value.v1"); - b->CreateCall(func->getFunctionType(), func, {t0, t1, c0, c1, v0, v1}); -} - -::llvm::Value *LLVMCodegen::_builtin_trace_closest(::llvm::Value *accel, ::llvm::Value *p_ray) noexcept { - // <4 x float> trace_closest(i64 accel, i64 r0, i64 r1, i64 r2, i64 r3) - auto b = _current_context()->builder.get(); - auto i64_type = ::llvm::Type::getInt64Ty(_context); - auto func_name = "accel.trace.closest"; - auto func = _module->getFunction(func_name); - accel = b->CreateExtractValue(accel, 0u, "trace.closest.accel.handle"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {accel->getType(), i64_type, i64_type, i64_type, i64_type}, - false), - ::llvm::Function::ExternalLinkage, func_name, _module); - func->setNoSync(); - func->setWillReturn(); - func->setDoesNotThrow(); - func->setMustProgress(); - func->setSpeculatable(); - func->setOnlyReadsMemory(); - func->setDoesNotFreeMemory(); - func->setOnlyAccessesInaccessibleMemOrArgMem(); - } - auto ray_struct_type = ::llvm::FixedVectorType::get(i64_type, 4u); - p_ray = b->CreateBitOrPointerCast(p_ray, ray_struct_type->getPointerTo(0), - "trace.closest.ray.struct.addr"); - auto ray = b->CreateLoad(ray_struct_type, p_ray, "trace.closest.ray.struct"); - auto r0 = b->CreateExtractElement(ray, static_cast(0u), "trace.closest.ray.r0"); - auto r1 = b->CreateExtractElement(ray, static_cast(1u), "trace.closest.ray.r1"); - auto r2 = b->CreateExtractElement(ray, static_cast(2u), "trace.closest.ray.r2"); - auto r3 = b->CreateExtractElement(ray, static_cast(3u), "trace.closest.ray.r3"); - auto ret = b->CreateCall( - func->getFunctionType(), func, {accel, r0, r1, r2, r3}, - "accel.trace.closest.struct"); - auto inst = b->CreateBitCast(b->CreateExtractElement(ret, static_cast(0u)), b->getInt32Ty(), "trace.closest.hit.inst"); - auto prim = b->CreateBitCast(b->CreateExtractElement(ret, static_cast(1u)), b->getInt32Ty(), "trace.closest.hit.prim"); - auto bary = b->CreateShuffleVector(ret, {2, 3}, "trace.closest.hit.bary"); - auto hit = static_cast<::llvm::Value *>(::llvm::UndefValue::get(_create_type(Type::of()))); - hit = b->CreateInsertValue(hit, inst, 0u); - hit = b->CreateInsertValue(hit, prim, 1u); - hit = b->CreateInsertValue(hit, bary, 2u, "trace_closest.hit"); - return _create_stack_variable(hit, "trace_closest.hit.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_trace_any(::llvm::Value *accel, ::llvm::Value *p_ray) noexcept { - // i8 trace_closest(i64 accel, i64 r0, i64 r1, i64 r2, i64 r3) - auto b = _current_context()->builder.get(); - auto i64_type = ::llvm::Type::getInt64Ty(_context); - auto func_name = "accel.trace.any"; - auto func = _module->getFunction(func_name); - accel = b->CreateExtractValue(accel, 0u, "trace_closest.accel.handle"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::Type::getInt8Ty(_context), - {accel->getType(), i64_type, i64_type, i64_type, i64_type}, - false), - ::llvm::Function::ExternalLinkage, func_name, _module); - func->setNoSync(); - func->setWillReturn(); - func->setDoesNotThrow(); - func->setMustProgress(); - func->setSpeculatable(); - func->setOnlyReadsMemory(); - func->setDoesNotFreeMemory(); - func->setOnlyAccessesInaccessibleMemOrArgMem(); - } - auto ray_struct_type = ::llvm::FixedVectorType::get(i64_type, 4u); - p_ray = b->CreateBitOrPointerCast( - p_ray, ray_struct_type->getPointerTo(0), - "trace_any.ray.struct.addr"); - auto ray = b->CreateLoad(ray_struct_type, p_ray, "trace_any.ray.struct"); - auto r0 = b->CreateExtractElement(ray, static_cast(0u), "trace_any.ray.r0"); - auto r1 = b->CreateExtractElement(ray, static_cast(1u), "trace_any.ray.r1"); - auto r2 = b->CreateExtractElement(ray, static_cast(2u), "trace_any.ray.r2"); - auto r3 = b->CreateExtractElement(ray, static_cast(3u), "trace_any.ray.r3"); - auto ret = b->CreateCall( - func->getFunctionType(), func, {accel, r0, r1, r2, r3}, - "accel.trace.any.ret"); - auto hit = b->CreateTrunc(ret, b->getInt1Ty()); - hit->setName("accel.trace.any.hit"); - return _create_stack_variable(hit, "accel.trace.any.hit.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_length_squared(const Type *t, ::llvm::Value *v) noexcept { - return _builtin_dot(t, v, v); -} - -::llvm::Value *LLVMCodegen::_builtin_cross(const Type *t, ::llvm::Value *va, ::llvm::Value *vb) noexcept { - LUISA_ASSERT(t->is_vector() && t->dimension() == 3u, - "Invalid argument types '{}' and '{}' for cross product.", - t->description(), t->description()); - auto b = _current_context()->builder.get(); - auto type = _create_type(t); - va = b->CreateLoad(type, va, "cross.a"); - vb = b->CreateLoad(type, vb, "cross.b"); - auto a_x = b->CreateExtractElement(va, static_cast(0u), "cross.a.x"); - auto a_y = b->CreateExtractElement(va, static_cast(1u), "cross.a.y"); - auto a_z = b->CreateExtractElement(va, static_cast(2u), "cross.a.z"); - auto b_x = b->CreateExtractElement(vb, static_cast(0u), "cross.b.x"); - auto b_y = b->CreateExtractElement(vb, static_cast(1u), "cross.b.y"); - auto b_z = b->CreateExtractElement(vb, static_cast(2u), "cross.b.z"); - auto x = b->CreateFSub(b->CreateFMul(a_y, b_z), b->CreateFMul(a_z, b_y), "cross.x"); - auto y = b->CreateFSub(b->CreateFMul(a_z, b_x), b->CreateFMul(a_x, b_z), "cross.y"); - auto z = b->CreateFSub(b->CreateFMul(a_x, b_y), b->CreateFMul(a_y, b_x), "cross.z"); - return _make_float3(_create_stack_variable(x, "cross.x.addr"), - _create_stack_variable(y, "cross.y.addr"), - _create_stack_variable(z, "cross.z.addr")); -} - -::llvm::Value *LLVMCodegen::_builtin_make_vector2_overloaded(const Type *t_vec, luisa::span args) noexcept { - if (args.size() == 1u) { - return _builtin_static_cast(t_vec, args[0]->type(), _create_expr(args[0])); - } - if (args.size() == 2u) { - LUISA_ASSERT(args[0]->type()->is_scalar() && args[1]->type()->is_scalar(), - "Invalid argument types '{}' and '{}' for make-vector2.", - args[0]->type()->description(), args[1]->type()->description()); - return _make_float2(_builtin_static_cast(t_vec->element(), args[0]->type(), _create_expr(args[0])), - _builtin_static_cast(t_vec->element(), args[1]->type(), _create_expr(args[1]))); - } - LUISA_ERROR_WITH_LOCATION("Invalid number of arguments '{}' for make-vector2.", args.size()); -} - -::llvm::Value *LLVMCodegen::_builtin_make_vector3_overloaded(const Type *t_vec, luisa::span args) noexcept { - if (args.size() == 1u) { - return _builtin_static_cast(t_vec, args[0]->type(), _create_expr(args[0])); - } - auto b = _current_context()->builder.get(); - if (args.size() == 2u) { - if (args[0]->type()->is_scalar()) { - LUISA_ASSERT(args[1]->type()->is_vector() && args[1]->type()->dimension() == 2u, - "Invalid argument types ('{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - t_vec->description()); - auto yz = b->CreateLoad( - _create_type(args[1]->type()), _create_expr(args[1]), "make.vector3.yz"); - auto y = _create_stack_variable( - b->CreateExtractElement(yz, static_cast(0u), "make.vector3.x"), - "make.vector3.y.addr"); - auto z = _create_stack_variable( - b->CreateExtractElement(yz, static_cast(1u), "make.vector3.y"), - "make.vector3.z.addr"); - auto x = _builtin_static_cast(t_vec->element(), args[0]->type(), _create_expr(args[0])); - return _make_float3(x, y, z); - } - LUISA_ASSERT(args[0]->type()->is_vector() && args[0]->type()->dimension() == 2u && - args[1]->type()->is_scalar(), - "Invalid argument types ('{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - t_vec->description()); - auto xy = b->CreateLoad( - _create_type(args[0]->type()), _create_expr(args[0]), "make.vector3.xy"); - auto x = _create_stack_variable( - b->CreateExtractElement(xy, static_cast(0u), "make.vector3.x"), - "make.vector3.x.addr"); - auto y = _create_stack_variable( - b->CreateExtractElement(xy, static_cast(1u), "make.vector3.y"), - "make.vector3.y.addr"); - auto z = _builtin_static_cast(t_vec->element(), args[1]->type(), _create_expr(args[1])); - return _make_float3(x, y, z); - } - if (args.size() == 3u) { - LUISA_ASSERT(args[0]->type()->is_scalar() && args[1]->type()->is_scalar() && - args[2]->type()->is_scalar(), - "Invalid argument types ('{}', '{}', '{}') for make-vector3.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description()); - return _make_float3(_builtin_static_cast(t_vec->element(), args[0]->type(), _create_expr(args[0])), - _builtin_static_cast(t_vec->element(), args[1]->type(), _create_expr(args[1])), - _builtin_static_cast(t_vec->element(), args[2]->type(), _create_expr(args[2]))); - } - LUISA_ERROR_WITH_LOCATION("Invalid number of arguments '{}' for make-vector3.", args.size()); -} - -::llvm::Value *LLVMCodegen::_builtin_make_vector4_overloaded(const Type *t_vec, luisa::span args) noexcept { - if (args.size() == 1u) { - return _builtin_static_cast(t_vec, args[0]->type(), _create_expr(args[0])); - } - auto b = _current_context()->builder.get(); - if (args.size() == 2u) { - // (x, yzw) - if (args[0]->type()->is_scalar()) { - LUISA_ASSERT(args[1]->type()->is_vector() && args[1]->type()->dimension() == 3u, - "Invalid argument types ('{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - t_vec->description()); - auto yzw = b->CreateLoad( - _create_type(args[1]->type()), _create_expr(args[1]), "make.vector4.yzw"); - auto y = _create_stack_variable( - b->CreateExtractElement(yzw, static_cast(0u), "make.vector4.x"), - "make.vector4.y.addr"); - auto z = _create_stack_variable( - b->CreateExtractElement(yzw, static_cast(1u), "make.vector4.y"), - "make.vector4.z.addr"); - auto w = _create_stack_variable( - b->CreateExtractElement(yzw, static_cast(2u), "make.vector4.z"), - "make.vector4.w.addr"); - auto x = _builtin_static_cast(t_vec->element(), args[0]->type(), _create_expr(args[0])); - return _make_float4(x, y, z, w); - } - LUISA_ASSERT(args[0]->type()->is_vector(), - "Invalid argument types ('{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - t_vec->description()); - // (xyz, w) - if (args[0]->type()->dimension() == 3u) { - LUISA_ASSERT(args[1]->type()->is_scalar(), - "Invalid argument types ('{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - t_vec->description()); - auto xyz = b->CreateLoad( - _create_type(args[0]->type()), _create_expr(args[0]), "make.vector4.xyz"); - auto x = _create_stack_variable( - b->CreateExtractElement(xyz, static_cast(0u), "make.vector4.x"), - "make.vector4.x.addr"); - auto y = _create_stack_variable( - b->CreateExtractElement(xyz, static_cast(1u), "make.vector4.y"), - "make.vector4.y.addr"); - auto z = _create_stack_variable( - b->CreateExtractElement(xyz, static_cast(2u), "make.vector4.z"), - "make.vector4.z.addr"); - auto w = _builtin_static_cast(t_vec->element(), args[1]->type(), _create_expr(args[1])); - return _make_float4(x, y, z, w); - } - // (xy, zw) - LUISA_ASSERT(args[0]->type()->dimension() == 2u && - args[1]->type()->is_vector() && args[1]->type()->dimension() == 2u, - "Invalid argument types ('{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - t_vec->description()); - auto xy = b->CreateLoad( - _create_type(args[0]->type()), _create_expr(args[0]), "make.vector4.xy"); - auto zw = b->CreateLoad( - _create_type(args[1]->type()), _create_expr(args[1]), "make.vector4.zw"); - auto x = _create_stack_variable( - b->CreateExtractElement(xy, static_cast(0u), "make.vector4.x"), - "make.vector4.x.addr"); - auto y = _create_stack_variable( - b->CreateExtractElement(xy, static_cast(1u), "make.vector4.y"), - "make.vector4.y.addr"); - auto z = _create_stack_variable( - b->CreateExtractElement(zw, static_cast(0u), "make.vector4.z"), - "make.vector4.z.addr"); - auto w = _create_stack_variable( - b->CreateExtractElement(zw, static_cast(1u), "make.vector4.w"), - "make.vector4.w.addr"); - return _make_float4(x, y, z, w); - } - if (args.size() == 3u) { - ::llvm::SmallVector<::llvm::Value *, 4u> v; - for (auto arg : args) { - if (arg->type()->is_scalar()) { - v.emplace_back(_builtin_static_cast( - t_vec->element(), arg->type(), _create_expr(arg))); - } else { - LUISA_ASSERT(arg->type()->is_vector() && arg->type()->dimension() == 2u, - "Invalid argument types ('{}', '{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), t_vec->description()); - auto vec = b->CreateLoad( - _create_type(arg->type()), _create_expr(arg), "make.vector4.v"); - v.emplace_back(_create_stack_variable( - b->CreateExtractElement(vec, static_cast(0u), "make.vector4.v.x"), - "make.vector4.v.x.addr")); - v.emplace_back(_create_stack_variable( - b->CreateExtractElement(vec, static_cast(1u), "make.vector4.v.y"), - "make.vector4.v.y.addr")); - } - } - LUISA_ASSERT(v.size() == 4u, "Invalid argument types ('{}', '{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), t_vec->description()); - return _make_float4(v[0], v[1], v[2], v[3]); - } - LUISA_ASSERT(args.size() == 4u && - args[0]->type()->is_scalar() && args[1]->type()->is_scalar() && - args[2]->type()->is_scalar() && args[3]->type()->is_scalar(), - "Invalid argument types ('{}', '{}', '{}', '{}') to make {}.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), args[3]->type()->description(), - t_vec->description()); - return _make_float4(_builtin_static_cast(t_vec->element(), args[0]->type(), _create_expr(args[0])), - _builtin_static_cast(t_vec->element(), args[1]->type(), _create_expr(args[1])), - _builtin_static_cast(t_vec->element(), args[2]->type(), _create_expr(args[2])), - _builtin_static_cast(t_vec->element(), args[3]->type(), _create_expr(args[3]))); -} - -::llvm::Value *LLVMCodegen::_builtin_make_matrix2_overloaded(luisa::span args) noexcept { - if (args.size() == 1u) { - return _builtin_static_cast(Type::of(), args[0]->type(), _create_expr(args[0])); - } - if (args.size() == 2u) { - LUISA_ASSERT(args[0]->type()->is_vector() && args[0]->type()->dimension() == 2u && - args[1]->type()->is_vector() && args[1]->type()->dimension() == 2u, - "Invalid argument types '{}' and '{}' for float2x2 constructor.", - args[0]->type()->description(), args[1]->type()->description()); - return _make_float2x2(_create_expr(args[0]), _create_expr(args[1])); - } - LUISA_ASSERT(args.size() == 4u, - "Invalid number of arguments '{}' for float2x2 constructor.", - args.size()); - LUISA_ASSERT(args[0]->type()->is_scalar() && args[1]->type()->is_scalar() && - args[2]->type()->is_scalar() && args[3]->type()->is_scalar(), - "Invalid argument types ('{}', '{}', '{}', '{}') for float2x2 constructor.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), args[3]->type()->description()); - auto c0 = _make_float2(_builtin_static_cast(Type::of(), args[0]->type(), _create_expr(args[0])), - _builtin_static_cast(Type::of(), args[1]->type(), _create_expr(args[1]))); - auto c1 = _make_float2(_builtin_static_cast(Type::of(), args[2]->type(), _create_expr(args[2])), - _builtin_static_cast(Type::of(), args[3]->type(), _create_expr(args[3]))); - return _make_float2x2(c0, c1); -} - -::llvm::Value *LLVMCodegen::_builtin_make_matrix3_overloaded(luisa::span args) noexcept { - if (args.size() == 1u) { - return _builtin_static_cast(Type::of(), args[0]->type(), _create_expr(args[0])); - } - if (args.size() == 3u) { - LUISA_ASSERT(args[0]->type()->is_vector() && args[0]->type()->dimension() == 3u && - args[1]->type()->is_vector() && args[1]->type()->dimension() == 3u && - args[2]->type()->is_vector() && args[2]->type()->dimension() == 3u, - "Invalid argument types '{}' and '{}' for float3x3 constructor.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description()); - return _make_float3x3(_create_expr(args[0]), _create_expr(args[1]), _create_expr(args[2])); - } - LUISA_ASSERT(args.size() == 9u, - "Invalid number of arguments '{}' for float3x3 constructor.", - args.size()); - LUISA_ASSERT(args[0]->type()->is_scalar() && args[1]->type()->is_scalar() && - args[2]->type()->is_scalar() && args[3]->type()->is_scalar() && - args[4]->type()->is_scalar() && args[5]->type()->is_scalar() && - args[6]->type()->is_scalar() && args[7]->type()->is_scalar() && - args[8]->type()->is_scalar(), - "Invalid argument types ('{}', '{}', '{}', '{}', '{}', " - "'{}', '{}', '{}', '{}') for float3x3 constructor.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), args[3]->type()->description(), - args[4]->type()->description(), args[5]->type()->description(), - args[6]->type()->description(), args[7]->type()->description(), - args[8]->type()->description()); - auto c0 = _make_float3(_builtin_static_cast(Type::of(), args[0]->type(), _create_expr(args[0])), - _builtin_static_cast(Type::of(), args[1]->type(), _create_expr(args[1])), - _builtin_static_cast(Type::of(), args[2]->type(), _create_expr(args[2]))); - auto c1 = _make_float3(_builtin_static_cast(Type::of(), args[3]->type(), _create_expr(args[3])), - _builtin_static_cast(Type::of(), args[4]->type(), _create_expr(args[4])), - _builtin_static_cast(Type::of(), args[5]->type(), _create_expr(args[5]))); - auto c2 = _make_float3(_builtin_static_cast(Type::of(), args[6]->type(), _create_expr(args[6])), - _builtin_static_cast(Type::of(), args[7]->type(), _create_expr(args[7])), - _builtin_static_cast(Type::of(), args[8]->type(), _create_expr(args[8]))); - return _make_float3x3(c0, c1, c2); -} - -::llvm::Value *LLVMCodegen::_builtin_make_matrix4_overloaded(luisa::span args) noexcept { - if (args.size() == 1u) { - return _builtin_static_cast(Type::of(), args[0]->type(), _create_expr(args[0])); - } - if (args.size() == 4u) { - LUISA_ASSERT(args[0]->type()->is_vector() && args[0]->type()->dimension() == 4u && - args[1]->type()->is_vector() && args[1]->type()->dimension() == 4u && - args[2]->type()->is_vector() && args[2]->type()->dimension() == 4u && - args[3]->type()->is_vector() && args[3]->type()->dimension() == 4u, - "Invalid argument types '{}' and '{}' for float4x4 constructor.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), args[3]->type()->description()); - return _make_float4x4(_create_expr(args[0]), _create_expr(args[1]), - _create_expr(args[2]), _create_expr(args[3])); - } - LUISA_ASSERT(args.size() == 16u, - "Invalid number of arguments '{}' for float4x4 constructor.", - args.size()); - LUISA_ASSERT(args[0]->type()->is_scalar() && args[1]->type()->is_scalar() && - args[2]->type()->is_scalar() && args[3]->type()->is_scalar() && - args[4]->type()->is_scalar() && args[5]->type()->is_scalar() && - args[6]->type()->is_scalar() && args[7]->type()->is_scalar() && - args[8]->type()->is_scalar() && args[9]->type()->is_scalar() && - args[10]->type()->is_scalar() && args[11]->type()->is_scalar() && - args[12]->type()->is_scalar() && args[13]->type()->is_scalar() && - args[14]->type()->is_scalar() && args[15]->type()->is_scalar(), - "Invalid argument types ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', " - "'{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}') for float4x4 constructor.", - args[0]->type()->description(), args[1]->type()->description(), - args[2]->type()->description(), args[3]->type()->description(), - args[4]->type()->description(), args[5]->type()->description(), - args[6]->type()->description(), args[7]->type()->description(), - args[8]->type()->description(), args[9]->type()->description(), - args[10]->type()->description(), args[11]->type()->description(), - args[12]->type()->description(), args[13]->type()->description(), - args[14]->type()->description(), args[15]->type()->description()); - auto c0 = _make_float4(_builtin_static_cast(Type::of(), args[0]->type(), _create_expr(args[0])), - _builtin_static_cast(Type::of(), args[1]->type(), _create_expr(args[1])), - _builtin_static_cast(Type::of(), args[2]->type(), _create_expr(args[2])), - _builtin_static_cast(Type::of(), args[3]->type(), _create_expr(args[3]))); - auto c1 = _make_float4(_builtin_static_cast(Type::of(), args[4]->type(), _create_expr(args[4])), - _builtin_static_cast(Type::of(), args[5]->type(), _create_expr(args[5])), - _builtin_static_cast(Type::of(), args[6]->type(), _create_expr(args[6])), - _builtin_static_cast(Type::of(), args[7]->type(), _create_expr(args[7]))); - auto c2 = _make_float4(_builtin_static_cast(Type::of(), args[8]->type(), _create_expr(args[8])), - _builtin_static_cast(Type::of(), args[9]->type(), _create_expr(args[9])), - _builtin_static_cast(Type::of(), args[10]->type(), _create_expr(args[10])), - _builtin_static_cast(Type::of(), args[11]->type(), _create_expr(args[11]))); - auto c3 = _make_float4(_builtin_static_cast(Type::of(), args[12]->type(), _create_expr(args[12])), - _builtin_static_cast(Type::of(), args[13]->type(), _create_expr(args[13])), - _builtin_static_cast(Type::of(), args[14]->type(), _create_expr(args[14])), - _builtin_static_cast(Type::of(), args[15]->type(), _create_expr(args[15]))); - return _make_float4x4(c0, c1, c2, c3); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_size2d(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level) noexcept { - auto b = _current_context()->builder.get(); - auto level = p_level == nullptr ? _literal(0u) : b->CreateLoad(b->getInt32Ty(), p_level, "bindless.texture.size.2d.level"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.size.2d.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(1)}, "bindless.texture.size.2d.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.size.2d.texture.ptr"); - auto texture = b->CreateLoad(_bindless_texture_type(), p_texture, "bindless.texture.size.2d.texture"); - auto texture_size = b->CreateExtractValue(texture, 1u, "bindless.texture.size.2d.texture.size.i16"); - texture_size = b->CreateShuffleVector(texture_size, {0, 1}, "bindless.texture.size.2d.texture.i16.v2"); - texture_size = b->CreateZExt(texture_size, _create_type(Type::of()), "bindless.texture.size.2d.texture.size.i32"); - auto shift = b->CreateVectorSplat(2u, level, "bindless.texture.size.2d.shift"); - texture_size = b->CreateLShr(texture_size, shift, "bindless.texture.size.2d.shifted"); - auto one = b->CreateVectorSplat(2u, _literal(1u), "bindless.texture.size.2d.one"); - texture_size = b->CreateMaxNum(texture_size, one, "bindless.texture.size.2d.max"); - return _create_stack_variable(texture_size, "bindless.texture.size.2d.size.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_size3d(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level) noexcept { - auto b = _current_context()->builder.get(); - auto level = p_level == nullptr ? _literal(0u) : b->CreateLoad(b->getInt32Ty(), p_level, "bindless.texture.size.3d.level"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.size.3d.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(2)}, "bindless.texture.size.3d.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.size.3d.texture.ptr"); - auto texture = b->CreateLoad(_bindless_texture_type(), p_texture, "bindless.texture.size.3d.texture"); - auto texture_size = b->CreateExtractValue(texture, 1u, "bindless.texture.size.3d.texture.size.i16"); - texture_size = b->CreateZExt(texture_size, _create_type(Type::of()), "bindless.texture.size.3d.texture.size.i32"); - auto shift = b->CreateVectorSplat(4u, level, "bindless.texture.size.3d.shift"); - texture_size = b->CreateLShr(texture_size, shift, "bindless.texture.size.3d.shifted"); - auto one = b->CreateVectorSplat(4u, _literal(1u), "bindless.texture.size.3d.one"); - texture_size = b->CreateMaxNum(texture_size, one, "bindless.texture.size.3d.max"); - return _create_stack_variable(texture_size, "bindless.texture.size.3d.size.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_buffer_read( - const Type *t, ::llvm::Value *p_items, ::llvm::Value *p_buffer_index, ::llvm::Value *p_elem_index) noexcept { - auto elem_type = _create_type(t); - auto b = _current_context()->builder.get(); - auto buffer_index = b->CreateLoad(b->getInt32Ty(), p_buffer_index, "bindless.buffer.read.buffer.index"); - auto buffer_ptr = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {buffer_index, _literal(0u)}, "bindless.buffer.read.buffer.ptr"); - auto typeless_buffer = b->CreateLoad(b->getInt8PtrTy(), buffer_ptr, "bindless.buffer.read.buffer.typeless"); - auto buffer = b->CreateBitOrPointerCast(typeless_buffer, elem_type->getPointerTo(), "bindless.buffer.read.buffer"); - auto elem_index = b->CreateLoad(b->getInt32Ty(), p_elem_index, "bindless.buffer.read.elem.index"); - auto elem_ptr = b->CreateInBoundsGEP(elem_type, buffer, elem_index, "bindless.buffer.read.elem.ptr"); - auto elem = b->CreateLoad(elem_type, elem_ptr, "bindless.buffer.read.elem"); - return _create_stack_variable(elem, "bindless.buffer.read.elem.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_read2d( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level, ::llvm::Value *p_uv) noexcept { - auto b = _current_context()->builder.get(); - auto level = p_level == nullptr ? _literal(0u) : b->CreateLoad(b->getInt32Ty(), p_level, "bindless.texture.read.2d.level"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.read.2d.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(1)}, "bindless.texture.read.2d.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.read.2d.texture.ptr"); - auto coord = b->CreateLoad(_create_type(Type::of()), p_uv, "bindless.texture.read.2d.uv"); - auto coord_x = b->CreateExtractElement(coord, _literal(0u), "bindless.texture.read.2d.uv.x"); - auto coord_y = b->CreateExtractElement(coord, _literal(1u), "bindless.texture.read.2d.uv.y"); - auto func = _module->getFunction("bindless.texture.2d.read"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), b->getInt32Ty(), b->getInt32Ty()}, false), - ::llvm::Function::ExternalLinkage, "bindless.texture.2d.read", _module); - } - auto ret = b->CreateCall(func, {p_texture, level, coord_x, coord_y}, "bindless.texture.read.2d.ret"); - return _create_stack_variable(ret, "bindless.texture.read.2d.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_read3d( - ::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_level, ::llvm::Value *p_uvw) noexcept { - auto b = _current_context()->builder.get(); - auto level = p_level == nullptr ? _literal(0u) : b->CreateLoad(b->getInt32Ty(), p_level, "bindless.texture.read.3d.level"); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.read.3d.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(2)}, "bindless.texture.read.3d.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.read.3d.texture.ptr"); - auto coord = b->CreateLoad(_create_type(Type::of()), p_uvw, "bindless.texture.read.3d.uvw"); - auto coord_x = b->CreateExtractElement(coord, _literal(0u), "bindless.texture.read.3d.uvw.x"); - auto coord_y = b->CreateExtractElement(coord, _literal(1u), "bindless.texture.read.3d.uvw.y"); - auto coord_z = b->CreateExtractElement(coord, _literal(2u), "bindless.texture.read.3d.uvw.z"); - auto func = _module->getFunction("bindless.texture.3d.read"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), b->getInt32Ty(), b->getInt32Ty(), b->getInt32Ty()}, false), - ::llvm::Function::ExternalLinkage, "bindless.texture.3d.read", _module); - } - auto ret = b->CreateCall(func, {p_texture, level, coord_x, coord_y, coord_z}, "bindless.texture.read.3d.ret"); - return _create_stack_variable(ret, "bindless.texture.read.3d.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_sample2d(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uv) noexcept { - auto b = _current_context()->builder.get(); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.sample.2d.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(1)}, "bindless.texture.sample.2d.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.sample.2d.texture.ptr"); - auto p_sampler = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(3)}, "bindless.texture.sample.2d.sampler.ptr"); - auto sampler = b->CreateLoad(b->getInt32Ty(), p_sampler, "bindless.texture.sample.2d.sampler"); - auto uv = b->CreateLoad(_create_type(Type::of()), p_uv, "bindless.texture.sample.2d.uv"); - auto uv_x = b->CreateExtractElement(uv, _literal(0u), "bindless.texture.sample.2d.uv.x"); - auto uv_y = b->CreateExtractElement(uv, _literal(1u), "bindless.texture.sample.2d.uv.y"); - auto func = _module->getFunction("bindless.texture.2d.sample"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), - b->getFloatTy(), b->getFloatTy()}, - false), - ::llvm::Function::ExternalLinkage, "bindless.texture.2d.sample", _module); - } - auto ret = b->CreateCall(func, {p_texture, sampler, uv_x, uv_y}, "bindless.texture.sample.2d.ret"); - return _create_stack_variable(ret, "bindless.texture.sample.2d.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_sample3d(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uvw) noexcept { - auto b = _current_context()->builder.get(); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.sample.3d.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(2)}, "bindless.texture.sample.3d.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.sample.3d.texture.ptr"); - auto p_sampler = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(4)}, "bindless.texture.sample.3d.sampler.ptr"); - auto sampler = b->CreateLoad(b->getInt32Ty(), p_sampler, "bindless.texture.sample.3d.sampler"); - auto uvw = b->CreateLoad(_create_type(Type::of()), p_uvw, "bindless.texture.sample.3d.uvw"); - auto uvw_x = b->CreateExtractElement(uvw, _literal(0u), "bindless.texture.sample.3d.uvw.x"); - auto uvw_y = b->CreateExtractElement(uvw, _literal(1u), "bindless.texture.sample.3d.uvw.y"); - auto uvw_z = b->CreateExtractElement(uvw, _literal(2u), "bindless.texture.sample.3d.uvw.z"); - auto func = _module->getFunction("bindless.texture.3d.sample"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), - b->getFloatTy(), b->getFloatTy(), b->getFloatTy()}, - false), - ::llvm::Function::ExternalLinkage, "bindless.texture.3d.sample", _module); - } - auto ret = b->CreateCall(func, {p_texture, sampler, uvw_x, uvw_y, uvw_z}, "bindless.texture.sample.3d.ret"); - return _create_stack_variable(ret, "bindless.texture.sample.3d.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_sample2d_level(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uv, ::llvm::Value *p_lod) noexcept { - auto b = _current_context()->builder.get(); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.sample.2d.level.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(1)}, "bindless.texture.sample.2d.level.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.sample.2d.level.texture.ptr"); - auto p_sampler = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(3)}, "bindless.texture.sample.2d.level.sampler.ptr"); - auto sampler = b->CreateLoad(b->getInt32Ty(), p_sampler, "bindless.texture.sample.2d.level.sampler"); - auto uv = b->CreateLoad(_create_type(Type::of()), p_uv, "bindless.texture.sample.2d.level.uv"); - auto uv_x = b->CreateExtractElement(uv, _literal(0u), "bindless.texture.sample.2d.level.uv.x"); - auto uv_y = b->CreateExtractElement(uv, _literal(1u), "bindless.texture.sample.2d.level.uv.y"); - auto lod = b->CreateLoad(b->getFloatTy(), p_lod, "bindless.texture.sample.2d.level.lod"); - auto func = _module->getFunction("bindless.texture.2d.sample.level"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), - b->getFloatTy(), b->getFloatTy(), b->getFloatTy()}, - false), - ::llvm::Function::ExternalLinkage, "bindless.texture.2d.sample.level", _module); - } - auto ret = b->CreateCall(func, {p_texture, sampler, uv_x, uv_y, lod}, "bindless.texture.sample.2d.level.ret"); - return _create_stack_variable(ret, "bindless.texture.sample.2d.level.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_sample3d_level(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uvw, ::llvm::Value *p_lod) noexcept { - auto b = _current_context()->builder.get(); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.sample.3d.level.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(2)}, "bindless.texture.sample.3d.level.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.sample.3d.level.texture.ptr"); - auto p_sampler = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(4)}, "bindless.texture.sample.3d.level.sampler.ptr"); - auto sampler = b->CreateLoad(b->getInt32Ty(), p_sampler, "bindless.texture.sample.3d.level.sampler"); - auto uvw = b->CreateLoad(_create_type(Type::of()), p_uvw, "bindless.texture.sample.3d.level.uvw"); - auto uvw_x = b->CreateExtractElement(uvw, _literal(0u), "bindless.texture.sample.3d.level.uvw.x"); - auto uvw_y = b->CreateExtractElement(uvw, _literal(1u), "bindless.texture.sample.3d.level.uvw.y"); - auto uvw_z = b->CreateExtractElement(uvw, _literal(2u), "bindless.texture.sample.3d.level.uvw.z"); - auto lod = b->CreateLoad(b->getFloatTy(), p_lod, "bindless.texture.sample.3d.level.lod"); - auto func = _module->getFunction("bindless.texture.3d.sample.level"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), - b->getFloatTy(), b->getFloatTy(), b->getFloatTy(), b->getFloatTy()}, - false), - ::llvm::Function::ExternalLinkage, "bindless.texture.3d.sample.level", _module); - } - auto ret = b->CreateCall(func, {p_texture, sampler, uvw_x, uvw_y, uvw_z, lod}, "bindless.texture.sample.3d.level.ret"); - return _create_stack_variable(ret, "bindless.texture.sample.3d.level.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_sample2d_grad(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uv, ::llvm::Value *p_dpdx, ::llvm::Value *p_dpdy) noexcept { - auto b = _current_context()->builder.get(); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.sample.2d.grad.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(1)}, "bindless.texture.sample.2d.grad.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.sample.2d.grad.texture.ptr"); - auto p_sampler = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(3)}, "bindless.texture.sample.2d.grad.sampler.ptr"); - auto sampler = b->CreateLoad(b->getInt32Ty(), p_sampler, "bindless.texture.sample.2d.grad.sampler"); - auto uv = b->CreateLoad(_create_type(Type::of()), p_uv, "bindless.texture.sample.2d.grad.uv"); - auto uv_x = b->CreateExtractElement(uv, _literal(0u), "bindless.texture.sample.2d.grad.uv.x"); - auto uv_y = b->CreateExtractElement(uv, _literal(1u), "bindless.texture.sample.2d.grad.uv.y"); - p_dpdx = b->CreateBitOrPointerCast(p_dpdx, b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.2d.grad.dpdx.addr"); - p_dpdy = b->CreateBitOrPointerCast(p_dpdy, b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.2d.grad.dpdy.addr"); - auto dpdx = b->CreateLoad(b->getInt64Ty(), p_dpdx, "bindless.texture.sample.2d.grad.dpdx"); - auto dpdy = b->CreateLoad(b->getInt64Ty(), p_dpdy, "bindless.texture.sample.2d.grad.dpdy"); - auto func = _module->getFunction("bindless.texture.2d.sample.grad"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt32Ty(), - b->getFloatTy(), b->getFloatTy(), b->getInt64Ty(), b->getInt64Ty()}, - false), - ::llvm::Function::ExternalLinkage, "bindless.texture.2d.sample.grad", _module); - } - auto ret = b->CreateCall(func, {p_texture, sampler, uv_x, uv_y, dpdx, dpdy}, "bindless.texture.sample.2d.grad.ret"); - return _create_stack_variable(ret, "bindless.texture.sample.2d.grad.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_bindless_texture_sample3d_grad(::llvm::Value *p_items, ::llvm::Value *p_index, ::llvm::Value *p_uvw, ::llvm::Value *p_dpdx, ::llvm::Value *p_dpdy) noexcept { - auto b = _current_context()->builder.get(); - auto index = b->CreateLoad(b->getInt32Ty(), p_index, "bindless.texture.sample.3d.grad.index"); - auto pp_texture = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(1)}, "bindless.texture.sample.3d.grad.texture.ptr.ptr"); - auto p_texture = b->CreateLoad(_bindless_texture_type()->getPointerTo(), pp_texture, "bindless.texture.sample.3d.grad.texture.ptr"); - auto p_sampler = b->CreateInBoundsGEP(_bindless_item_type(), p_items, {index, _literal(3)}, "bindless.texture.sample.3d.grad.sampler.ptr"); - p_uvw = _builtin_bitwise_cast(Type::of(), Type::of(), p_uvw); - p_dpdx = _builtin_bitwise_cast(Type::of(), Type::of(), p_dpdx); - p_dpdy = _builtin_bitwise_cast(Type::of(), Type::of(), p_dpdy); - auto uvw = b->CreateLoad(_create_type(Type::of()), p_uvw, "bindless.texture.sample.3d.grad.uvw"); - auto dpdx = b->CreateLoad(_create_type(Type::of()), p_dpdx, "bindless.texture.sample.3d.grad.dpdx"); - auto dpdy = b->CreateLoad(_create_type(Type::of()), p_dpdy, "bindless.texture.sample.3d.grad.dpdy"); - auto p_u = _create_stack_variable(b->CreateExtractElement(uvw, _literal(0u), "bindless.texture.sample.3d.grad.uvw.x"), "bindless.texture.sample.3d.grad.uvw.x.addr"); - auto p_v = _create_stack_variable(b->CreateExtractElement(uvw, _literal(1u), "bindless.texture.sample.3d.grad.uvw.y"), "bindless.texture.sample.3d.grad.uvw.y.addr"); - auto p_w = _create_stack_variable(b->CreateExtractElement(uvw, _literal(2u), "bindless.texture.sample.3d.grad.uvw.z"), "bindless.texture.sample.3d.grad.uvw.z.addr"); - auto p_dudx = _create_stack_variable(b->CreateExtractElement(dpdx, _literal(0u), "bindless.texture.sample.3d.grad.dpdx.x"), "bindless.texture.sample.3d.grad.dpdx.x.addr"); - auto p_dvdx = _create_stack_variable(b->CreateExtractElement(dpdy, _literal(1u), "bindless.texture.sample.3d.grad.dpdy.y"), "bindless.texture.sample.3d.grad.dpdy.y.addr"); - auto p_dwdx = _create_stack_variable(b->CreateExtractElement(dpdy, _literal(2u), "bindless.texture.sample.3d.grad.dpdy.z"), "bindless.texture.sample.3d.grad.dpdy.z.addr"); - auto p_dudy = _create_stack_variable(b->CreateExtractElement(dpdx, _literal(1u), "bindless.texture.sample.3d.grad.dpdx.y"), "bindless.texture.sample.3d.grad.dpdx.y.addr"); - auto p_dvdy = _create_stack_variable(b->CreateExtractElement(dpdy, _literal(0u), "bindless.texture.sample.3d.grad.dpdy.x"), "bindless.texture.sample.3d.grad.dpdy.x.addr"); - auto p_dwdy = _create_stack_variable(b->CreateExtractElement(dpdy, _literal(2u), "bindless.texture.sample.3d.grad.dpdy.z"), "bindless.texture.sample.3d.grad.dpdy.z.addr"); - auto p_sampler_and_w = b->CreateBitOrPointerCast(_make_int2(p_sampler, p_w), b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.3d.grad.sampler.w.addr"); - auto p_uv = b->CreateBitOrPointerCast(_make_int2(p_u, p_v), b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.3d.grad.uv.addr"); - auto p_dudxy = b->CreateBitOrPointerCast(_make_int2(p_dudx, p_dudy), b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.3d.grad.dudxy.addr"); - auto p_dvdxy = b->CreateBitOrPointerCast(_make_int2(p_dvdx, p_dvdy), b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.3d.grad.dvdxy.addr"); - auto p_dwdxy = b->CreateBitOrPointerCast(_make_int2(p_dwdx, p_dwdy), b->getInt64Ty()->getPointerTo(), "bindless.texture.sample.3d.grad.dwdxy.addr"); - auto sampler_and_w = b->CreateLoad(b->getInt64Ty(), p_sampler_and_w, "bindless.texture.sample.3d.grad.sampler.and.w"); - auto uv = b->CreateLoad(b->getInt64Ty(), p_uv, "bindless.texture.sample.3d.grad.uv"); - auto dudxy = b->CreateLoad(b->getInt64Ty(), p_dudxy, "bindless.texture.sample.3d.grad.dudxy"); - auto dvdxy = b->CreateLoad(b->getInt64Ty(), p_dvdxy, "bindless.texture.sample.3d.grad.dvdxy"); - auto dwdxy = b->CreateLoad(b->getInt64Ty(), p_dwdxy, "bindless.texture.sample.3d.grad.dwdxy"); - auto func = _module->getFunction("bindless.texture.sample.3d.grad"); - if (func == nullptr) { - func = ::llvm::Function::Create( - ::llvm::FunctionType::get( - ::llvm::FixedVectorType::get(b->getFloatTy(), 4u), - {_bindless_texture_type()->getPointerTo(), b->getInt64Ty(), - b->getFloatTy(), b->getFloatTy(), b->getInt64Ty(), b->getInt64Ty()}, - false), - ::llvm::Function::ExternalLinkage, "bindless.texture.3d.sample.grad", _module); - } - auto ret = b->CreateCall(func, {p_texture, sampler_and_w, uv, dudxy, dvdxy, dwdxy}, "bindless.texture.sample.3d.grad.ret"); - return _create_stack_variable(ret, "bindless.texture.sample.3d.grad.addr"); -} - -::llvm::Value *LLVMCodegen::_builtin_asinh(const Type *t, ::llvm::Value *v) noexcept { - // log(x + sqrt(x * x + 1.0)) - auto one = _create_stack_variable(_literal(1.0f), "asinh.one"); - if (t->is_vector()) { one = _builtin_static_cast(t, t->element(), one); } - return _builtin_log(t, _builtin_add(t, v, _builtin_sqrt(t, _builtin_add(t, _builtin_mul(t, v, v), one)))); -} - -::llvm::Value *LLVMCodegen::_builtin_acosh(const Type *t, ::llvm::Value *v) noexcept { - // log(x + sqrt(x * x - 1.0)) - auto one = _create_stack_variable(_literal(1.0f), "cosh.one"); - if (t->is_vector()) { one = _builtin_static_cast(t, t->element(), one); } - return _builtin_log(t, _builtin_add(t, v, _builtin_sqrt(t, _builtin_sub(t, _builtin_mul(t, v, v), one)))); -} - -::llvm::Value *LLVMCodegen::_builtin_atanh(const Type *t, ::llvm::Value *v) noexcept { - // 0.5 * log((1.0 + x) / (1.0 - x)) - auto one = _create_stack_variable(_literal(1.0f), "tanh.one"); - auto half = _create_stack_variable(_literal(0.5f), "tanh.half"); - if (t->is_vector()) { - one = _builtin_static_cast(t, t->element(), one); - half = _builtin_static_cast(t, t->element(), half); - } - auto one_plus_x = _builtin_add(t, one, v); - auto one_minus_x = _builtin_sub(t, one, v); - auto one_plus_x_over_one_minus_x = _builtin_div(t, one_plus_x, one_minus_x); - auto log_of_one_plus_x_over_one_minus_x = _builtin_log(t, one_plus_x_over_one_minus_x); - return _builtin_mul(t, half, log_of_one_plus_x_over_one_minus_x); -} - -::llvm::Value *LLVMCodegen::_builtin_cosh(const Type *t, ::llvm::Value *v) noexcept { - // y = exp(x) - // 0.5 * (y + 1 / y) - auto half = _create_stack_variable(_literal(0.5f), "cosh.half"); - auto one = _create_stack_variable(_literal(1.0f), "cosh.one"); - if (t->is_vector()) { - half = _builtin_static_cast(t, t->element(), half); - one = _builtin_static_cast(t, t->element(), one); - } - auto exp_x = _builtin_exp(t, v); - auto exp_minus_x = _builtin_div(t, one, exp_x); - auto exp_x_plus_exp_minus_x = _builtin_add(t, exp_x, exp_minus_x); - return _builtin_mul(t, half, exp_x_plus_exp_minus_x); -} - -::llvm::Value *LLVMCodegen::_builtin_sinh(const Type *t, ::llvm::Value *v) noexcept { - // y = exp(x) - // 0.5 * (y – 1 / y) - auto half = _create_stack_variable(_literal(0.5f), "sinh.half"); - auto one = _create_stack_variable(_literal(1.0f), "sinh.one"); - if (t->is_vector()) { - half = _builtin_static_cast(t, t->element(), half); - one = _builtin_static_cast(t, t->element(), one); - } - auto exp_x = _builtin_exp(t, v); - auto exp_minus_x = _builtin_div(t, one, exp_x); - auto exp_x_minus_exp_minus_x = _builtin_sub(t, exp_x, exp_minus_x); - return _builtin_mul(t, half, exp_x_minus_exp_minus_x); -} - -::llvm::Value *LLVMCodegen::_builtin_tanh(const Type *t, ::llvm::Value *v) noexcept { - // y = exp(2.0 * x) - // (y - 1.0) / (y + 1.0) - auto one = _create_stack_variable(_literal(1.0f), "tanh.one"); - auto two = _create_stack_variable(_literal(2.0f), "tanh.two"); - if (t->is_vector()) { - one = _builtin_static_cast(t, t->element(), one); - two = _builtin_static_cast(t, t->element(), two); - } - auto y = _builtin_exp(t, _builtin_mul(t, two, v)); - auto y_minus_one = _builtin_sub(t, y, one); - auto y_plus_one = _builtin_add(t, y, one); - return _builtin_div(t, y_minus_one, y_plus_one); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen_expr.cpp b/src/backends/fallback/llvm_codegen_expr.cpp deleted file mode 100644 index 5adf97334..000000000 --- a/src/backends/fallback/llvm_codegen_expr.cpp +++ /dev/null @@ -1,343 +0,0 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#include - -namespace luisa::compute::fallback { - -#pragma clang diagnostic push -#pragma ide diagnostic ignored "cppcoreguidelines-pro-type-static-cast-downcast" -::llvm::Value *LLVMCodegen::_create_expr(const Expression *expr) noexcept { - switch (expr->tag()) { - case Expression::Tag::UNARY: - return _create_unary_expr(static_cast(expr)); - case Expression::Tag::BINARY: - return _create_binary_expr(static_cast(expr)); - case Expression::Tag::MEMBER: - return _create_member_expr(static_cast(expr)); - case Expression::Tag::ACCESS: - return _create_access_expr(static_cast(expr)); - case Expression::Tag::LITERAL: - return _create_literal_expr(static_cast(expr)); - case Expression::Tag::REF: - return _create_ref_expr(static_cast(expr)); - case Expression::Tag::CONSTANT: - return _create_constant_expr(static_cast(expr)); - case Expression::Tag::CALL: - return _create_call_expr(static_cast(expr)); - case Expression::Tag::CAST: - return _create_cast_expr(static_cast(expr)); - } - LUISA_ERROR_WITH_LOCATION("Invalid expression tag: {}.", to_underlying(expr->tag())); -} -#pragma clang diagnostic pop - -::llvm::Value *LLVMCodegen::_create_unary_expr(const UnaryExpr *expr) noexcept { - auto x = _create_expr(expr->operand()); - switch (expr->op()) { - case UnaryOp::PLUS: return _builtin_unary_plus(expr->operand()->type(), x); - case UnaryOp::MINUS: return _builtin_unary_minus(expr->operand()->type(), x); - case UnaryOp::NOT: return _builtin_unary_not(expr->operand()->type(), x); - case UnaryOp::BIT_NOT: return _builtin_unary_bit_not(expr->operand()->type(), x); - } - LUISA_ERROR_WITH_LOCATION("Invalid unary operator."); -} - -::llvm::Value *LLVMCodegen::_short_circuit_and(const Expression *lhs, const Expression *rhs) noexcept { - LUISA_ASSERT(lhs->type()->tag() == Type::Tag::BOOL && - rhs->type()->tag() == Type::Tag::BOOL, - "Expected (bool && bool) but got ({} && {}).", - lhs->type()->description(), rhs->type()->description()); - auto ctx = _current_context(); - auto value = _create_expr(lhs); - auto lhs_is_true = ctx->builder->CreateICmpNE( - ctx->builder->CreateLoad(_create_type(lhs->type()), value, "load"), - ctx->builder->getInt8(0), "cmp"); - auto next_block = ::llvm::BasicBlock::Create(_context, "and.next", ctx->ir); - auto out_block = ::llvm::BasicBlock::Create(_context, "and.out", ctx->ir); - next_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->CreateCondBr(lhs_is_true, next_block, out_block); - ctx->builder->SetInsertPoint(next_block); - _create_assignment(Type::of(), rhs->type(), value, _create_expr(rhs)); - out_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->CreateBr(out_block); - ctx->builder->SetInsertPoint(out_block); - return value; -} - -::llvm::Value *LLVMCodegen::_short_circuit_or(const Expression *lhs, const Expression *rhs) noexcept { - LUISA_ASSERT(lhs->type()->tag() == Type::Tag::BOOL && - rhs->type()->tag() == Type::Tag::BOOL, - "Expected (bool || bool) but got ({} || {}).", - lhs->type()->description(), rhs->type()->description()); - auto ctx = _current_context(); - auto value = _create_expr(lhs); - auto lhs_is_true = ctx->builder->CreateICmpNE( - ctx->builder->CreateLoad(_create_type(lhs->type()), value, "load"), - ctx->builder->getInt8(0), "cmp"); - auto next_block = ::llvm::BasicBlock::Create(_context, "or.next", ctx->ir); - auto out_block = ::llvm::BasicBlock::Create(_context, "or.out", ctx->ir); - next_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->CreateCondBr(lhs_is_true, out_block, next_block); - ctx->builder->SetInsertPoint(next_block); - _create_assignment(Type::of(), rhs->type(), value, _create_expr(rhs)); - out_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->CreateBr(out_block); - ctx->builder->SetInsertPoint(out_block); - return value; -} - -::llvm::Value *LLVMCodegen::_create_binary_expr(const BinaryExpr *expr) noexcept { - auto ctx = _current_context(); - auto lhs_type = expr->lhs()->type(); - auto rhs_type = expr->rhs()->type(); - // logical and/or should be short-circuit. - if (lhs_type->is_scalar() && rhs_type->is_scalar()) { - if (expr->op() == BinaryOp::AND) { return _short_circuit_and(expr->lhs(), expr->rhs()); } - if (expr->op() == BinaryOp::OR) { return _short_circuit_or(expr->lhs(), expr->rhs()); } - } - // matrices have to be handled separately - auto p_lhs = _create_expr(expr->lhs()); - auto p_rhs = _create_expr(expr->rhs()); - if (lhs_type->is_matrix() && rhs_type->is_matrix()) { - switch (expr->op()) { - case BinaryOp::ADD: return _builtin_add_matrix_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::SUB: return _builtin_sub_matrix_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::MUL: return _builtin_mul_matrix_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - default: LUISA_ERROR_WITH_LOCATION("Invalid binary matrix-matrix operator."); - } - } - if (lhs_type->is_matrix() && rhs_type->is_scalar()) { - p_rhs = _scalar_to_float(rhs_type, p_rhs); - switch (expr->op()) { - case BinaryOp::ADD: return _builtin_add_matrix_scalar(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::SUB: return _builtin_sub_matrix_scalar(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::MUL: return _builtin_mul_matrix_scalar(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::DIV: return _builtin_div_matrix_scalar(lhs_type, rhs_type, p_lhs, p_rhs); - default: LUISA_ERROR_WITH_LOCATION("Invalid binary matrix-scalar operator."); - } - } - if (lhs_type->is_scalar() && rhs_type->is_matrix()) { - p_lhs = _scalar_to_float(lhs_type, p_lhs); - switch (expr->op()) { - case BinaryOp::ADD: return _builtin_add_scalar_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::SUB: return _builtin_sub_scalar_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::MUL: return _builtin_mul_scalar_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - case BinaryOp::DIV: return _builtin_div_scalar_matrix(lhs_type, rhs_type, p_lhs, p_rhs); - default: LUISA_ERROR_WITH_LOCATION("Invalid binary scalar-matrix operator."); - } - } - if (lhs_type->is_matrix() && rhs_type->is_vector()) { - LUISA_ASSERT(expr->op() == BinaryOp::MUL, "Invalid binary matrix-vector operator."); - LUISA_ASSERT(lhs_type->dimension() == rhs_type->dimension(), - "Dimensions mismatch in matrix-vector multiplication: {} vs {}.", - lhs_type->dimension(), rhs_type->dimension()); - p_rhs = _vector_to_float_vector(rhs_type, p_rhs); - return _builtin_mul_matrix_vector(lhs_type, rhs_type, p_lhs, p_rhs); - } - // scalar/scalar or vector/vector or vector/scalar - LUISA_ASSERT((lhs_type->is_scalar() || lhs_type->is_vector()) && - (rhs_type->is_scalar() || rhs_type->is_vector()), - "Expected (scalar op vector) or (scalar op vector) but got ({} op {}).", - lhs_type->description(), rhs_type->description()); - auto lhs_elem_type = lhs_type->is_scalar() ? lhs_type : lhs_type->element(); - auto rhs_elem_type = rhs_type->is_scalar() ? rhs_type : rhs_type->element(); - auto promoted_elem_type = [&] { - if (expr->op() == BinaryOp::AND || - expr->op() == BinaryOp::OR) { - return Type::of(); - } - switch (lhs_elem_type->tag()) { - case Type::Tag::BOOL: return rhs_elem_type; - case Type::Tag::FLOAT: return lhs_elem_type; - case Type::Tag::INT: - return rhs_elem_type->tag() == Type::Tag::UINT || - rhs_elem_type->tag() == Type::Tag::FLOAT ? - rhs_elem_type : - lhs_elem_type; - case Type::Tag::UINT: - return rhs_elem_type->tag() == Type::Tag::FLOAT ? - rhs_elem_type : - lhs_elem_type; - default: break; - } - LUISA_ERROR_WITH_LOCATION( - "Invalid types '{}' and '{}' for binary operator.", - lhs_elem_type->description(), rhs_elem_type->description()); - }(); - auto promoted_type = expr->type()->is_vector() ? - Type::from(luisa::format( - "vector<{},{}>", - promoted_elem_type->description(), - expr->type()->dimension())) : - promoted_elem_type; - auto lhs_v = _builtin_static_cast(promoted_type, lhs_type, p_lhs); - auto rhs_v = _builtin_static_cast(promoted_type, rhs_type, p_rhs); - switch (expr->op()) { - case BinaryOp::ADD: return _builtin_add(promoted_type, lhs_v, rhs_v); - case BinaryOp::SUB: return _builtin_sub(promoted_type, lhs_v, rhs_v); - case BinaryOp::MUL: return _builtin_mul(promoted_type, lhs_v, rhs_v); - case BinaryOp::DIV: return _builtin_div(promoted_type, lhs_v, rhs_v); - case BinaryOp::MOD: return _builtin_mod(promoted_type, lhs_v, rhs_v); - case BinaryOp::BIT_AND: return _builtin_and(promoted_type, lhs_v, rhs_v); - case BinaryOp::BIT_OR: return _builtin_or(promoted_type, lhs_v, rhs_v); - case BinaryOp::BIT_XOR: return _builtin_xor(promoted_type, lhs_v, rhs_v); - case BinaryOp::SHL: return _builtin_shl(promoted_type, lhs_v, rhs_v); - case BinaryOp::SHR: return _builtin_shr(promoted_type, lhs_v, rhs_v); - case BinaryOp::AND: return _builtin_and(promoted_type, lhs_v, rhs_v); - case BinaryOp::OR: return _builtin_or(promoted_type, lhs_v, rhs_v); - case BinaryOp::LESS: return _builtin_lt(promoted_type, lhs_v, rhs_v); - case BinaryOp::GREATER: return _builtin_gt(promoted_type, lhs_v, rhs_v); - case BinaryOp::LESS_EQUAL: return _builtin_le(promoted_type, lhs_v, rhs_v); - case BinaryOp::GREATER_EQUAL: return _builtin_ge(promoted_type, lhs_v, rhs_v); - case BinaryOp::EQUAL: return _builtin_eq(promoted_type, lhs_v, rhs_v); - case BinaryOp::NOT_EQUAL: return _builtin_ne(promoted_type, lhs_v, rhs_v); - } - LUISA_ERROR_WITH_LOCATION("Invalid binary operator."); -} - -::llvm::Value *LLVMCodegen::_create_member_expr(const MemberExpr *expr) noexcept { - auto ctx = _current_context(); - auto self = _create_expr(expr->self()); - auto self_type = expr->self()->type(); - if (self_type->is_structure()) { - auto member_index = _struct_types.at(self_type->hash()) - .member_indices.at(expr->member_index()); - return ctx->builder->CreateStructGEP( - _create_type(self_type), self, member_index, - "struct.member.addr"); - } - LUISA_ASSERT(expr->self()->type()->is_vector() && expr->is_swizzle(), - "Invalid member expression. Vector swizzling expected."); - switch (expr->swizzle_size()) { - case 1u: { - auto idx = static_cast(expr->swizzle_index(0u)); - auto elem_type = _create_type(expr->type()); - auto ptr_type = ::llvm::PointerType::get(elem_type, 0); - auto ptr = ctx->builder->CreateBitOrPointerCast(self, ptr_type, "vector.member.ptr"); - return ctx->builder->CreateConstInBoundsGEP1_32(elem_type, ptr, idx, "vector.member.addr"); - } - case 2u: return _create_stack_variable( - ctx->builder->CreateShuffleVector( - ctx->builder->CreateLoad( - _create_type(self_type), self, "vector.member.load"), - {static_cast(expr->swizzle_index(0u)), - static_cast(expr->swizzle_index(1u))}, - "vector.swizzle"), - "vector.swizzle.addr"); - case 3u: return _create_stack_variable( - ctx->builder->CreateShuffleVector( - ctx->builder->CreateLoad( - _create_type(self_type), self, "vector.member.load"), - {static_cast(expr->swizzle_index(0u)), - static_cast(expr->swizzle_index(1u)), - static_cast(expr->swizzle_index(2u))}, - "vector.swizzle"), - "vector.swizzle.addr"); - case 4u: return _create_stack_variable( - ctx->builder->CreateShuffleVector( - ctx->builder->CreateLoad( - _create_type(self_type), self, "vector.member.load"), - {static_cast(expr->swizzle_index(0u)), - static_cast(expr->swizzle_index(1u)), - static_cast(expr->swizzle_index(2u)), - static_cast(expr->swizzle_index(3u))}, - "vector.swizzle"), - "vector.swizzle.addr"); - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid swizzle size: {}.", expr->swizzle_size()); -} - -::llvm::Value *LLVMCodegen::_create_access_expr(const AccessExpr *expr) noexcept { - auto ctx = _current_context(); - auto range = _create_expr(expr->range()); - auto index = ctx->builder->CreateLoad( - _create_type(Type::of()), - _builtin_static_cast( - Type::of(), expr->index()->type(), - _create_expr(expr->index())), - "access.index"); - auto elem_type = _create_type(expr->type()); - auto ptr_type = elem_type->getPointerTo(); - auto range_type = expr->range()->type(); - if (range_type->is_buffer()) { - return ctx->builder->CreateInBoundsGEP(elem_type, range, index, "access.addr"); - } - if (range_type->is_vector()) { - auto ptr = ctx->builder->CreateBitOrPointerCast(range, ptr_type, "vector.ptr"); - return ctx->builder->CreateInBoundsGEP(elem_type, ptr, index, "access.addr"); - } - LUISA_ASSERT(range_type->is_array() || range_type->is_matrix(), - "Invalid range type '{}'.", range_type->description()); - return ctx->builder->CreateInBoundsGEP( - _create_type(range_type), range, {_literal(0u), index}, "access.addr"); -} - -::llvm::Value *LLVMCodegen::_create_literal_expr(const LiteralExpr *expr) noexcept { - return luisa::visit( - [this](auto x) noexcept { - return _create_stack_variable( - _literal(x), "const.addr"); - }, - expr->value()); -} - -::llvm::Value *LLVMCodegen::_create_ref_expr(const RefExpr *expr) noexcept { - return _current_context()->variables.at(expr->variable().uid()); -} - -::llvm::Value *LLVMCodegen::_create_constant_expr(const ConstantExpr *expr) noexcept { - return _create_constant(expr->data()); -} - -::llvm::Value *LLVMCodegen::_create_call_expr(const CallExpr *expr) noexcept { - if (expr->is_builtin()) { - return _create_builtin_call_expr( - expr->type(), expr->op(), expr->arguments()); - } - // custom - auto f = _create_function(expr->custom()); - auto ctx = _current_context(); - luisa::vector<::llvm::Value *> args; - for (auto i = 0u; i < expr->arguments().size(); i++) { - auto arg = expr->arguments()[i]; - auto call_arg = _create_expr(arg); - if (auto expected_arg = expr->custom().arguments()[i]; - expected_arg.type()->is_basic() || - expected_arg.type()->is_array() || - expected_arg.type()->is_structure()) { - call_arg = _builtin_static_cast(expected_arg.type(), arg->type(), _create_expr(arg)); - if (auto usage = expr->custom().variable_usage(expected_arg.uid()); - expected_arg.tag() != Variable::Tag::REFERENCE || - (usage == Usage::NONE || usage == Usage::READ)) { - call_arg = ctx->builder->CreateLoad( - _create_type(expected_arg.type()), call_arg, "load"); - } - } - args.emplace_back(call_arg); - } - ::llvm::ArrayRef<::llvm::Value *> args_ref{args.data(), args.size()}; - auto call = ctx->builder->CreateCall(f->getFunctionType(), f, args_ref); - if (expr->type() == nullptr) { return call; } - call->setName("result"); - return _create_stack_variable(call, "result.addr"); -} - -::llvm::Value *LLVMCodegen::_create_cast_expr(const CastExpr *expr) noexcept { - if (expr->op() == CastOp::STATIC) { - return _builtin_static_cast( - expr->type(), expr->expression()->type(), - _create_expr(expr->expression())); - } - return _builtin_bitwise_cast( - expr->type(), expr->expression()->type(), - _create_expr(expr->expression())); -} - -::llvm::Value *LLVMCodegen::_create_custom_op_expr(const CpuCustomOpExpr * expr) noexcept { - LUISA_ERROR_WITH_LOCATION("Not implemented."); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen_func.cpp b/src/backends/fallback/llvm_codegen_func.cpp deleted file mode 100644 index 1e52d85db..000000000 --- a/src/backends/fallback/llvm_codegen_func.cpp +++ /dev/null @@ -1,519 +0,0 @@ -// -// Created by Mike Smith on 2022/6/6. -// - -#include - -namespace luisa::compute::fallback { - -luisa::string LLVMCodegen::_function_name(Function f) const noexcept { - return luisa::format("{}.{:016x}", - f.tag() == Function::Tag::KERNEL ? "kernel" : "custom", - f.hash()); -} - -unique_ptr LLVMCodegen::_create_kernel_context(Function f) noexcept { - auto create_argument_struct = [&] { - auto member_index = 0u; - luisa::vector<::llvm::Type *> field_types; - luisa::vector field_indices; - auto size = 0ul; - static constexpr auto alignment = 16ul; - for (auto &arg : f.arguments()) { - auto aligned_offset = luisa::align(size, alignment); - if (aligned_offset > size) { - auto padding = ::llvm::ArrayType::get( - ::llvm::Type::getInt8Ty(_context), aligned_offset - size); - field_types.emplace_back(padding); - member_index++; - } - auto arg_size = [arg]() noexcept -> size_t { - switch (arg.tag()) { - case Variable::Tag::REFERENCE: return sizeof(void *); - case Variable::Tag::BUFFER: return buffer_handle_size; - case Variable::Tag::TEXTURE: return texture_handle_size; - case Variable::Tag::BINDLESS_ARRAY: return bindless_array_handle_size; - case Variable::Tag::ACCEL: return accel_handle_size; - default: break; - } - return arg.type()->size(); - }(); - field_types.emplace_back(_create_type(arg.type())); - field_indices.emplace_back(member_index++); - size = aligned_offset + arg_size; - } - auto aligned_size = luisa::align(size, alignment); - if (aligned_size > size) {// last padding - auto padding = ::llvm::ArrayType::get( - ::llvm::Type::getInt8Ty(_context), aligned_size - size); - field_types.emplace_back(padding); - member_index++; - } - // launch size - field_types.emplace_back(_create_type(Type::of())); - field_indices.emplace_back(member_index++); - ::llvm::ArrayRef<::llvm::Type *> fields_ref{field_types.data(), field_types.size()}; - return std::make_pair( - ::llvm::StructType::create(_context, fields_ref), - std::move(field_indices)); - }; - auto [arg_struct_type, arg_struct_indices] = create_argument_struct(); - auto arg_struct_name = luisa::format("arg.buffer.struct.{:016x}", f.hash()); - arg_struct_type->setName(::llvm::StringRef{arg_struct_name.data(), arg_struct_name.size()}); - auto arg_buffer_type = ::llvm::PointerType::get(arg_struct_type, 0); - ::llvm::SmallVector<::llvm::Type *, 8u> arg_types; - arg_types.emplace_back(arg_buffer_type); - arg_types.emplace_back(::llvm::PointerType::get(::llvm::Type::getInt8Ty(_context), 0)); - auto i32_type = ::llvm::Type::getInt32Ty(_context); - // dispatch size - arg_types.emplace_back(i32_type); - arg_types.emplace_back(i32_type); - arg_types.emplace_back(i32_type); - // block id - arg_types.emplace_back(i32_type); - arg_types.emplace_back(i32_type); - arg_types.emplace_back(i32_type); - LUISA_ASSERT(f.return_type() == nullptr, - "Invalid return type '{}' for kernel. Only void is allowed.", - f.return_type()->description()); - auto function_type = ::llvm::FunctionType::get( - ::llvm::Type::getVoidTy(_context), arg_types, false); - auto main_name = luisa::format("kernel.{:016x}.main", f.hash()); - auto ir = ::llvm::Function::Create( - function_type, ::llvm::Function::ExternalLinkage, - ::llvm::StringRef{main_name.data(), main_name.size()}, _module); - auto builder = luisa::make_unique<::llvm::IRBuilder<>>(_context); - auto entry_block = ::llvm::BasicBlock::Create(_context, "entry", ir); - builder->SetInsertPoint(entry_block); - luisa::vector<::llvm::Value *> arguments; - for (auto arg_id = 0u; arg_id < f.arguments().size(); arg_id++) { - auto &arg = f.arguments()[arg_id]; - switch (arg.tag()) { - case Variable::Tag::LOCAL: - case Variable::Tag::BUFFER: - case Variable::Tag::TEXTURE: - case Variable::Tag::BINDLESS_ARRAY: - case Variable::Tag::ACCEL: { - auto arg_name = _variable_name(arg); - auto addr_name = luisa::format("{}.addr", arg_name); - auto pr = builder->CreateStructGEP( - arg_struct_type, ir->getArg(0u), arg_struct_indices[arg_id], - ::llvm::StringRef{addr_name.data(), addr_name.size()}); - auto r = builder->CreateAlignedLoad( - _create_type(arg.type()), pr, ::llvm::Align{16ull}, - ::llvm::StringRef{arg_name.data(), arg_name.size()}); - arguments.emplace_back(r); - break; - } - default: LUISA_ERROR_WITH_LOCATION("Invalid kernel argument type."); - } - } - auto exit_block = ::llvm::BasicBlock::Create(_context, "exit", ir); - builder->SetInsertPoint(exit_block); - builder->CreateRetVoid(); - - // create work function... - auto ctx = _create_kernel_program(f); - // create simple schedule... - builder->SetInsertPoint(entry_block); - // block id - auto block_id = static_cast<::llvm::Value *>( - ::llvm::UndefValue::get(::llvm::FixedVectorType::get(i32_type, 3u))); - auto dispatch_size = static_cast<::llvm::Value *>( - ::llvm::UndefValue::get(::llvm::FixedVectorType::get(i32_type, 3u))); - for (auto i = 0u; i < 3u; i++) { - using namespace std::string_literals; - std::array elements{"x", "y", "z"}; - auto block_id_i = ir->getArg(i + 5u); - auto dispatch_size_i = ir->getArg(i + 2u); - block_id_i->setName("block.id."s.append(elements[i])); - dispatch_size_i->setName("dispatch.size."s.append(elements[i])); - block_id = builder->CreateInsertElement(block_id, block_id_i, i); - dispatch_size = builder->CreateInsertElement(dispatch_size, dispatch_size_i, i); - } - - auto i1_type = ::llvm::Type::getInt1Ty(_context); - auto i8_type = ::llvm::Type::getInt8Ty(_context); - auto ptr_type = ::llvm::PointerType::get(i8_type, 0); - auto needs_coro = f.propagated_builtin_callables().test(CallOp::SYNCHRONIZE_BLOCK); - auto thread_count = f.block_size().x * f.block_size().y * f.block_size().z; - ::llvm::AllocaInst *p_coro_states = nullptr; - ::llvm::AllocaInst *p_coro_all_done = nullptr; - ::llvm::BasicBlock *coro_loop = nullptr; - if (needs_coro) { - p_coro_states = builder->CreateAlloca( - ptr_type, ::llvm::ConstantInt::get(i32_type, thread_count)); - p_coro_states->setName("coro.states"); - p_coro_states->setAlignment(::llvm::Align{16u}); - builder->CreateMemSet( - p_coro_states, builder->getInt8(0u), - thread_count * sizeof(void *), ::llvm::Align{16u}); - p_coro_all_done = builder->CreateAlloca( - i1_type, ::llvm::ConstantInt::get(i32_type, 1u), "coro.all.done.addr"); - coro_loop = ::llvm::BasicBlock::Create(_context, "coro.loop", ir); - coro_loop->moveAfter(entry_block); - builder->CreateBr(coro_loop); - builder->SetInsertPoint(coro_loop); - builder->CreateStore(::llvm::ConstantInt::get(i1_type, true), p_coro_all_done); - } - - // loop - auto p_index = builder->CreateAlloca(::llvm::Type::getInt32Ty(_context), nullptr, "loop.index.addr"); - builder->CreateStore(builder->getInt32(0u), p_index); - auto loop_block = ::llvm::BasicBlock::Create(_context, "loop.head", ir, exit_block); - builder->CreateBr(loop_block); - builder->SetInsertPoint(loop_block); - auto index = builder->CreateLoad(::llvm::Type::getInt32Ty(_context), p_index, "loop.index"); - auto thread_yz = builder->CreateUDiv(index, builder->getInt32(f.block_size().x)); - auto thread_x = builder->CreateURem(index, builder->getInt32(f.block_size().x), "thread.id.x"); - auto thread_y = builder->CreateURem(thread_yz, builder->getInt32(f.block_size().y), "thread.id.y"); - auto thread_z = builder->CreateUDiv(thread_yz, builder->getInt32(f.block_size().y), "thread.id.z"); - auto thread_id = static_cast<::llvm::Value *>(::llvm::UndefValue::get(_create_type(Type::of()))); - thread_id = builder->CreateInsertElement(thread_id, thread_x, static_cast(0u)); - thread_id = builder->CreateInsertElement(thread_id, thread_y, static_cast(1u)); - thread_id = builder->CreateInsertElement(thread_id, thread_z, static_cast(2u), "thread.id"); - auto dispatch_id = builder->CreateNUWAdd(builder->CreateNUWMul(block_id, _literal(f.block_size())), thread_id, "dispatch.id"); - auto valid_thread = builder->CreateAndReduce(builder->CreateICmpULT(dispatch_id, dispatch_size, "thread.id.cmp")); - auto call_block = ::llvm::BasicBlock::Create(_context, "loop.kernel", ir, exit_block); - auto loop_update_block = ::llvm::BasicBlock::Create(_context, "loop.update", ir, exit_block); - builder->CreateCondBr(valid_thread, call_block, loop_update_block); - // call or resume - builder->SetInsertPoint(call_block); - if (needs_coro) { - auto p_coro_state = builder->CreateInBoundsGEP(ptr_type, p_coro_states, index, "coro.state.addr"); - auto coro_state = builder->CreateLoad(ptr_type, p_coro_state, "coro.state"); - auto coro_state_is_null = builder->CreateIsNull(coro_state, "coro.state.is.null"); - auto call_kernel = ::llvm::BasicBlock::Create(_context, "loop.kernel.call", ir); - auto resume_kernel = ::llvm::BasicBlock::Create(_context, "loop.kernel.resume", ir); - call_kernel->moveAfter(call_block); - resume_kernel->moveAfter(call_block); - builder->CreateCondBr(coro_state_is_null, call_kernel, resume_kernel); - // call - builder->SetInsertPoint(call_kernel); - auto call_args = arguments; - call_args.emplace_back(thread_id); - call_args.emplace_back(block_id); - call_args.emplace_back(dispatch_id); - call_args.emplace_back(dispatch_size); - call_args.emplace_back(ir->getArg(1u));// shared memory - auto coro_handle = builder->CreateCall( - ctx->ir->getFunctionType(), ctx->ir, - ::llvm::ArrayRef<::llvm::Value *>{call_args.data(), call_args.size()}); - builder->CreateStore(coro_handle, p_coro_state); - builder->CreateStore(::llvm::ConstantInt::get(i1_type, false), p_coro_all_done); - builder->CreateBr(loop_update_block); - // resume or done - builder->SetInsertPoint(resume_kernel); - builder->CreateIntrinsic(::llvm::Intrinsic::coro_resume, {}, {coro_state}); - auto coro_done = builder->CreateIntrinsic(::llvm::Intrinsic::coro_done, {}, {coro_state}); - auto coro_all_done = builder->CreateLoad(i1_type, p_coro_all_done, "coro.all.done"); - auto coro_all_done_and = builder->CreateAnd(coro_all_done, coro_done, "coro.all.done.and"); - builder->CreateStore(coro_all_done_and, p_coro_all_done); - auto coro_done_block = ::llvm::BasicBlock::Create(_context, "loop.kernel.done", ir); - coro_done_block->moveAfter(resume_kernel); - builder->CreateCondBr(coro_done, coro_done_block, loop_update_block); - builder->SetInsertPoint(coro_done_block); - builder->CreateIntrinsic(::llvm::Intrinsic::coro_destroy, {}, {coro_state}); - builder->CreateBr(loop_update_block); - } else { - auto call_args = arguments; - call_args.emplace_back(thread_id); - call_args.emplace_back(block_id); - call_args.emplace_back(dispatch_id); - call_args.emplace_back(dispatch_size); - call_args.emplace_back(ir->getArg(1u));// shared memory - builder->CreateCall( - ctx->ir->getFunctionType(), ctx->ir, - ::llvm::ArrayRef<::llvm::Value *>{call_args.data(), call_args.size()}); - builder->CreateBr(loop_update_block); - } - // update - builder->SetInsertPoint(loop_update_block); - auto next_index = builder->CreateAdd(index, builder->getInt32(1u), "loop.index.next"); - builder->CreateStore(next_index, p_index); - auto should_continue = builder->CreateICmpULT(next_index, builder->getInt32(thread_count)); - if (needs_coro) { - auto loop_out = ::llvm::BasicBlock::Create(_context, "loop.out", ir); - loop_out->moveAfter(loop_update_block); - builder->CreateCondBr(should_continue, loop_block, loop_out); - builder->SetInsertPoint(loop_out); - auto coro_all_done = builder->CreateLoad(i1_type, p_coro_all_done, "coro.all.done"); - builder->CreateCondBr(coro_all_done, exit_block, coro_loop); - } else { - builder->CreateCondBr(should_continue, loop_block, exit_block); - } - return ctx; -} - -luisa::unique_ptr LLVMCodegen::_create_kernel_program(Function f) noexcept { - luisa::vector<::llvm::Type *> arg_types; - for (auto &&arg : f.arguments()) { - switch (arg.tag()) { - case Variable::Tag::LOCAL: - case Variable::Tag::BUFFER: - case Variable::Tag::TEXTURE: - case Variable::Tag::BINDLESS_ARRAY: - case Variable::Tag::ACCEL: - arg_types.emplace_back(_create_type(arg.type())); - break; - default: LUISA_ERROR_WITH_LOCATION("Invalid kernel argument type."); - } - } - // thread_id/block_id/dispatch_id/dispatch_size - for (auto i = 0u; i < 4u; i++) { - arg_types.emplace_back(_create_type(Type::of())); - } - // shared memory - arg_types.emplace_back(::llvm::PointerType::get(::llvm::Type::getInt8Ty(_context), 0u)); - auto needs_coroutine = f.propagated_builtin_callables().test(CallOp::SYNCHRONIZE_BLOCK); - auto return_type = needs_coroutine ? ::llvm::Type::getInt8PtrTy(_context) : ::llvm::Type::getVoidTy(_context); - ::llvm::ArrayRef<::llvm::Type *> arg_types_ref{arg_types.data(), arg_types.size()}; - auto function_type = ::llvm::FunctionType::get(return_type, arg_types_ref, false); - auto name = _function_name(f); - auto ir = ::llvm::Function::Create( - function_type, ::llvm::Function::InternalLinkage, - ::llvm::StringRef{name.data(), name.size()}, _module); - ir->addFnAttr("coroutine.presplit", "0");// LLVM require the frontend to add the function attribute - auto builder = luisa::make_unique<::llvm::IRBuilder<>>(_context); - auto entry_block = ::llvm::BasicBlock::Create(_context, "entry", ir); - auto exit_block = ::llvm::BasicBlock::Create(_context, "exit", ir); - ::llvm::BasicBlock *coro_cleanup = nullptr; - ::llvm::BasicBlock *coro_suspend = nullptr; - if (needs_coroutine) { - // coro begin - builder->SetInsertPoint(entry_block); - auto i32_type = ::llvm::Type::getInt32Ty(_context); - auto i8_type = ::llvm::Type::getInt8Ty(_context); - auto i1_type = ::llvm::Type::getInt1Ty(_context); - auto ptr_type = ::llvm::Type::getInt8PtrTy(_context); - auto coro_id = builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_id, {}, - {::llvm::ConstantInt::get(i32_type, 0u), - ::llvm::ConstantPointerNull::get(ptr_type), - ::llvm::ConstantPointerNull::get(ptr_type), - ::llvm::ConstantPointerNull::get(ptr_type)}); - coro_id->setName("coro.id"); - auto coro_needs_alloc = builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_alloc, {}, {coro_id}); - coro_needs_alloc->setName("coro.needs.alloc"); - auto coro_dyn_alloc = ::llvm::BasicBlock::Create(_context, "coro.dyn.alloc", ir); - auto coro_begin = ::llvm::BasicBlock::Create(_context, "coro.begin", ir); - coro_dyn_alloc->moveAfter(entry_block); - coro_begin->moveAfter(coro_dyn_alloc); - builder->CreateCondBr(coro_needs_alloc, coro_dyn_alloc, coro_begin); - builder->SetInsertPoint(coro_dyn_alloc); - auto coro_size = builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_size, {i32_type}, {}); - coro_size->setName("coro.size"); - auto coro_mem = ::llvm::CallInst::CreateMalloc( - coro_dyn_alloc, coro_size->getType(), i8_type, - coro_size, nullptr, nullptr, "coro.malloc"); - builder->Insert(coro_mem); - builder->CreateBr(coro_begin); - builder->SetInsertPoint(coro_begin); - auto phi = builder->CreatePHI(ptr_type, 2u, "coro.mem"); - phi->addIncoming(::llvm::ConstantPointerNull::get(ptr_type), entry_block); - phi->addIncoming(coro_mem, coro_dyn_alloc); - auto coro_handle = builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_begin, {}, {coro_id, phi}); - // coro end - builder->SetInsertPoint(exit_block); - // last suspend - auto coro_state = builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_suspend, {}, - {::llvm::ConstantTokenNone::get(_context), - ::llvm::ConstantInt::get(i1_type, true)}); - coro_state->setName("coro.state"); - coro_cleanup = ::llvm::BasicBlock::Create(_context, "coro.cleanup", ir); - coro_suspend = ::llvm::BasicBlock::Create(_context, "coro.suspend", ir); - auto coro_trap = ::llvm::BasicBlock::Create(_context, "coro.trap", ir); - coro_cleanup->moveAfter(exit_block); - coro_suspend->moveAfter(coro_cleanup); - coro_trap->moveAfter(coro_suspend); - auto coro_switch = builder->CreateSwitch(coro_state, coro_suspend, 2u); - coro_switch->addCase(::llvm::ConstantInt::get(i8_type, 0), coro_trap); - coro_switch->addCase(::llvm::ConstantInt::get(i8_type, 1), coro_cleanup); - // coro cleanup - builder->SetInsertPoint(coro_cleanup); - auto mem = builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_free, {}, {coro_id, coro_handle}); - mem->setName("coro.free.mem"); - auto coro_needs_free = builder->CreateICmpNE( - mem, ::llvm::ConstantPointerNull::get(ptr_type), "coro.needs.free"); - auto coro_dyn_free = ::llvm::BasicBlock::Create(_context, "coro.dyn.free", ir); - coro_dyn_free->moveAfter(coro_cleanup); - builder->CreateCondBr(coro_needs_free, coro_dyn_free, coro_suspend); - builder->SetInsertPoint(coro_dyn_free); - auto coro_free = ::llvm::CallInst::CreateFree(mem, coro_dyn_free); - builder->Insert(coro_free); - builder->CreateBr(coro_suspend); - // coro suspend - builder->SetInsertPoint(coro_suspend); - builder->CreateIntrinsic( - ::llvm::Intrinsic::coro_end, {}, - {coro_handle, ::llvm::ConstantInt::get(i1_type, false)}); - builder->CreateRet(coro_handle); - // coro trap - builder->SetInsertPoint(coro_trap); - builder->CreateIntrinsic( - ::llvm::Intrinsic::trap, {}, {}); - builder->CreateUnreachable(); - builder->SetInsertPoint(coro_begin); - } else { - builder->SetInsertPoint(exit_block); - builder->CreateRetVoid(); - builder->SetInsertPoint(entry_block); - } - luisa::unordered_map variables; - auto make_alloca = [&](::llvm::Value *x, luisa::string_view name = "") noexcept { - auto p = builder->CreateAlloca( - x->getType(), nullptr, - ::llvm::StringRef{name.data(), name.size()}); - p->setAlignment(::llvm::Align{16}); - builder->CreateStore(x, p); - return p; - }; - for (auto i = 0u; i < f.arguments().size(); i++) { - auto lc_arg = f.arguments()[i]; - auto arg_name = _variable_name(lc_arg); - auto arg = static_cast<::llvm::Value *>(ir->getArg(i)); - if (lc_arg.tag() == Variable::Tag::LOCAL) { arg = make_alloca(arg); } - arg->setName(::llvm::StringRef{arg_name.data(), arg_name.size()}); - variables.emplace(lc_arg.uid(), arg); - } - auto builtin_offset = f.arguments().size(); - for (auto arg : f.builtin_variables()) { - switch (arg.tag()) { - case Variable::Tag::THREAD_ID: - variables.emplace(arg.uid(), make_alloca(ir->getArg(builtin_offset + 0), _variable_name(arg))); - break; - case Variable::Tag::BLOCK_ID: - variables.emplace(arg.uid(), make_alloca(ir->getArg(builtin_offset + 1), _variable_name(arg))); - break; - case Variable::Tag::DISPATCH_ID: - variables.emplace(arg.uid(), make_alloca(ir->getArg(builtin_offset + 2), _variable_name(arg))); - break; - case Variable::Tag::DISPATCH_SIZE: - variables.emplace(arg.uid(), make_alloca(ir->getArg(builtin_offset + 3), _variable_name(arg))); - break; - default: LUISA_ERROR_WITH_LOCATION("Invalid kernel argument type."); - } - } - // shared memory - auto smem = ir->getArg(builtin_offset + 4); - auto smem_offset = 0u; - for (auto s : f.shared_variables()) { - auto alignment = s.type()->alignment(); - smem_offset = (smem_offset + alignment - 1u) / alignment * alignment; - auto p = builder->CreateConstGEP1_32( - ::llvm::Type::getInt8Ty(_context), smem, smem_offset); - auto ptr = builder->CreatePointerCast(p, _create_type(s.type())->getPointerTo()); - variables.emplace(s.uid(), ptr); - smem_offset += s.type()->size(); - } - auto ctx = luisa::make_unique( - f, ir, nullptr, exit_block, - std::move(builder), std::move(variables), - coro_cleanup, coro_suspend); - return ctx; -} - -unique_ptr LLVMCodegen::_create_callable_context(Function f) noexcept { - auto is_out_reference = [&f](auto v) noexcept { - return v.tag() == Variable::Tag::REFERENCE && - (f.variable_usage(v.uid()) == Usage::WRITE || - f.variable_usage(v.uid()) == Usage::READ_WRITE); - }; - luisa::vector<::llvm::Type *> arg_types; - for (auto &&arg : f.arguments()) { - auto arg_type = _create_type(arg.type()); - if (is_out_reference(arg)) { - arg_type = ::llvm::PointerType::get(arg_type, 0); - } - arg_types.emplace_back(arg_type); - } - auto return_type = _create_type(f.return_type()); - ::llvm::ArrayRef<::llvm::Type *> arg_types_ref{arg_types.data(), arg_types.size()}; - auto function_type = ::llvm::FunctionType::get(return_type, arg_types_ref, false); - auto name = _function_name(f); - auto ir = ::llvm::Function::Create( - function_type, ::llvm::Function::InternalLinkage, - ::llvm::StringRef{name.data(), name.size()}, _module); - auto builder = luisa::make_unique<::llvm::IRBuilder<>>(_context); - auto body_block = ::llvm::BasicBlock::Create(_context, "entry", ir); - auto exit_block = ::llvm::BasicBlock::Create(_context, "exit", ir); - builder->SetInsertPoint(body_block); - auto i = 0u; - luisa::unordered_map variables; - for (auto &&arg : ir->args()) { - auto lc_arg = f.arguments()[i++]; - auto arg_name = _variable_name(lc_arg); - arg.setName(::llvm::StringRef{arg_name.data(), arg_name.size()}); - if (is_out_reference(lc_arg)) { - variables.emplace(lc_arg.uid(), &arg); - } else { - switch (lc_arg.tag()) { - case Variable::Tag::BUFFER: - case Variable::Tag::TEXTURE: - case Variable::Tag::BINDLESS_ARRAY: - case Variable::Tag::ACCEL: - variables.emplace(lc_arg.uid(), &arg); - break; - default: { - auto p_arg = builder->CreateAlloca(arg.getType()); - p_arg->setAlignment(::llvm::Align{16}); - builder->CreateStore(&arg, p_arg); - variables.emplace(lc_arg.uid(), p_arg); - break; - } - } - } - } - ::llvm::Value *ret = nullptr; - if (auto ret_type = f.return_type()) { - builder->SetInsertPoint(body_block); - auto p_ret = builder->CreateAlloca(return_type, nullptr, "retval.addr"); - p_ret->setAlignment(::llvm::Align{16}); - ret = p_ret; - builder->SetInsertPoint(exit_block); - builder->CreateRet(builder->CreateLoad(return_type, ret)); - } else {// return void - builder->SetInsertPoint(exit_block); - builder->CreateRetVoid(); - } - builder->SetInsertPoint(body_block); - return luisa::make_unique( - f, ir, ret, exit_block, - std::move(builder), std::move(variables)); -} - -::llvm::Function *LLVMCodegen::_create_function(Function f) noexcept { - auto name = _function_name(f); - ::llvm::StringRef name_ref{name.data(), name.size()}; - if (auto ir = _module->getFunction(name_ref)) { return ir; } - _function_stack.emplace_back( - f.tag() == Function::Tag::KERNEL ? - _create_kernel_context(f) : - _create_callable_context(f)); - _emit_function(); - auto ctx = std::move(_function_stack.back()); - _function_stack.pop_back(); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(ctx->exit_block); - } - return ctx->ir; -} - -void LLVMCodegen::_emit_function() noexcept { - auto ctx = _current_context(); - for (auto v : ctx->function.local_variables()) { - auto p = _create_alloca(_create_type(v.type()), _variable_name(v)); - ctx->variables.emplace(v.uid(), p); - ctx->builder->CreateMemSet( - p, ctx->builder->getInt8(0), - v.type()->size(), ::llvm::Align{16}); - } - ctx->function.body()->accept(*this); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen_stmt.cpp b/src/backends/fallback/llvm_codegen_stmt.cpp deleted file mode 100644 index f2b98d995..000000000 --- a/src/backends/fallback/llvm_codegen_stmt.cpp +++ /dev/null @@ -1,216 +0,0 @@ -// -// Created by Mike Smith on 2022/6/6. -// - -#include - -namespace luisa::compute::fallback { - -void LLVMCodegen::visit(const BreakStmt *stmt) { - auto ctx = _current_context(); - LUISA_ASSERT(!ctx->break_targets.empty(), - "Invalid break statement."); - auto br = ctx->builder->CreateBr(ctx->break_targets.back()); -} - -void LLVMCodegen::visit(const ContinueStmt *stmt) { - auto ctx = _current_context(); - LUISA_ASSERT(!ctx->continue_targets.empty(), - "Invalid continue statement."); - auto br = ctx->builder->CreateBr(ctx->continue_targets.back()); -} - -void LLVMCodegen::visit(const ReturnStmt *stmt) { - auto ctx = _current_context(); - if (auto ret_val = stmt->expression()) { - _create_assignment( - ctx->function.return_type(), stmt->expression()->type(), - ctx->ret, _create_expr(stmt->expression())); - } - auto br = ctx->builder->CreateBr(ctx->exit_block); -} - -void LLVMCodegen::visit(const ScopeStmt *stmt) { - for (auto s : stmt->statements()) { - s->accept(*this); - if (auto block = _current_context()->builder->GetInsertBlock(); - block->getTerminator() != nullptr /* terminated */) { - break;// remaining code is dead - } - } -} - -void LLVMCodegen::visit(const IfStmt *stmt) { - auto ctx = _current_context(); - auto cond = _create_expr(stmt->condition()); - cond = _scalar_to_bool(stmt->condition()->type(), cond); - cond = ctx->builder->CreateICmpNE( - ctx->builder->CreateLoad(_create_type(Type::of()), cond, "cond"), - ctx->builder->getInt8(0), "cond.cmp"); - auto then_block = ::llvm::BasicBlock::Create(_context, "if.then", ctx->ir); - auto else_block = ::llvm::BasicBlock::Create(_context, "if.else", ctx->ir); - auto end_block = ::llvm::BasicBlock::Create(_context, "if.end", ctx->ir); - ctx->builder->CreateCondBr(cond, then_block, else_block); - // true branch - then_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(then_block); - stmt->true_branch()->accept(*this); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(end_block); - } - // false branch - else_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(else_block); - stmt->false_branch()->accept(*this); - end_block->moveAfter(ctx->builder->GetInsertBlock()); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(end_block); - } - // end - ctx->builder->SetInsertPoint(end_block); -} - -void LLVMCodegen::visit(const LoopStmt *stmt) { - auto ctx = _current_context(); - auto loop_block = ::llvm::BasicBlock::Create(_context, "loop", ctx->ir); - auto loop_exit_block = ::llvm::BasicBlock::Create(_context, "loop.exit", ctx->ir); - loop_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->continue_targets.emplace_back(loop_block); - ctx->break_targets.emplace_back(loop_exit_block); - ctx->builder->CreateBr(loop_block); - ctx->builder->SetInsertPoint(loop_block); - stmt->body()->accept(*this); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(loop_block); - } - ctx->continue_targets.pop_back(); - ctx->break_targets.pop_back(); - loop_exit_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(loop_exit_block); -} - -void LLVMCodegen::visit(const ExprStmt *stmt) { - static_cast(_create_expr(stmt->expression())); -} - -void LLVMCodegen::visit(const SwitchStmt *stmt) { - auto ctx = _current_context(); - auto t = ctx->builder->getInt32Ty(); - auto cond = ctx->builder->CreateLoad(t, _create_expr(stmt->expression()), "switch.value"); - auto end_block = ::llvm::BasicBlock::Create(_context, "switch.end", ctx->ir); - auto inst = ctx->builder->CreateSwitch(cond, end_block); - ctx->break_targets.emplace_back(end_block); - ctx->switch_stack.emplace_back(inst); - for (auto c : stmt->body()->statements()) { c->accept(*this); } - ctx->break_targets.pop_back(); - ctx->switch_stack.pop_back(); - end_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(end_block); -} - -void LLVMCodegen::visit(const SwitchCaseStmt *stmt) { - LUISA_ASSERT(stmt->expression()->tag() == Expression::Tag::LITERAL, - "Switch case expression must be a literal."); - auto v = static_cast(stmt->expression())->value(); - LUISA_ASSERT(luisa::holds_alternative(v) || luisa::holds_alternative(v), - "Switch case expression must be an integer."); - auto value = luisa::holds_alternative(v) ? luisa::get(v) : luisa::get(v); - auto ctx = _current_context(); - LUISA_ASSERT(!ctx->switch_stack.empty(), "Case outside of switch."); - auto case_block = ::llvm::BasicBlock::Create(_context, "switch.case", ctx->ir); - case_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->switch_stack.back()->addCase(ctx->builder->getInt32(value), case_block); - ctx->builder->SetInsertPoint(case_block); - stmt->body()->accept(*this); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(ctx->break_targets.back()); - } -} - -void LLVMCodegen::visit(const SwitchDefaultStmt *stmt) { - auto ctx = _current_context(); - LUISA_ASSERT(!ctx->switch_stack.empty(), "Default case outside of switch."); - auto default_block = ::llvm::BasicBlock::Create(_context, "switch.default", ctx->ir); - ctx->switch_stack.back()->setDefaultDest(default_block); - default_block->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(default_block); - stmt->body()->accept(*this); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(ctx->break_targets.back()); - } -} - -void LLVMCodegen::visit(const AssignStmt *stmt) { - _create_assignment( - stmt->lhs()->type(), stmt->rhs()->type(), - _create_expr(stmt->lhs()), _create_expr(stmt->rhs())); -} - -void LLVMCodegen::visit(const ForStmt *stmt) { - auto var = _create_expr(stmt->variable()); - auto ctx = _current_context(); - auto loop_test = ::llvm::BasicBlock::Create(_context, "for.test", ctx->ir); - auto loop_body = ::llvm::BasicBlock::Create(_context, "for.body", ctx->ir); - auto loop_update = ::llvm::BasicBlock::Create(_context, "for.update", ctx->ir); - auto loop_exit = ::llvm::BasicBlock::Create(_context, "for.exit", ctx->ir); - loop_test->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->CreateBr(loop_test); - ctx->builder->SetInsertPoint(loop_test); - auto cond = _create_expr(stmt->condition()); - cond = _scalar_to_bool(stmt->condition()->type(), cond); - cond = ctx->builder->CreateICmpNE( - ctx->builder->CreateLoad(ctx->builder->getInt8Ty(), cond, "for.cond"), - ctx->builder->getInt8(0), "for.cond.cmp"); - ctx->builder->CreateCondBr(cond, loop_body, loop_exit); - loop_body->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(loop_body); - ctx->continue_targets.emplace_back(loop_update); - ctx->break_targets.emplace_back(loop_exit); - stmt->body()->accept(*this); - if (ctx->builder->GetInsertBlock()->getTerminator() == nullptr) { - ctx->builder->CreateBr(loop_update); - } - ctx->continue_targets.pop_back(); - ctx->break_targets.pop_back(); - loop_update->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(loop_update); - auto vt = stmt->variable()->type(); - auto st = stmt->step()->type(); - auto step = _builtin_static_cast(vt, st, _create_expr(stmt->step())); - auto t = _create_type(vt); - auto next = [&] { - switch (vt->tag()) { - case Type::Tag::FLOAT: - return ctx->builder->CreateFAdd( - ctx->builder->CreateLoad(t, var, "for.var"), - ctx->builder->CreateLoad(t, step, "for.var.step"), "for.var.next"); - case Type::Tag::INT: - return ctx->builder->CreateNSWAdd( - ctx->builder->CreateLoad(t, var, "for.var"), - ctx->builder->CreateLoad(t, step, "for.var.step"), "for.var.next"); - case Type::Tag::UINT: - return ctx->builder->CreateAdd( - ctx->builder->CreateLoad(t, var, "for.var"), - ctx->builder->CreateLoad(t, step, "for.var.step"), "for.var.next"); - default: break; - } - LUISA_ERROR_WITH_LOCATION( - "Invalid loop variable type: {}.", - vt->description()); - }(); - ctx->builder->CreateStore(next, var); - ctx->builder->CreateBr(loop_test); - loop_exit->moveAfter(ctx->builder->GetInsertBlock()); - ctx->builder->SetInsertPoint(loop_exit); -} - -void LLVMCodegen::visit(const CommentStmt *stmt) { /* do nothing */ } - -void LLVMCodegen::_create_assignment(const Type *dst_type, const Type *src_type, ::llvm::Value *p_dst, ::llvm::Value *p_src) noexcept { - auto p_rhs = _builtin_static_cast(dst_type, src_type, p_src); - auto builder = _current_context()->builder.get(); - auto dst = builder->CreateLoad(_create_type(dst_type), p_rhs, "load"); - builder->CreateStore(dst, p_dst); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen_type.cpp b/src/backends/fallback/llvm_codegen_type.cpp deleted file mode 100644 index 85f8e56ca..000000000 --- a/src/backends/fallback/llvm_codegen_type.cpp +++ /dev/null @@ -1,661 +0,0 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#include - -namespace luisa::compute::fallback { - -::llvm::Value *LLVMCodegen::_scalar_to_bool(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_scalar(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->tag()) { - case Type::Tag::BOOL: return p_src; - case Type::Tag::FLOAT: return _create_stack_variable( - builder->CreateFCmpONE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float.to.bool.src"), - _literal(0.f), "cast.float.to.bool.cmp"), - "cast.float.to.bool.addr"); - case Type::Tag::INT: - case Type::Tag::UINT: return _create_stack_variable( - builder->CreateICmpNE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int.to.bool.src"), - _literal(0u), "cast.int.to.bool.cmp"), - "cast.int.to.bool.addr"); - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to bool.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_scalar_to_float(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_scalar(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->tag()) { - case Type::Tag::BOOL: return _create_stack_variable( - builder->CreateSelect( - builder->CreateICmpEQ( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool.to.float.src"), - _literal(true), "cast.bool.to.float.cmp"), - _literal(1.f), _literal(0.f), "cast.bool.to.float.select"), - "cast.bool.to.float.addr"); - case Type::Tag::FLOAT: return p_src; - case Type::Tag::INT: return _create_stack_variable( - builder->CreateSIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int.to.float.src"), - builder->getFloatTy(), "cast.int.to.float.cast"), - "cast.int.to.float.addr"); - case Type::Tag::UINT: return _create_stack_variable( - builder->CreateUIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.uint.to.float.src"), - builder->getFloatTy(), "cast.uint.to.float.cast"), - "cast.uint.to.float.addr"); - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to float.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_scalar_to_int(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_scalar(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->tag()) { - case Type::Tag::BOOL: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool.to.int.src"), - builder->getInt32Ty(), "cast.bool.to.int.cast"), - "cast.bool.to.int.addr"); - case Type::Tag::FLOAT: return _create_stack_variable( - builder->CreateFPToSI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float.to.int.src"), - builder->getInt32Ty(), "cast.float.to.int.cast"), - "cast.float.to.int.addr"); - case Type::Tag::INT: - case Type::Tag::UINT: return p_src; - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to int.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_scalar_to_uint(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_scalar(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->tag()) { - case Type::Tag::BOOL: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool.to.uint.src"), - builder->getInt32Ty(), "cast.bool.to.uint.cast"), - "cast.bool.to.uint.addr"); - case Type::Tag::FLOAT: return _create_stack_variable( - builder->CreateFPToUI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float.to.uint.src"), - builder->getInt32Ty(), "cast.float.to.uint.cast"), - "cast.float.to.uint.addr"); - case Type::Tag::INT: - case Type::Tag::UINT: return p_src; - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to uint.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_vector_to_bool_vector(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_vector(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->element()->tag()) { - case Type::Tag::BOOL: return p_src; - case Type::Tag::FLOAT: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateFCmpONE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float2.to.bool2.src"), - _literal(make_float2(0.f)), "cast.float2.to.bool2.cmp"), - "cast.float2.to.bool2.addr"); - case 3u: return _create_stack_variable( - builder->CreateFCmpONE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float3.to.bool3.src"), - _literal(make_float3(0.f)), "cast.float3.to.bool3.cmp"), - "cast.float3.to.bool3.addr"); - case 4u: return _create_stack_variable( - builder->CreateFCmpONE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float4.to.bool4.src"), - _literal(make_float4(0.f)), "cast.float4.to.bool4.cmp"), - "cast.float4.to.bool4.addr"); - default: break; - } - break; - } - case Type::Tag::INT: - case Type::Tag::UINT: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateICmpNE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int2.to.bool2.src"), - _literal(make_uint2(0u)), "cast.int2.to.bool2.cmp"), - "cast.int2.to.bool2.addr"); - case 3u: return _create_stack_variable( - builder->CreateICmpNE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int3.to.bool3.src"), - _literal(make_uint3(0u)), "cast.int3.to.bool3.cmp"), - "cast.int3.to.bool3.addr"); - case 4u: return _create_stack_variable( - builder->CreateICmpNE( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int4.to.bool4.src"), - _literal(make_uint4(0u)), "cast.int4.to.bool4.cmp"), - "cast.int4.to.bool4.addr"); - default: break; - } - break; - } - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to bool vector.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_vector_to_float_vector(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_vector(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->element()->tag()) { - case Type::Tag::BOOL: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateSelect( - builder->CreateICmpEQ(builder->CreateLoad(_create_type(src_type), p_src, "cast.bool2.to.float2.src"), - _literal(make_bool2(true)), "cast.bool2.to.float2.cmp"), - _literal(make_float2(1.f)), _literal(make_float2(0.f)), "cast.bool2.to.float2.select"), - "cast.bool2.to.float2.addr"); - case 3u: return _create_stack_variable( - builder->CreateSelect( - builder->CreateICmpEQ(builder->CreateLoad(_create_type(src_type), p_src, "cast.bool3.to.float3.src"), - _literal(make_bool2(true)), "cast.bool3.to.float3.cmp"), - _literal(make_float3(1.f)), _literal(make_float3(0.f)), "cast.bool3.to.float3.select"), - "cast.bool3.to.float3.addr"); - case 4u: return _create_stack_variable( - builder->CreateSelect( - builder->CreateICmpEQ(builder->CreateLoad(_create_type(src_type), p_src, "cast.bool4.to.float4.src"), - _literal(make_bool2(true)), "cast.bool4.to.float4.cmp"), - _literal(make_float4(1.f)), _literal(make_float4(0.f)), "cast.bool4.to.float4.select"), - "cast.bool4.to.float4.addr"); - default: break; - } - break; - } - case Type::Tag::FLOAT: return p_src; - case Type::Tag::INT: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateSIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int2.to.float2.src"), - _create_type(Type::of()), "cast.int2.to.float2.cast"), - "cast.int2.to.float2.addr"); - case 3u: return _create_stack_variable( - builder->CreateSIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int3.to.float3.src"), - _create_type(Type::of()), "cast.int3.to.float3.cast"), - "cast.int3.to.float3.addr"); - case 4u: return _create_stack_variable( - builder->CreateSIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.int4.to.float4.src"), - _create_type(Type::of()), "cast.int4.to.float4.cast"), - "cast.int4.to.float4.addr"); - default: break; - } - break; - } - case Type::Tag::UINT: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateUIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.uint2.to.float2.src"), - _create_type(Type::of()), "cast.uint2.to.float2.cast"), - "cast.uint2.to.float2.addr"); - case 3u: return _create_stack_variable( - builder->CreateUIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.uint3.to.float3.src"), - _create_type(Type::of()), "cast.uint3.to.float3.cast"), - "cast.uint3.to.float3.addr"); - case 4u: return _create_stack_variable( - builder->CreateUIToFP( - builder->CreateLoad(_create_type(src_type), p_src, "cast.uint4.to.float4.src"), - _create_type(Type::of()), "cast.uint4.to.float4.cast"), - "cast.uint4.to.float4.addr"); - default: break; - } - break; - } - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to float vector.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_vector_to_int_vector(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_vector(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->element()->tag()) { - case Type::Tag::BOOL: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool2.to.int2.src"), - _create_type(Type::of()), "cast.bool2.to.int2.cast"), - "cast.bool2.to.int2.addr"); - case 3u: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool3.to.int3.src"), - _create_type(Type::of()), "cast.bool3.to.int3.cast"), - "cast.bool3.to.int3.addr"); - case 4u: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool4.to.int4.src"), - _create_type(Type::of()), "cast.bool4.to.int4.cast"), - "cast.bool4.to.int4.addr"); - default: break; - } - break; - } - case Type::Tag::FLOAT: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateFPToSI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float2.to.int2.src"), - _create_type(Type::of()), "cast.float2.to.int2.cast"), - "cast.float2.to.int2.addr"); - case 3u: return _create_stack_variable( - builder->CreateFPToSI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float3.to.int3.src"), - _create_type(Type::of()), "cast.float3.to.int3.cast"), - "cast.float3.to.int3.addr"); - case 4u: return _create_stack_variable( - builder->CreateFPToSI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float4.to.int4.src"), - _create_type(Type::of()), "cast.float4.to.int4.cast"), - "cast.float4.to.int4.addr"); - default: break; - } - break; - } - case Type::Tag::INT: - case Type::Tag::UINT: return p_src; - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to int vector.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_vector_to_uint_vector(const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_vector(), "Invalid source type: {}.", src_type->description()); - auto builder = _current_context()->builder.get(); - switch (src_type->element()->tag()) { - case Type::Tag::BOOL: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool2.to.uint2.src"), - _create_type(Type::of()), "cast.bool2.to.int2.cast"), - "cast.bool2.to.uint2.addr"); - case 3u: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool3.to.uint3.src"), - _create_type(Type::of()), "cast.bool3.to.uint3.cast"), - "cast.bool3.to.uint3.addr"); - case 4u: return _create_stack_variable( - builder->CreateZExt( - builder->CreateLoad(_create_type(src_type), p_src, "cast.bool4.to.uint4.src"), - _create_type(Type::of()), "cast.bool4.to.uint4.cast"), - "cast.bool4.to.uint4.addr"); - default: break; - } - break; - } - case Type::Tag::FLOAT: { - switch (src_type->dimension()) { - case 2u: return _create_stack_variable( - builder->CreateFPToUI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float2.to.uint2.src"), - _create_type(Type::of()), "cast.float2.to.uint2.cast"), - "cast.float2.to.uint2.addr"); - case 3u: return _create_stack_variable( - builder->CreateFPToUI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float3.to.uint3.src"), - _create_type(Type::of()), "cast.float3.to.uint3.cast"), - "cast.float3.to.uint3.addr"); - case 4u: return _create_stack_variable( - builder->CreateFPToUI( - builder->CreateLoad(_create_type(src_type), p_src, "cast.float4.to.uint4.src"), - _create_type(Type::of()), "cast.float4.to.uint4.cast"), - "cast.float4.to.uint4.addr"); - default: break; - } - break; - } - case Type::Tag::INT: - case Type::Tag::UINT: return p_src; - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to uint vector.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_scalar_to_vector(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(dst_type->is_vector(), "Invalid destination type: {}.", dst_type->description()); - LUISA_ASSERT(src_type->is_scalar(), "Invalid source type: {}.", src_type->description()); - if (*dst_type->element() != *src_type) { - return _scalar_to_vector(dst_type, dst_type->element(), - _builtin_static_cast(dst_type->element(), src_type, p_src)); - } - auto builder = _current_context()->builder.get(); - auto src = builder->CreateLoad(_create_type(src_type), p_src, "cast.scalar.to.vector.src"); - switch (src_type->tag()) { - case Type::Tag::BOOL: - case Type::Tag::FLOAT: - case Type::Tag::INT: - case Type::Tag::UINT: return _create_stack_variable( - builder->CreateVectorSplat(dst_type->dimension(), src, "cast.scalar.to.vector.splat"), - "cast.scalar.to.vector.addr"); - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to vector.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_vector_to_vector(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_vector(), "Invalid source type: {}.", src_type->description()); - LUISA_ASSERT(dst_type->is_vector(), "Invalid destination type: {}.", dst_type->description()); - auto builder = _current_context()->builder.get(); - if (dst_type->dimension() == 2u && src_type->dimension() > 2u) { - auto src = builder->CreateLoad(_create_type(src_type), p_src, "cast.vector.to.vector.src"); - auto shuffle = builder->CreateShuffleVector(src, {0, 1}, "cast.vector.to.vector.shuffle"); - return _vector_to_vector( - dst_type, Type::from(luisa::format("vector<{},2>", src_type->element()->description())), - _create_stack_variable(shuffle, "cast.vector.to.vector.addr")); - } - switch (dst_type->element()->tag()) { - case Type::Tag::BOOL: return _vector_to_bool_vector(src_type, p_src); - case Type::Tag::FLOAT: return _vector_to_float_vector(src_type, p_src); - case Type::Tag::INT: return _vector_to_int_vector(src_type, p_src); - case Type::Tag::UINT: return _vector_to_uint_vector(src_type, p_src); - default: break; - } - return nullptr; -} - -::llvm::Value *LLVMCodegen::_scalar_to_matrix(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(dst_type->is_matrix(), "Invalid destination type: {}.", dst_type->description()); - LUISA_ASSERT(src_type->is_scalar(), "Invalid source type: {}.", src_type->description()); - auto p_src_cvt = _scalar_to_float(src_type, p_src); - auto zero = _create_stack_variable(_literal(0.f), "zero"); - switch (dst_type->dimension()) { - case 2u: return _make_float2x2( - _make_float2(p_src_cvt, zero), - _make_float2(zero, p_src_cvt)); - case 3u: return _make_float3x3( - _make_float3(p_src_cvt, zero, zero), - _make_float3(zero, p_src_cvt, zero), - _make_float3(zero, zero, p_src_cvt)); - case 4u: return _make_float4x4( - _make_float4(p_src_cvt, zero, zero, zero), - _make_float4(zero, p_src_cvt, zero, zero), - _make_float4(zero, zero, p_src_cvt, zero), - _make_float4(zero, zero, zero, p_src_cvt)); - default: break; - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to matrix.", - src_type->description()); -} - -::llvm::Value *LLVMCodegen::_matrix_to_matrix(const Type *dst_type, const Type *src_type, ::llvm::Value *p_src) noexcept { - LUISA_ASSERT(src_type->is_matrix(), "Invalid source type: {}.", src_type->description()); - LUISA_ASSERT(dst_type->is_matrix(), "Invalid destination type: {}.", dst_type->description()); - LUISA_ASSERT(src_type->dimension() == dst_type->dimension(), "Invalid conversion from '{}' to '{}'.", - src_type->description(), dst_type->description()); - auto builder = _current_context()->builder.get(); - auto matrix_type = _create_type(dst_type); - auto zero = _create_stack_variable(_literal(0.f), "zero"); - auto one = _create_stack_variable(_literal(1.f), "one"); - switch (src_type->dimension()) { - case 2u: { - if (dst_type->dimension() == 2u) { return p_src; } - auto col_type = _create_type(Type::of()); - auto m0 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 0, "cast.matrix.to.matrix.m0.addr"), - "cast.matrix.to.matrix.m0"); - auto m1 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 1, "cast.matrix.to.matrix.m1.addr"), - "cast.matrix.to.matrix.m1"); - auto m00 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(0u), "cast.matrix.to.matrix.m00"), - "cast.matrix.to.matrix.m00.addr"); - auto m01 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(1u), "cast.matrix.to.matrix.m01"), - "cast.matrix.to.matrix.m01.addr"); - auto m10 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(0u), "cast.matrix.to.matrix.m10"), - "cast.matrix.to.matrix.m10.addr"); - auto m11 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(1u), "cast.matrix.to.matrix.m11"), - "cast.matrix.to.matrix.m11.addr"); - if (dst_type->dimension() == 3u) { - return _make_float3x3( - _make_float3(m00, m01, zero), - _make_float3(m10, m11, zero), - _make_float3(zero, zero, one)); - } - if (dst_type->dimension() == 4u) { - return _make_float4x4( - _make_float4(m00, m01, zero, zero), - _make_float4(m10, m11, zero, zero), - _make_float4(zero, zero, one, zero), - _make_float4(zero, zero, zero, one)); - } - break; - } - case 3u: { - if (dst_type->dimension() == 3u) { return p_src; } - auto col_type = _create_type(Type::of()); - auto m0 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 0, "cast.matrix.to.matrix.m0.addr"), - "cast.matrix.to.matrix.m0"); - auto m1 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 1, "cast.matrix.to.matrix.m1.addr"), - "cast.matrix.to.matrix.m1"); - auto m2 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 2, "cast.matrix.to.matrix.m2.addr"), - "cast.matrix.to.matrix.m2"); - auto m00 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(0u), "cast.matrix.to.matrix.m00"), - "cast.matrix.to.matrix.m00.addr"); - auto m01 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(1u), "cast.matrix.to.matrix.m01"), - "cast.matrix.to.matrix.m01.addr"); - auto m02 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(2u), "cast.matrix.to.matrix.m02"), - "cast.matrix.to.matrix.m02.addr"); - auto m10 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(0u), "cast.matrix.to.matrix.m10"), - "cast.matrix.to.matrix.m10.addr"); - auto m11 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(1u), "cast.matrix.to.matrix.m11"), - "cast.matrix.to.matrix.m11.addr"); - auto m12 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(2u), "cast.matrix.to.matrix.m12"), - "cast.matrix.to.matrix.m12.addr"); - auto m20 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(0u), "cast.matrix.to.matrix.m20"), - "cast.matrix.to.matrix.m20.addr"); - auto m21 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(1u), "cast.matrix.to.matrix.m21"), - "cast.matrix.to.matrix.m21.addr"); - auto m22 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(2u), "cast.matrix.to.matrix.m22"), - "cast.matrix.to.matrix.m22.addr"); - if (dst_type->dimension() == 2u) { - return _make_float2x2( - _make_float2(m00, m01), - _make_float2(m10, m11)); - } - if (dst_type->dimension() == 4u) { - return _make_float4x4( - _make_float4(m00, m01, m02, zero), - _make_float4(m10, m11, m12, zero), - _make_float4(m20, m21, m22, zero), - _make_float4(zero, zero, zero, one)); - } - break; - } - case 4u: { - if (dst_type->dimension() == 4u) { return p_src; } - auto col_type = _create_type(Type::of()); - auto m0 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 0, "cast.matrix.to.matrix.m0.addr"), - "cast.matrix.to.matrix.m0"); - auto m1 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 1, "cast.matrix.to.matrix.m1.addr"), - "cast.matrix.to.matrix.m1"); - auto m2 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 2, "cast.matrix.to.matrix.m2.addr"), - "cast.matrix.to.matrix.m2"); - auto m3 = builder->CreateLoad( - col_type, builder->CreateStructGEP(matrix_type, p_src, 3, "cast.matrix.to.matrix.m3.addr"), - "cast.matrix.to.matrix.m3"); - auto m00 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(0u), "cast.matrix.to.matrix.m00"), - "cast.matrix.to.matrix.m00.addr"); - auto m01 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(1u), "cast.matrix.to.matrix.m01"), - "cast.matrix.to.matrix.m01.addr"); - auto m02 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(2u), "cast.matrix.to.matrix.m02"), - "cast.matrix.to.matrix.m02.addr"); - auto m03 = _create_stack_variable( - builder->CreateExtractElement(m0, static_cast(3u), "cast.matrix.to.matrix.m03"), - "cast.matrix.to.matrix.m03.addr"); - auto m10 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(0u), "cast.matrix.to.matrix.m10"), - "cast.matrix.to.matrix.m10.addr"); - auto m11 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(1u), "cast.matrix.to.matrix.m11"), - "cast.matrix.to.matrix.m11.addr"); - auto m12 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(2u), "cast.matrix.to.matrix.m12"), - "cast.matrix.to.matrix.m12.addr"); - auto m13 = _create_stack_variable( - builder->CreateExtractElement(m1, static_cast(3u), "cast.matrix.to.matrix.m13"), - "cast.matrix.to.matrix.m13.addr"); - auto m20 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(0u), "cast.matrix.to.matrix.m20"), - "cast.matrix.to.matrix.m20.addr"); - auto m21 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(1u), "cast.matrix.to.matrix.m21"), - "cast.matrix.to.matrix.m21.addr"); - auto m22 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(2u), "cast.matrix.to.matrix.m22"), - "cast.matrix.to.matrix.m22.addr"); - auto m23 = _create_stack_variable( - builder->CreateExtractElement(m2, static_cast(3u), "cast.matrix.to.matrix.m23"), - "cast.matrix.to.matrix.m23.addr"); - auto m30 = _create_stack_variable( - builder->CreateExtractElement(m3, static_cast(0u), "cast.matrix.to.matrix.m30"), - "cast.matrix.to.matrix.m30.addr"); - auto m31 = _create_stack_variable( - builder->CreateExtractElement(m3, static_cast(1u), "cast.matrix.to.matrix.m31"), - "cast.matrix.to.matrix.m31.addr"); - auto m32 = _create_stack_variable( - builder->CreateExtractElement(m3, static_cast(2u), "cast.matrix.to.matrix.m32"), - "cast.matrix.to.matrix.m32.addr"); - auto m33 = _create_stack_variable( - builder->CreateExtractElement(m3, static_cast(3u), "cast.matrix.to.matrix.m33"), - "cast.matrix.to.matrix.m33.addr"); - if (dst_type->dimension() == 2u) { - return _make_float2x2( - _make_float2(m00, m01), - _make_float2(m10, m11)); - } - if (dst_type->dimension() == 3u) { - return _make_float3x3( - _make_float3(m00, m01, m02), - _make_float3(m10, m11, m12), - _make_float3(m20, m21, m22)); - } - break; - } - } - LUISA_ERROR_WITH_LOCATION("Invalid conversion: {} to matrix.", - src_type->description()); -} - -::llvm::Type *LLVMCodegen::_create_type(const Type *t) noexcept { - if (t == nullptr) { return ::llvm::Type::getVoidTy(_context); } - switch (t->tag()) { - case Type::Tag::BOOL: return ::llvm::Type::getInt8Ty(_context); - case Type::Tag::FLOAT: return ::llvm::Type::getFloatTy(_context); - case Type::Tag::INT: [[fallthrough]]; - case Type::Tag::UINT: return ::llvm::Type::getInt32Ty(_context); - case Type::Tag::VECTOR: return ::llvm::VectorType::get( - _create_type(t->element()), t->dimension(), false); - case Type::Tag::MATRIX: return ::llvm::ArrayType::get( - _create_type(Type::from(luisa::format( - "vector<{},{}>", t->element()->description(), t->dimension()))), - t->dimension()); - case Type::Tag::ARRAY: return ::llvm::ArrayType::get( - _create_type(t->element()), t->dimension()); - case Type::Tag::STRUCTURE: { - if (auto iter = _struct_types.find(t->hash()); iter != _struct_types.end()) { - return iter->second.type; - } - auto member_index = 0u; - luisa::vector<::llvm::Type *> field_types; - luisa::vector field_indices; - auto size = 0ul; - for (auto &member : t->members()) { - auto aligned_offset = luisa::align(size, member->alignment()); - if (aligned_offset > size) { - auto padding = ::llvm::ArrayType::get( - ::llvm::Type::getInt8Ty(_context), aligned_offset - size); - field_types.emplace_back(padding); - member_index++; - } - auto member_type = _create_type(member); - field_types.emplace_back(member_type); - field_indices.emplace_back(member_index++); - size = aligned_offset + member->size(); - } - if (t->size() > size) {// last padding - auto padding = ::llvm::ArrayType::get( - ::llvm::Type::getInt8Ty(_context), t->size() - size); - field_types.emplace_back(padding); - } - ::llvm::ArrayRef<::llvm::Type *> fields_ref{field_types.data(), field_types.size()}; - auto struct_type = ::llvm::StructType::get(_context, fields_ref); - _struct_types.emplace(t->hash(), LLVMStruct{struct_type, std::move(field_indices)}); - return struct_type; - } - case Type::Tag::BUFFER: return ::llvm::PointerType::get(_create_type(t->element()), 0); - case Type::Tag::TEXTURE: return ::llvm::StructType::get( - ::llvm::Type::getInt64Ty(_context), ::llvm::Type::getInt64Ty(_context)); - case Type::Tag::BINDLESS_ARRAY: return _bindless_item_type()->getPointerTo(); - case Type::Tag::ACCEL: return ::llvm::StructType::get( - ::llvm::Type::getInt64Ty(_context), - _create_type(Type::of())->getPointerTo()); - } - LUISA_ERROR_WITH_LOCATION("Invalid type: {}.", t->description()); -} - -::llvm::Type *LLVMCodegen::_bindless_item_type() noexcept { - return ::llvm::StructType::get( - ::llvm::Type::getInt8PtrTy(_context), - _bindless_texture_type()->getPointerTo(), - _bindless_texture_type()->getPointerTo(), - ::llvm::Type::getInt32Ty(_context), - ::llvm::Type::getInt32Ty(_context)); -} - -::llvm::Type *LLVMCodegen::_bindless_texture_type() noexcept { - return ::llvm::StructType::get( - ::llvm::Type::getInt64Ty(_context), - ::llvm::FixedVectorType::get(::llvm::Type::getInt16Ty(_context), 4)); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_codegen_value.cpp b/src/backends/fallback/llvm_codegen_value.cpp deleted file mode 100644 index 9cacc7ed6..000000000 --- a/src/backends/fallback/llvm_codegen_value.cpp +++ /dev/null @@ -1,361 +0,0 @@ -// -// Created by Mike Smith on 2022/5/23. -// - -#pragma clang diagnostic push -#pragma ide diagnostic ignored "cppcoreguidelines-pro-type-static-cast-downcast" - -#include - -#pragma clang diagnostic push -#pragma ide diagnostic ignored "cppcoreguidelines-pro-type-static-cast-downcast" - -namespace luisa::compute::fallback { - -::llvm::Value *LLVMCodegen::_literal(int x) noexcept { - return ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x); -} - -::llvm::Value *LLVMCodegen::_literal(uint x) noexcept { - return ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x); -} - -::llvm::Value *LLVMCodegen::_literal(bool x) noexcept { - return ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x)); -} - -::llvm::Value *LLVMCodegen::_literal(float x) noexcept { - return ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x); -} - -::llvm::Value *LLVMCodegen::_literal(int2 x) noexcept { - return _literal(make_uint2(x)); -} - -::llvm::Value *LLVMCodegen::_literal(uint2 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.x), - ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.y)}); -} - -::llvm::Value *LLVMCodegen::_literal(bool2 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.x)), - ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.y))}); -} - -::llvm::Value *LLVMCodegen::_literal(float2 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.x), - ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.y)}); -} - -::llvm::Value *LLVMCodegen::_literal(int3 x) noexcept { - return _literal(make_uint3(x)); -} - -::llvm::Value *LLVMCodegen::_literal(uint3 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.x), - ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.y), - ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.z)}); -} - -::llvm::Value *LLVMCodegen::_literal(bool3 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.x)), - ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.y)), - ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.z))}); -} - -::llvm::Value *LLVMCodegen::_literal(float3 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.x), - ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.y), - ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.z)}); -} - -::llvm::Value *LLVMCodegen::_literal(int4 x) noexcept { - return _literal(make_uint4(x)); -} - -::llvm::Value *LLVMCodegen::_literal(uint4 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.x), - ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.y), - ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.z), - ::llvm::ConstantInt::get(::llvm::Type::getInt32Ty(_context), x.w)}); -} - -::llvm::Value *LLVMCodegen::_literal(bool4 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.x)), - ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.y)), - ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.z)), - ::llvm::ConstantInt::get(::llvm::Type::getInt8Ty(_context), - static_cast(x.w))}); -} - -::llvm::Value *LLVMCodegen::_literal(float4 x) noexcept { - return ::llvm::ConstantVector::get({::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.x), - ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.y), - ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.z), - ::llvm::ConstantFP::get(::llvm::Type::getFloatTy(_context), x.w)}); -} - -::llvm::Value *LLVMCodegen::_literal(float2x2 x) noexcept { - return ::llvm::ConstantStruct::get( - static_cast<::llvm::StructType *>(_create_type(Type::of())), - static_cast<::llvm::Constant *>(_literal(x[0])), - static_cast<::llvm::Constant *>(_literal(x[1]))); -} - -::llvm::Value *LLVMCodegen::_literal(float3x3 x) noexcept { - return ::llvm::ConstantStruct::get( - static_cast<::llvm::StructType *>(_create_type(Type::of())), - static_cast<::llvm::Constant *>(_literal(x[0])), - static_cast<::llvm::Constant *>(_literal(x[1])), - static_cast<::llvm::Constant *>(_literal(x[2]))); -} - -::llvm::Value *LLVMCodegen::_literal(float4x4 x) noexcept { - return ::llvm::ConstantStruct::get( - static_cast<::llvm::StructType *>(_create_type(Type::of())), - static_cast<::llvm::Constant *>(_literal(x[0])), - static_cast<::llvm::Constant *>(_literal(x[1])), - static_cast<::llvm::Constant *>(_literal(x[2])), - static_cast<::llvm::Constant *>(_literal(x[3]))); -} - -::llvm::Value *LLVMCodegen::_create_alloca(::llvm::Type *t, luisa::string_view name) noexcept { - auto ctx = _current_context(); - auto p = ctx->builder->CreateAlloca(t, nullptr, ::llvm::StringRef{name.data(), name.size()}); - p->setAlignment(::llvm::Align{16u}); - return p; -} - -::llvm::Value *LLVMCodegen::_create_stack_variable(::llvm::Value *x, luisa::string_view name) noexcept { - auto builder = _current_context()->builder.get(); - auto t = x->getType(); - if (t->isIntegerTy(1)) { - // special handling for int1 - return _create_stack_variable( - builder->CreateZExt(x, builder->getInt8Ty(), "bit_to_bool"), name); - } - if (t->isVectorTy() && static_cast<::llvm::VectorType *>(t)->getElementType()->isIntegerTy(1)) { - // special handling for int1 vector - auto dim = static_cast<::llvm::VectorType *>(t)->getElementCount(); - auto dst_type = ::llvm::VectorType::get(builder->getInt8Ty(), dim); - return _create_stack_variable(builder->CreateZExt(x, dst_type, "bit_to_bool"), name); - } - auto p = _create_alloca(t, name); - builder->CreateStore(x, p); - return p; -} - -::llvm::Value *LLVMCodegen::_create_constant(ConstantData c) noexcept { - auto key = c.hash(); - if (auto iter = _constants.find(key); iter != _constants.end()) { - return iter->second; - } - auto value = luisa::visit( - [this](auto s) noexcept { - std::vector<::llvm::Constant *> elements; - elements.reserve(s.size()); - for (auto x : s) { elements.push_back(static_cast<::llvm::Constant *>(_literal(x))); } - using T = std::remove_cvref_t; - auto array_type = ::llvm::ArrayType::get( - _create_type(Type::of()), static_cast(elements.size())); - return ::llvm::ConstantArray::get(array_type, elements); - }, - c.view()); - auto name = luisa::format("constant_{:016x}", key); - _module->getOrInsertGlobal(::llvm::StringRef{name.data(), name.size()}, value->getType()); - auto global = _module->getNamedGlobal(::llvm::StringRef{name.data(), name.size()}); - global->setConstant(true); - global->setLinkage(::llvm::GlobalValue::InternalLinkage); - global->setInitializer(value); - global->setUnnamedAddr(::llvm::GlobalValue::UnnamedAddr::Global); - return _constants.emplace(key, static_cast<::llvm::Value *>(global)).first->second; -} - -::llvm::Value *LLVMCodegen::_make_int2(::llvm::Value *px, ::llvm::Value *py) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getInt32Ty(), px, "v.x"); - auto y = b->CreateLoad(b->getInt32Ty(), py, "v.y"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "int2.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "int2.xy"); - return _create_stack_variable(v, "int2.addr"); -} - -::llvm::Value *LLVMCodegen::_make_int3(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getInt32Ty(), px, "v.x"); - auto y = b->CreateLoad(b->getInt32Ty(), py, "v.y"); - auto z = b->CreateLoad(b->getInt32Ty(), pz, "v.z"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "int3.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "int3.xy"); - v = b->CreateInsertElement(v, z, static_cast(2u), "int3.xyz"); - return _create_stack_variable(v, "int3.addr"); -} - -::llvm::Value *LLVMCodegen::_make_int4(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz, ::llvm::Value *pw) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getInt32Ty(), px, "v.x"); - auto y = b->CreateLoad(b->getInt32Ty(), py, "v.y"); - auto z = b->CreateLoad(b->getInt32Ty(), pz, "v.z"); - auto w = b->CreateLoad(b->getInt32Ty(), pw, "v.w"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "int4.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "int4.xy"); - v = b->CreateInsertElement(v, z, static_cast(2u), "int4.xyz"); - v = b->CreateInsertElement(v, w, static_cast(3u), "int4.xyzw"); - return _create_stack_variable(v, "int4.addr"); -} - -::llvm::Value *LLVMCodegen::_make_bool2(::llvm::Value *px, ::llvm::Value *py) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getInt8Ty(), px, "v.x"); - auto y = b->CreateLoad(b->getInt8Ty(), py, "v.y"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "bool2.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "bool2.xy"); - return _create_stack_variable(v, "bool2.addr"); -} - -::llvm::Value *LLVMCodegen::_make_bool3(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getInt8Ty(), px, "v.x"); - auto y = b->CreateLoad(b->getInt8Ty(), py, "v.y"); - auto z = b->CreateLoad(b->getInt8Ty(), pz, "v.z"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "bool3.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "bool3.xy"); - v = b->CreateInsertElement(v, z, static_cast(2u), "bool3.xyz"); - return _create_stack_variable(v, "bool3.addr"); -} - -::llvm::Value *LLVMCodegen::_make_bool4(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz, ::llvm::Value *pw) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getInt8Ty(), px, "v.x"); - auto y = b->CreateLoad(b->getInt8Ty(), py, "v.y"); - auto z = b->CreateLoad(b->getInt8Ty(), pz, "v.z"); - auto w = b->CreateLoad(b->getInt8Ty(), pw, "v.w"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "bool4.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "bool4.xy"); - v = b->CreateInsertElement(v, z, static_cast(2u), "bool4.xyz"); - v = b->CreateInsertElement(v, w, static_cast(3u), "bool4.xyzw"); - return _create_stack_variable(v, "bool4.addr"); -} - -::llvm::Value *LLVMCodegen::_make_float2(::llvm::Value *px, ::llvm::Value *py) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getFloatTy(), px, "v.x"); - auto y = b->CreateLoad(b->getFloatTy(), py, "v.y"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "float2.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "float2.xy"); - return _create_stack_variable(v, "float2.addr"); -} - -::llvm::Value *LLVMCodegen::_make_float3(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getFloatTy(), px, "v.x"); - auto y = b->CreateLoad(b->getFloatTy(), py, "v.y"); - auto z = b->CreateLoad(b->getFloatTy(), pz, "v.z"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "float3.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "float3.xy"); - v = b->CreateInsertElement(v, z, static_cast(2u), "float3.xyz"); - return _create_stack_variable(v, "float3.addr"); -} - -::llvm::Value *LLVMCodegen::_make_float4(::llvm::Value *px, ::llvm::Value *py, ::llvm::Value *pz, ::llvm::Value *pw) noexcept { - auto b = _current_context()->builder.get(); - auto x = b->CreateLoad(b->getFloatTy(), px, "v.x"); - auto y = b->CreateLoad(b->getFloatTy(), py, "v.y"); - auto z = b->CreateLoad(b->getFloatTy(), pz, "v.z"); - auto w = b->CreateLoad(b->getFloatTy(), pw, "v.w"); - auto v = static_cast<::llvm::Value *>(::llvm::UndefValue::get( - _create_type(Type::of()))); - v = b->CreateInsertElement(v, x, static_cast(0u), "float4.x"); - v = b->CreateInsertElement(v, y, static_cast(1u), "float4.xy"); - v = b->CreateInsertElement(v, z, static_cast(2u), "float4.xyz"); - v = b->CreateInsertElement(v, w, static_cast(3u), "float4.xyzw"); - return _create_stack_variable(v, "float4.addr"); -} - -::llvm::Value *LLVMCodegen::_make_float2x2(::llvm::Value *p0, ::llvm::Value *p1) noexcept { - auto b = _current_context()->builder.get(); - auto t = _create_type(Type::of()); - auto m = _create_alloca(t, "float2x2.addr"); - auto m0 = b->CreateStructGEP(t, m, 0u, "float2x2.a"); - auto m1 = b->CreateStructGEP(t, m, 1u, "float2x2.b"); - auto col_type = _create_type(Type::of()); - b->CreateStore(b->CreateLoad(col_type, p0, "m.a"), m0); - b->CreateStore(b->CreateLoad(col_type, p1, "m.b"), m1); - return m; -} - -::llvm::Value *LLVMCodegen::_make_float3x3(::llvm::Value *p0, ::llvm::Value *p1, ::llvm::Value *p2) noexcept { - auto b = _current_context()->builder.get(); - auto t = _create_type(Type::of()); - auto m = _create_alloca(t, "float3x3.addr"); - auto m0 = b->CreateStructGEP(t, m, 0u, "float3x3.a"); - auto m1 = b->CreateStructGEP(t, m, 1u, "float3x3.b"); - auto m2 = b->CreateStructGEP(t, m, 2u, "float3x3.c"); - auto col_type = _create_type(Type::of()); - b->CreateStore(b->CreateLoad(col_type, p0, "m.a"), m0); - b->CreateStore(b->CreateLoad(col_type, p1, "m.b"), m1); - b->CreateStore(b->CreateLoad(col_type, p2, "m.c"), m2); - return m; -} - -::llvm::Value *LLVMCodegen::_make_float4x4(::llvm::Value *p0, ::llvm::Value *p1, ::llvm::Value *p2, ::llvm::Value *p3) noexcept { - auto b = _current_context()->builder.get(); - auto t = _create_type(Type::of()); - auto m = _create_alloca(t, "float4x4.addr"); - auto m0 = b->CreateStructGEP(t, m, 0u, "float4x4.a"); - auto m1 = b->CreateStructGEP(t, m, 1u, "float4x4.b"); - auto m2 = b->CreateStructGEP(t, m, 2u, "float4x4.c"); - auto m3 = b->CreateStructGEP(t, m, 3u, "float4x4.d"); - auto col_type = _create_type(Type::of()); - b->CreateStore(b->CreateLoad(col_type, p0, "m.a"), m0); - b->CreateStore(b->CreateLoad(col_type, p1, "m.b"), m1); - b->CreateStore(b->CreateLoad(col_type, p2, "m.c"), m2); - b->CreateStore(b->CreateLoad(col_type, p3, "m.d"), m3); - return m; -} - -luisa::string LLVMCodegen::_variable_name(Variable v) const noexcept { - switch (v.tag()) { - case Variable::Tag::LOCAL: return luisa::format("v{}.local", v.uid()); - case Variable::Tag::SHARED: return luisa::format("v{}.shared", v.uid()); - case Variable::Tag::REFERENCE: return luisa::format("v{}.ref", v.uid()); - case Variable::Tag::BUFFER: return luisa::format("v{}.buffer", v.uid()); - case Variable::Tag::TEXTURE: return luisa::format("v{}.texture", v.uid()); - case Variable::Tag::BINDLESS_ARRAY: return luisa::format("v{}.bindless", v.uid()); - case Variable::Tag::ACCEL: return luisa::format("v{}.accel", v.uid()); - case Variable::Tag::THREAD_ID: return "thread.id"; - case Variable::Tag::BLOCK_ID: return "block.id"; - case Variable::Tag::DISPATCH_ID: return "dispatch.id"; - case Variable::Tag::DISPATCH_SIZE: return "dispatch.size"; - } - LUISA_ERROR_WITH_LOCATION("Invalid variable."); -} - -}// namespace luisa::compute::llvm - -#pragma clang diagnostic pop diff --git a/src/backends/fallback/llvm_event.cpp b/src/backends/fallback/llvm_event.cpp deleted file mode 100644 index 47c81b476..000000000 --- a/src/backends/fallback/llvm_event.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// -// Created by Mike Smith on 2022/2/7. -// - -#include - -namespace luisa::compute::fallback { - -void LLVMEvent::wait() const noexcept { - if (auto f = future(); f.valid()) [[likely]] { - f.wait(); - } -} - -void LLVMEvent::signal(std::shared_future future) noexcept { - std::scoped_lock lock{_mutex}; - _future = std::move(future); -} - -std::shared_future LLVMEvent::future() const noexcept { - std::scoped_lock lock{_mutex}; - return _future; -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_event.h b/src/backends/fallback/llvm_event.h deleted file mode 100644 index 17ba4efc8..000000000 --- a/src/backends/fallback/llvm_event.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Created by Mike Smith on 2022/2/7. -// - -#pragma once - -#include - -namespace luisa::compute::fallback { - -class LLVMEvent { - -private: - mutable std::mutex _mutex; - std::shared_future _future; - -public: - void wait() const noexcept; - void signal(std::shared_future future) noexcept; - [[nodiscard]] std::shared_future future() const noexcept; -}; - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_shader.cpp b/src/backends/fallback/llvm_shader.cpp deleted file mode 100644 index f8099cca3..000000000 --- a/src/backends/fallback/llvm_shader.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// -// Created by Mike Smith on 2022/2/11. -// - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#define LC_LLVM_CODEGEN_MAGIC ".codegen.0004" - -namespace luisa::compute::fallback { - -LLVMShader::LLVMShader(LLVMDevice *device, Function func) noexcept - : _name{luisa::format("kernel.{:016x}", func.hash())} { - // compute argument offsets - _argument_offsets.reserve(func.arguments().size()); - for (auto &&arg : func.arguments()) { - auto aligned_offset = luisa::align(_argument_buffer_size, 16u); - _argument_offsets.emplace(arg.uid(), aligned_offset); - if (arg.type()->is_buffer()) { - _argument_buffer_size = aligned_offset + LLVMCodegen::buffer_handle_size; - } else if (arg.type()->is_texture()) { - _argument_buffer_size = aligned_offset + LLVMCodegen::texture_handle_size; - } else if (arg.type()->is_accel()) { - _argument_buffer_size = aligned_offset + LLVMCodegen::accel_handle_size; - } else if (arg.type()->is_bindless_array()) { - _argument_buffer_size = aligned_offset + LLVMCodegen::bindless_array_handle_size; - } else { - _argument_buffer_size = aligned_offset + arg.type()->size(); - } - } - _argument_buffer_size = luisa::align(_argument_buffer_size, 16u); - _argument_buffer_size += 16u; // (trampoline, callbacks) - _argument_buffer_size = luisa::align(_argument_buffer_size, 16u); - - for (auto s : func.shared_variables()) { - _shared_memory_size = luisa::align(_shared_memory_size, s.type()->alignment()); - _shared_memory_size += s.type()->size(); - } - _shared_memory_size = luisa::align(_shared_memory_size, 16u); - - LUISA_VERBOSE_WITH_LOCATION( - "Generating kernel '{}' with {} bytes of " - "argument buffer and {} bytes of shared memory.", - _name, _argument_buffer_size, _shared_memory_size); - - auto jit = device->jit(); - auto main_name = luisa::format("kernel.{:016x}.main", func.hash()); - auto lookup_kernel_entry = [name = luisa::string_view{main_name}, jit, device]() noexcept -> ::llvm::Expected { - std::scoped_lock lock{device->jit_mutex()}; - auto addr = jit->lookup(::llvm::StringRef{name.data(), name.size()}); - if (addr) { -#if LLVM_VERSION_MAJOR >= 15 - return addr->toPtr(); -#else - return reinterpret_cast(addr->getAddress()); -#endif - } - return addr.takeError(); - }; - - // try to find the kernel entry in the JIT - if (auto entry = lookup_kernel_entry()) { - LUISA_INFO("Found kernel '{}' in JIT.", _name); - _kernel_entry = *entry; - return; - } - - // codegen - std::error_code ec; - auto context = std::make_unique<::llvm::LLVMContext>(); - context->setDiagnosticHandlerCallBack([](const ::llvm::DiagnosticInfo &info, void *) noexcept { - if (auto severity = info.getSeverity(); - severity == ::llvm::DS_Error || severity == ::llvm::DS_Warning) { - ::llvm::DiagnosticPrinterRawOStream printer{::llvm::errs()}; - info.print(printer); - printer << '\n'; - } - }); - auto file_path = device->context().cache_directory() / - luisa::format("kernel.llvm.{:016x}.opt.{:016x}.ll", - func.hash(), hash_value(LLVM_VERSION_STRING LC_LLVM_CODEGEN_MAGIC)); - ::llvm::SMDiagnostic diagnostic; - auto module = ::llvm::parseIRFile(file_path.string(), diagnostic, *context); - Clock clk; - auto machine = device->target_machine(); - if (module == nullptr) { - LUISA_WARNING_WITH_LOCATION( - "Failed to load LLVM IR from cache: {}.", - diagnostic.getMessage().str()); - LLVMCodegen codegen{*context}; - module = codegen.emit(func); - LUISA_INFO("Codegen: {} ms.", clk.toc()); - if (::llvm::verifyModule(*module, &::llvm::errs())) { - auto error_file_path = device->context().cache_directory() / - luisa::format("kernel.llvm.{:016x}.ll", func.hash()); - auto error_file_path_string = file_path.string(); - ::llvm::raw_fd_ostream file{error_file_path_string, ec}; - if (ec) { - LUISA_WARNING_WITH_LOCATION( - "Failed to create file '{}': {}.", - error_file_path_string, ec.message()); - } else { - LUISA_INFO("Saving LLVM kernel to '{}'.", - error_file_path_string); - module->print(file, nullptr); - } - LUISA_ERROR_WITH_LOCATION("Failed to verify module."); - } - module->setDataLayout(machine->createDataLayout()); - module->setTargetTriple(machine->getTargetTriple().str()); - - // optimize with the new pass manager - ::llvm::LoopAnalysisManager LAM; - ::llvm::FunctionAnalysisManager FAM; - ::llvm::CGSCCAnalysisManager CGAM; - ::llvm::ModuleAnalysisManager MAM; - ::llvm::PipelineTuningOptions PTO; - PTO.LoopInterleaving = true; - PTO.LoopVectorization = true; - PTO.SLPVectorization = true; - PTO.LoopUnrolling = true; - PTO.MergeFunctions = true; - ::llvm::PassBuilder PB{machine, PTO}; - FAM.registerPass([&] { return PB.buildDefaultAAPipeline(); }); - PB.registerModuleAnalyses(MAM); - PB.registerCGSCCAnalyses(CGAM); - PB.registerFunctionAnalyses(FAM); - PB.registerLoopAnalyses(LAM); - PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); - machine->registerPassBuilderCallbacks(PB); - clk.tic(); - auto MPM = PB.buildPerModuleDefaultPipeline(::llvm::OptimizationLevel::O3); - MPM.run(*module, MAM); - LUISA_INFO("Optimize: {} ms.", clk.toc()); - if (::llvm::verifyModule(*module, &::llvm::errs())) { - LUISA_ERROR_WITH_LOCATION("Failed to verify module."); - } - - // dump optimized ir for debugging - { - auto file_path_string = file_path.string(); - ::llvm::raw_fd_ostream file_opt{file_path_string, ec}; - if (ec) { - LUISA_ERROR_WITH_LOCATION( - "Failed to create file '{}': {}.", - file_path_string, ec.message()); - } else { - LUISA_INFO("Saving optimized LLVM kernel to '{}'.", - file_path_string); - module->print(file_opt, nullptr); - } - } - } - - // compile to machine code - clk.tic(); - if (auto error = [jit, device, m = ::llvm::orc::ThreadSafeModule{std::move(module), std::move(context)}]() mutable noexcept { - std::scoped_lock lock{device->jit_mutex()}; - return jit->addIRModule(std::move(m)); - }()) { - ::llvm::handleAllErrors(std::move(error), [](const ::llvm::ErrorInfoBase &err) { - LUISA_WARNING_WITH_LOCATION("LLJIT::addIRModule(): {}", err.message()); - }); - } - if (auto entry = lookup_kernel_entry()) { - _kernel_entry = *entry; - } else { - ::llvm::handleAllErrors(entry.takeError(), [](const ::llvm::ErrorInfoBase &err) { - LUISA_WARNING_WITH_LOCATION("LLJIT::lookup(): {}", err.message()); - }); - LUISA_ERROR_WITH_LOCATION("Failed to find kernel entry."); - } - LUISA_INFO("Compile: {} ms.", clk.toc()); -} - -LLVMShader::~LLVMShader() noexcept = default; - -size_t LLVMShader::argument_offset(uint uid) const noexcept { - if (auto iter = _argument_offsets.find(uid); - iter != _argument_offsets.cend()) [[likely]] { - return iter->second; - } - LUISA_ERROR_WITH_LOCATION("Invalid argument uid {}.", uid); -} - -void LLVMShader::invoke(const std::byte *args, std::byte *shared_mem, - uint3 dispatch_size, uint3 block_id) const noexcept { - _kernel_entry(args, shared_mem, - dispatch_size.x, dispatch_size.y, dispatch_size.z, - block_id.x, block_id.y, block_id.z); -} - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/llvm_shader.h b/src/backends/fallback/llvm_shader.h deleted file mode 100644 index 4f585b4fa..000000000 --- a/src/backends/fallback/llvm_shader.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Created by Mike Smith on 2022/2/11. -// - -#pragma once - -#include -#include -#include -#include - -namespace llvm { -class LLVMContext; -class Module; -class ExecutionEngine; -}// namespace llvm - -namespace luisa::compute::fallback { - -using luisa::compute::detail::FunctionBuilder; -using CpuCallback = FunctionBuilder::CpuCallback; - -class LLVMDevice; - -class LLVMShader { - -public: - using kernel_entry_t = void(const std::byte *, std::byte *, uint, uint, uint, uint, uint, uint); - -private: - luisa::string _name; - luisa::unordered_map _argument_offsets; - kernel_entry_t *_kernel_entry{nullptr}; - size_t _argument_buffer_size{}; - luisa::vector _callbacks; - size_t _shared_memory_size{}; - -public: - LLVMShader(LLVMDevice *device, Function func) noexcept; - ~LLVMShader() noexcept; - [[nodiscard]] auto argument_buffer_size() const noexcept { return _argument_buffer_size; } - [[nodiscard]] auto shared_memory_size() const noexcept { return _shared_memory_size; } - [[nodiscard]] size_t argument_offset(uint uid) const noexcept; - [[nodiscard]] auto callbacks() const noexcept { return _callbacks.data(); } - void invoke(const std::byte *args, std::byte *shared_memory, - uint3 dispatch_size, uint3 block_id) const noexcept; -}; - -}// namespace luisa::compute::llvm diff --git a/src/backends/fallback/thread_pool.cpp b/src/backends/fallback/thread_pool.cpp deleted file mode 100644 index f6500a6c3..000000000 --- a/src/backends/fallback/thread_pool.cpp +++ /dev/null @@ -1,178 +0,0 @@ -// -// Created by Mike Smith on 2021/12/23. -// - -#include -#include -#include -#include -#include - -#if (!defined(__clang_major__) || __clang_major__ >= 14) && defined(__cpp_lib_barrier) -#define LUISA_COMPUTE_USE_STD_BARRIER -#endif - -#ifdef LUISA_COMPUTE_USE_STD_BARRIER -#include -#endif - -#include -#include -#include -#include "thread_pool.h" - -namespace luisa { - -namespace detail { - -[[nodiscard]] static auto &is_worker_thread() noexcept { - static thread_local auto is_worker = false; - return is_worker; -} - -[[nodiscard]] static auto &worker_thread_index() noexcept { - static thread_local auto id = 0u; - return id; -} - -static inline void check_not_in_worker_thread(std::string_view f) noexcept { - if (is_worker_thread()) [[unlikely]] { - std::ostringstream oss; - oss << std::this_thread::get_id(); - LUISA_ERROR_WITH_LOCATION( - "Invoking ThreadPool::{}() " - "from worker thread {}.", - f, oss.str()); - } -} - -}// namespace detail - -#ifdef LUISA_COMPUTE_USE_STD_BARRIER -struct Barrier : std::barrier<> { - using std::barrier<>::barrier; -}; -#else -// reference: https://github.com/yohhoy/yamc/blob/master/include/yamc_barrier.hpp -class Barrier { -private: - uint _n; - uint _counter; - uint _phase; - std::condition_variable _cv; - std::mutex _mutex; - -public: - explicit Barrier(uint n) noexcept - : _n{n}, _counter{n}, _phase{0u} {} - void arrive_and_wait() noexcept { - std::unique_lock lock{_mutex}; - auto arrive_phase = _phase; - if (--_counter == 0u) { - _counter = _n; - _phase++; - _cv.notify_all(); - } - while (_phase <= arrive_phase) { - _cv.wait(lock); - } - } -}; -#endif - -struct ThreadPool::Impl { - luisa::vector threads; - luisa::queue> tasks; - std::mutex mutex; - luisa::unique_ptr synchronize_barrier; - luisa::unique_ptr dispatch_barrier; - std::condition_variable cv; - bool should_stop{false}; -}; - -ThreadPool::ThreadPool(size_t num_threads) noexcept - : _impl{luisa::make_unique()} { - if (num_threads == 0u) { - num_threads = std::max( - std::thread::hardware_concurrency(), 1u); - } - _impl->dispatch_barrier = luisa::make_unique(num_threads); - _impl->synchronize_barrier = luisa::make_unique(num_threads + 1u /* main thread */); - _impl->threads.reserve(num_threads); - for (auto i = 0u; i < num_threads; i++) { - _impl->threads.emplace_back(std::thread{[this, i] { - detail::is_worker_thread() = true; - detail::worker_thread_index() = i; - for (;;) { - std::unique_lock lock{_impl->mutex}; - _impl->cv.wait(lock, [this] { return !_impl->tasks.empty() || _impl->should_stop; }); - if (_impl->should_stop && _impl->tasks.empty()) [[unlikely]] { break; } - auto task = std::move(_impl->tasks.front()); - _impl->tasks.pop(); - lock.unlock(); - task(); - } - }}); - } - LUISA_INFO("Created thread pool with {} thread{}.", - num_threads, num_threads == 1u ? "" : "s"); -} - -void ThreadPool::barrier() noexcept { - detail::check_not_in_worker_thread("barrier"); - _dispatch_all([this] { _impl->dispatch_barrier->arrive_and_wait(); }); -} - -void ThreadPool::synchronize() noexcept { - detail::check_not_in_worker_thread("synchronize"); - while (task_count() != 0u) { - _dispatch_all([this] { _impl->synchronize_barrier->arrive_and_wait(); }); - _impl->synchronize_barrier->arrive_and_wait(); - } -} - -void ThreadPool::_dispatch(luisa::function task) noexcept { - { - std::scoped_lock lock{_impl->mutex}; - _impl->tasks.emplace(std::move(task)); - } - _impl->cv.notify_one(); -} - -void ThreadPool::_dispatch_all(luisa::function task, size_t max_threads) noexcept { - { - std::scoped_lock lock{_impl->mutex}; - for (auto i = 0u; i < std::min(_impl->threads.size(), max_threads) - 1u; i++) { - _impl->tasks.emplace(task); - } - _impl->tasks.emplace(std::move(task)); - } - _impl->cv.notify_all(); -} - -ThreadPool::~ThreadPool() noexcept { - { - std::scoped_lock lock{_impl->mutex}; - _impl->should_stop = true; - } - _impl->cv.notify_all(); - for (auto &&t : _impl->threads) { t.join(); } -} - -ThreadPool &ThreadPool::global() noexcept { - static ThreadPool pool; - return pool; -} - -uint ThreadPool::size() const noexcept { - return static_cast(_impl->threads.size()); -} - -uint ThreadPool::worker_thread_index() noexcept { - LUISA_ASSERT(detail::is_worker_thread(), - "ThreadPool::worker_thread_index() " - "called in non-worker thread."); - return detail::worker_thread_index(); -} - -}// namespace luisa diff --git a/src/backends/fallback/thread_pool.h b/src/backends/fallback/thread_pool.h deleted file mode 100644 index c6004eff7..000000000 --- a/src/backends/fallback/thread_pool.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// Created by Mike Smith on 2021/12/23. -// - -#pragma once - -#include -#include -#include - -#include -#include -#include - -namespace luisa { - -/// Thread pool class -class ThreadPool { - -public: - class Impl; - -private: - luisa::unique_ptr _impl; - std::atomic_uint _task_count; - -private: - void _dispatch(luisa::function task) noexcept; - void _dispatch_all(luisa::function task, size_t max_threads = std::numeric_limits::max()) noexcept; - -public: - /// Create a thread pool with num_threads threads - explicit ThreadPool(size_t num_threads = 0u) noexcept; - ~ThreadPool() noexcept; - ThreadPool(ThreadPool &&) noexcept = delete; - ThreadPool(const ThreadPool &) noexcept = delete; - ThreadPool &operator=(ThreadPool &&) noexcept = delete; - ThreadPool &operator=(const ThreadPool &) noexcept = delete; - /// Return global static ThreadPool instance - [[nodiscard]] static ThreadPool &global() noexcept; - [[nodiscard]] static uint worker_thread_index() noexcept; - -public: - /// Barrier all threads - void barrier() noexcept; - /// Synchronize all threads - void synchronize() noexcept; - /// Return size of threads - [[nodiscard]] uint size() const noexcept; - /// Return count of tasks - [[nodiscard]] uint task_count() const noexcept { return _task_count.load(); } - - /// Run a function async and return future of return value - template - requires std::is_invocable_v - auto async(F f) noexcept { - using R = std::invoke_result_t; - auto promise = luisa::make_shared>( - std::allocator_arg, luisa::allocator{}); - auto future = promise->get_future().share(); - _task_count.fetch_add(1u); - _dispatch([promise = std::move(promise), future, f = std::move(f), this]() mutable noexcept { - if constexpr (std::same_as) { - f(); - promise->set_value(); - } else { - promise->set_value(f()); - } - _task_count.fetch_sub(1u); - }); - return future; - } - - /// Run a function parallel - template - requires std::is_invocable_v - void parallel(uint n, F f) noexcept { - if (n > 0u) { - _task_count.fetch_add(1u); - auto counter = luisa::make_shared(0u); - _dispatch_all( - [=, this]() mutable noexcept { - auto i = 0u; - while ((i = counter->fetch_add(1u)) < n) { f(i); } - if (i == n) { _task_count.fetch_sub(1u); } - }, - n); - } - } - - /// Run a function 2D parallel - template - requires std::is_invocable_v - void parallel(uint nx, uint ny, F f) noexcept { - parallel(nx * ny, [=, f = std::move(f)](auto i) mutable noexcept { - f(i % nx, i / nx); - }); - } - - /// Run a function 3D parallel - template - requires std::is_invocable_v - void parallel(uint nx, uint ny, uint nz, F f) noexcept { - parallel(nx * ny * nz, [=, f = std::move(f)](auto i) mutable noexcept { - f(i % nx, i / nx % ny, i / nx / ny); - }); - } -}; - -/// Run a function async using global ThreadPool -template - requires std::is_invocable_v -inline auto async(F &&f) noexcept { - return ThreadPool::global().async(std::forward(f)); -} - -}// namespace luisa diff --git a/src/backends/validation/CMakeLists.txt b/src/backends/validation/CMakeLists.txt index 3f8064666..1250d930f 100644 --- a/src/backends/validation/CMakeLists.txt +++ b/src/backends/validation/CMakeLists.txt @@ -25,9 +25,7 @@ set(LUISA_COMPUTE_VALIDATION_SOURCES add_library(luisa-compute-validation-layer MODULE ${LUISA_COMPUTE_VALIDATION_SOURCES}) target_link_libraries(luisa-compute-validation-layer PRIVATE - luisa-compute-runtime - luisa-compute-gui - luisa-compute-vstl) + luisa-compute-runtime luisa-compute-gui) target_precompile_headers(luisa-compute-validation-layer PRIVATE pch.h) add_dependencies(luisa-compute-backends luisa-compute-validation-layer) set_target_properties(luisa-compute-validation-layer PROPERTIES diff --git a/src/clangcxx/CMakeLists.txt b/src/clangcxx/CMakeLists.txt index 05cfbb374..bd27fc4c0 100644 --- a/src/clangcxx/CMakeLists.txt +++ b/src/clangcxx/CMakeLists.txt @@ -4,9 +4,7 @@ if (LUISA_COMPUTE_ENABLE_CLANG_CXX) find_package(Clang REQUIRED CONFIG) add_library(luisa-compute-clangcxx SHARED ${LUISA_CLANGCXX_SOURCES}) target_link_libraries(luisa-compute-clangcxx PUBLIC - luisa-compute-ast - luisa-compute-runtime - luisa-compute-vstl) + luisa-compute-ast luisa-compute-runtime) target_precompile_headers(luisa-compute-clangcxx PRIVATE src/pch.h) set_target_properties(luisa-compute-clangcxx PROPERTIES UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD} diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index f24596e5c..fac0cfe79 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -27,6 +27,7 @@ target_link_libraries(luisa-compute-core ${CMAKE_DL_LIBS} $<$:dbghelp> PRIVATE + EASTL-object luisa-compute-ext-marl luisa-compute-ext-yyjson) diff --git a/src/ext/CMakeLists.txt b/src/ext/CMakeLists.txt index 52106e80f..f4f1cf189 100644 --- a/src/ext/CMakeLists.txt +++ b/src/ext/CMakeLists.txt @@ -64,23 +64,24 @@ luisa_compute_install_extension(xxhash HEADER_FILES xxHash/xxhash.h HEADER_DESTINATION xxHash) +# stb add_subdirectory(stb) -target_link_libraries(luisa-compute-ext INTERFACE stb) -set_target_properties(stb PROPERTIES OUTPUT_NAME lc-ext-stb) -luisa_compute_install_extension(stb HEADER_FILES +target_link_libraries(luisa-compute-ext INTERFACE luisa-compute-ext-stb-interface) + +luisa_compute_install_extension(luisa-compute-ext-stb-interface HEADER_FILES stb/stb/stb_image.h stb/stb/stb_image_resize2.h stb/stb/stb_image_write.h HEADER_DESTINATION stb) +# magic enum add_library(magic_enum INTERFACE) target_include_directories(magic_enum INTERFACE $) target_link_libraries(luisa-compute-ext INTERFACE magic_enum) luisa_compute_install_extension(magic_enum INCLUDE magic_enum/include/magic_enum) +# glfw if (LUISA_COMPUTE_ENABLE_GUI) - - # glfw if (UNIX AND NOT APPLE) set(GLFW_BUILD_WAYLAND ${LUISA_COMPUTE_ENABLE_WAYLAND} CACHE BOOL "" FORCE) endif () @@ -93,58 +94,19 @@ if (LUISA_COMPUTE_ENABLE_GUI) set_target_properties(glfw PROPERTIES OUTPUT_NAME lc-ext-glfw) target_link_libraries(luisa-compute-ext INTERFACE glfw) luisa_compute_install_extension(glfw) - - # imgui - set(LUISA_IMGUI_SOURCES - imgui/imgui.cpp - imgui/imgui_demo.cpp - imgui/imgui_draw.cpp - imgui/imgui_tables.cpp - imgui/imgui_widgets.cpp - imgui/backends/imgui_impl_glfw.cpp) - set(LUISA_IMGUI_HEADERS - imgui/imconfig.h - imgui/imgui.h - imgui/imgui_internal.h - imgui/imstb_rectpack.h - imgui/imstb_textedit.h - imgui/imstb_truetype.h - imgui/backends/imgui_impl_glfw.h) - add_library(luisa-compute-ext-imgui SHARED - ${LUISA_IMGUI_SOURCES} - ${LUISA_IMGUI_HEADERS}) - set_target_properties(luisa-compute-ext-imgui PROPERTIES - UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD} - OUTPUT_NAME lc-ext-imgui - PUBLIC_HEADER "${LUISA_IMGUI_HEADERS}") - target_compile_definitions(luisa-compute-ext-imgui PUBLIC GLFW_INCLUDE_NONE) - if (WIN32) - target_compile_definitions(luisa-compute-ext-imgui PRIVATE - "IMGUI_API=__declspec(dllexport)" - "IMGUI_IMPL_API=__declspec(dllexport)") - endif () - target_link_libraries(luisa-compute-ext-imgui PUBLIC glfw) - target_include_directories(luisa-compute-ext-imgui PUBLIC - $ - $) - luisa_compute_install_extension(luisa-compute-ext-imgui) - target_link_libraries(luisa-compute-ext INTERFACE luisa-compute-ext-imgui) - endif () add_subdirectory(EASTL) -set_target_properties(EASTL PROPERTIES - UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD} - OUTPUT_NAME lc-ext-eastl) -target_link_libraries(luisa-compute-ext INTERFACE EASTL) -luisa_compute_install_extension(EASTL INCLUDE EASTL/include/EASTL) +set_target_properties(EASTL-object PROPERTIES UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD}) +target_link_libraries(luisa-compute-ext INTERFACE EASTL-interface) +luisa_compute_install_extension(EASTL-interface INCLUDE EASTL/include/EASTL) luisa_compute_install_extension(EABase INCLUDE EASTL/packages/EABase/include/Common/EABase) -target_compile_features(EASTL PUBLIC cxx_std_20) +target_compile_features(EASTL-interface INTERFACE cxx_std_20) # silence deprecation warnings from EASTL for now (we will fix them when the upstream does) -target_compile_definitions(EASTL PUBLIC EASTL_DEPRECATIONS_FOR_2024_APRIL=EA_DISABLED) +target_compile_definitions(EASTL-interface INTERFACE EASTL_DEPRECATIONS_FOR_2024_APRIL=EA_DISABLED) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0) - target_compile_options(EASTL PUBLIC -Wno-deprecated-builtins) + target_compile_options(EASTL-interface INTERFACE -Wno-deprecated-builtins) endif () add_library(half INTERFACE) @@ -205,6 +167,7 @@ target_compile_definitions(luisa-compute-ext-yyjson PRIVATE YYJSON_EXPORTS=1) add_library(luisa-compute-ext-marl-interface INTERFACE) target_include_directories(luisa-compute-ext-marl-interface INTERFACE $) +target_link_libraries(luisa-compute-ext-marl-interface INTERFACE EASTL-interface) target_compile_definitions(luisa-compute-ext-marl-interface INTERFACE MARL_DLL=1) target_link_libraries(luisa-compute-ext INTERFACE luisa-compute-ext-marl-interface) luisa_compute_install_extension(luisa-compute-ext-marl-interface INCLUDE marl/include/marl) @@ -217,7 +180,7 @@ file(GLOB LUISA_COMPUTE_MARL_CXX_SOURCES CONFIGURE_DEPENDS marl/src/*.cpp) list(FILTER LUISA_COMPUTE_MARL_CXX_SOURCES EXCLUDE REGEX ".*build.marl.cpp$") add_library(luisa-compute-ext-marl OBJECT ${LUISA_COMPUTE_MARL_HEADERS} ${LUISA_COMPUTE_MARL_CXX_SOURCES}) target_compile_definitions(luisa-compute-ext-marl PRIVATE MARL_BUILDING_DLL=1) -target_link_libraries(luisa-compute-ext-marl PRIVATE EASTL luisa-compute-ext-marl-interface) +target_link_libraries(luisa-compute-ext-marl PRIVATE EASTL-interface luisa-compute-ext-marl-interface) set_target_properties(luisa-compute-ext-marl PROPERTIES UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD}) if (NOT WIN32) enable_language(ASM) diff --git a/src/ext/stb/CMakeLists.txt b/src/ext/stb/CMakeLists.txt index 5fbd5f6a2..258945583 100644 --- a/src/ext/stb/CMakeLists.txt +++ b/src/ext/stb/CMakeLists.txt @@ -1,2 +1,7 @@ -add_library(stb SHARED stb.c) -target_include_directories(stb PUBLIC $) +add_library(luisa-compute-ext-stb-interface INTERFACE) +target_include_directories(luisa-compute-ext-stb-interface INTERFACE + $) + +add_library(luisa-compute-ext-stb OBJECT stb.c) +target_link_libraries(luisa-compute-ext-stb PRIVATE luisa-compute-ext-stb-interface) +set_target_properties(luisa-compute-ext-stb PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index b573ffb30..bed14451a 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,19 +1,47 @@ if (LUISA_COMPUTE_ENABLE_GUI) + + # imgui + set(LUISA_IMGUI_SOURCES + ../ext/imgui/imgui.cpp + ../ext/imgui/imgui_demo.cpp + ../ext/imgui/imgui_draw.cpp + ../ext/imgui/imgui_tables.cpp + ../ext/imgui/imgui_widgets.cpp + ../ext/imgui/backends/imgui_impl_glfw.cpp) + + set(LUISA_IMGUI_HEADERS + ../ext/imgui/imconfig.h + ../ext/imgui/imgui.h + ../ext/imgui/imgui_internal.h + ../ext/imgui/imstb_rectpack.h + ../ext/imgui/imstb_textedit.h + ../ext/imgui/imstb_truetype.h + ../ext/imgui/backends/imgui_impl_glfw.h) + set(LUISA_COMPUTE_GUI_SOURCES framerate.cpp imgui_window.cpp - window.cpp) + window.cpp + ${LUISA_IMGUI_SOURCES}) + add_library(luisa-compute-gui SHARED ${LUISA_COMPUTE_GUI_SOURCES}) - target_link_libraries(luisa-compute-gui PUBLIC - luisa-compute-runtime - luisa-compute-dsl) + target_include_directories(luisa-compute-gui PUBLIC + $ + $) + target_link_libraries(luisa-compute-gui PUBLIC luisa-compute-runtime luisa-compute-dsl) target_compile_definitions(luisa-compute-gui PRIVATE LC_GUI_EXPORT_DLL - PUBLIC LUISA_ENABLE_GUI=1) + PUBLIC LUISA_ENABLE_GUI=1 GLFW_INCLUDE_NONE) + if (WIN32) + target_compile_definitions(luisa-compute-gui PRIVATE + "IMGUI_API=__declspec(dllexport)" + "IMGUI_IMPL_API=__declspec(dllexport)") + endif () set_target_properties(luisa-compute-gui PROPERTIES UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD} OUTPUT_NAME lc-gui) luisa_compute_install(gui SOURCES ${LUISA_COMPUTE_GUI_SOURCES}) + install(FILES ${LUISA_IMGUI_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/luisa/ext) else () add_library(luisa-compute-gui INTERFACE) luisa_compute_install(gui) diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 0b01bd030..105650fba 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -35,7 +35,8 @@ struct WindowImpl : public Window::IWindowImpl { uint64_t window_handle{}; WindowImpl(uint2 size, char const *name, bool resizable, bool full_screen) noexcept { - glfwInit(); + static std::once_flag once_flag; + std::call_once(once_flag, [] { glfwInit(); }); glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); glfwWindowHint(GLFW_RESIZABLE, resizable); window = glfwCreateWindow(size.x, size.y, name, full_screen ? glfwGetPrimaryMonitor() : nullptr, nullptr); @@ -103,7 +104,7 @@ struct WindowImpl : public Window::IWindowImpl { } ~WindowImpl() noexcept override { glfwDestroyWindow(window); - glfwTerminate(); + // glfwTerminate(); } [[nodiscard]] uint64_t native_display() const noexcept { #if defined(LUISA_PLATFORM_WINDOWS) || defined(LUISA_PLATFORM_APPLE) diff --git a/src/ir_v2/CMakeLists.txt b/src/ir_v2/CMakeLists.txt deleted file mode 100644 index 440ad431e..000000000 --- a/src/ir_v2/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -set(LUISA_COMPUTE_IR_V2_SOURCES - ir.cpp - ir_v2_api.cpp - ir_v2_defs.cpp - ir_v2_bindings.cpp - analysis/usedef.cpp - transform/dce.cpp - transform/ssa.cpp) - -add_library(luisa-compute-ir-v2 SHARED ${LUISA_COMPUTE_IR_V2_SOURCES}) -target_link_libraries(luisa-compute-ir-v2 PUBLIC luisa-compute-ast) -target_compile_definitions(luisa-compute-ir-v2 PRIVATE LC_IR_EXPORT_DLL=1) -luisa_compute_install(ir-v2 SOURCES ${LUISA_COMPUTE_IR_V2_SOURCES}) - -set_target_properties(luisa-compute-ir-v2 PROPERTIES - UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD} - OUTPUT_NAME lc-ir-v2) \ No newline at end of file diff --git a/src/ir_v2/analysis/usedef.cpp b/src/ir_v2/analysis/usedef.cpp deleted file mode 100644 index 72d0e263b..000000000 --- a/src/ir_v2/analysis/usedef.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include -namespace luisa::compute::ir_v2 { -UseDefAnalysis::UseDefAnalysis(Module &module) : module{module} { -} -void UseDefAnalysis::visit_block(const BasicBlock *block) noexcept { - block->for_each([&](Node *n) { - visit_node(n); - }); -} -void UseDefAnalysis::visit_node(const Node *n) noexcept { - auto inst = &n->inst; - auto tag = inst->tag(); - switch (tag) { - case Instruction::Tag::ACCEL: [[fallthrough]]; - case Instruction::Tag::BUFFER: [[fallthrough]]; - case Instruction::Tag::TEXTURE2D: [[fallthrough]]; - case Instruction::Tag::TEXTURE3D: [[fallthrough]]; - case Instruction::Tag::BINDLESS_ARRAY: [[fallthrough]]; - case Instruction::Tag::UNIFORM: [[fallthrough]]; - case Instruction::Tag::ARGUMENT: [[fallthrough]]; - case Instruction::Tag::BREAK: [[fallthrough]]; - case Instruction::Tag::CONTINUE: [[fallthrough]]; - case Instruction::Tag::RETURN: [[fallthrough]]; - case Instruction::Tag::SHARED: - this->add_to_root(n); - break; - case Instruction::Tag::CALL: { - auto call = inst->as(); - auto f = &call->func; - if (f->has_side_effects()) { - this->add_to_root(n); - } - auto &args = call->args; - for (auto arg : args) { - _used_by[arg].insert(n); - } - } break; - case Instruction::Tag::UPDATE: { - // this is very special - this->add_to_root(n); - } break; - case Instruction::Tag::IF: { - auto if_ = inst->as(); - this->add_to_root(if_->cond); - this->add_to_root(n); - this->visit_block(if_->true_branch); - this->visit_block(if_->false_branch); - } break; - case Instruction::Tag::GENERIC_LOOP: { - auto loop = inst->as(); - this->add_to_root(n); - this->add_to_root(loop->cond); - this->visit_block(loop->prepare); - this->visit_block(loop->body); - this->visit_block(loop->update); - } - case Instruction::Tag::CONSTANT: break; - case InstructionTag::PHI: { - auto phi = inst->as(); - this->add_to_root(n); - for (auto &i : phi->incomings) { - _used_by[i.value].insert(n); - } - } break; - - default: - LUISA_ERROR_WITH_LOCATION("unhandled instruction: {}", (int)tag); - break; - } -} -void UseDefAnalysis::run() noexcept { - this->_used_by.clear(); - for (auto arg : module.args) { - this->add_to_root(arg); - } - this->visit_block(module.entry); -} -}// namespace luisa::compute::ir_v2 \ No newline at end of file diff --git a/src/ir_v2/ir.cpp b/src/ir_v2/ir.cpp deleted file mode 100644 index 2c0d87ad4..000000000 --- a/src/ir_v2/ir.cpp +++ /dev/null @@ -1,320 +0,0 @@ -#include -#include -#include -namespace luisa::compute::ir_v2 { -bool Node::is_lvalue() const noexcept { - if (is_local()) return true; - if (is_gep()) return true; - if (is_argument()) { - auto arg = inst.as(); - return !arg->by_value; - } - return false; -} -BasicBlock::BasicBlock(Pool &pool) noexcept { - _first = pool.alloc(Instruction(InstructionTag::BASIC_BLOCK_SENTINEL), Type::of()); - _last = pool.alloc(Instruction(InstructionTag::BASIC_BLOCK_SENTINEL), Type::of()); - _first->next = _last; - _last->prev = _first; - _first->scope = this; - _last->scope = this; -} -Node *IrBuilder::call(Func f, luisa::span args_span, const Type *ty) noexcept { - auto args = luisa::vector{(Node *)args_span.begin(), (Node *)args_span.end()}; - auto call = Instruction(CallInst(std::move(f), args)); - return append(_pool->alloc(std::move(call), ty)); -} - -Node *IrBuilder::if_(const Node *cond, const BasicBlock *true_branch, const BasicBlock *false_branch) noexcept { - auto if_ = Instruction(IfInst(const_cast(cond), true_branch, false_branch)); - return append(_pool->alloc(std::move(if_), Type::of())); -} -Node *IrBuilder::generic_loop(const BasicBlock *perpare, const Node *cond, const BasicBlock *body, const BasicBlock *after) noexcept { - auto loop = Instruction(GenericLoopInst(perpare, const_cast(cond), body, after)); - return append(_pool->alloc(std::move(loop), Type::of())); -} -Node *IrBuilder::switch_(const Node *value, luisa::span cases, const BasicBlock *default_branch) noexcept { - luisa::vector cases_{cases.begin(), cases.end()}; - auto switch_ = Instruction(SwitchInst(const_cast(value), cases_, default_branch)); - return append(_pool->alloc(std::move(switch_), Type::of())); -} - -void validate(Module &module) noexcept { - luisa::unordered_set defined; - for (auto arg : module.args) { - defined.insert(arg); - } - if (module.kind() == Module::Kind::KERNEL) { - auto kernel = static_cast(&module); - // for (auto &c : kernel->captures) { - // defined.insert(c.node); - // } - } - struct Visitor { - std::function visit_node; - std::function visit_block; - }; - Visitor vis; - auto check = [&](const Node *n) { - if (!n) { return; } - if (defined.contains(n)) { return; } - LUISA_ERROR_WITH_LOCATION("use of undefined node: {}", (void *)n); - }; - vis.visit_node = [&](const Node *node) { - auto &inst = node->inst; - auto tag = inst.tag(); - switch (tag) { - case InstructionTag::IF: { - auto if_ = inst.as(); - check(if_->cond); - vis.visit_block(if_->true_branch); - vis.visit_block(if_->false_branch); - } break; - case InstructionTag::LOCAL: { - auto local = inst.as(); - check(local->init); - } break; - case InstructionTag::GENERIC_LOOP: { - auto loop = inst.as(); - vis.visit_block(loop->prepare); - check(loop->cond); - vis.visit_block(loop->body); - vis.visit_block(loop->update); - } break; - case InstructionTag::CALL: { - auto call = inst.as(); - for (auto arg : call->args) { - check(arg); - } - } break; - case InstructionTag::SWITCH: { - auto switch_ = inst.as(); - check(switch_->value); - for (auto &c : switch_->cases) { - vis.visit_block(c.block); - } - vis.visit_block(switch_->default_); - } break; - case InstructionTag::RETURN: { - auto ret = inst.as(); - check(ret->value); - } break; - default: - break; - } - defined.insert(node); - }; - vis.visit_block = [&](const BasicBlock *bb) { - bb->for_each([&](Node *n) { - vis.visit_node(n); - }); - }; -} -class IrDebugDump { - StringScratch _scratch; - luisa::unordered_map _node_id; - luisa::unordered_map _block_id; - size_t _indent = 0; - void def(const Node *node, luisa::string name = "") { - LUISA_ASSERT(!_node_id.contains(node), "node already defined"); - if (name.empty()) { - name = luisa::format("${}", _node_id.size()); - } else { - name = luisa::format("{}", name); - } - _node_id[node] = name; - } - - luisa::string gen(const Node *node) { - auto it = _node_id.find(node); - if (it != _node_id.end()) { return it->second; } - LUISA_ERROR_WITH_LOCATION("node {} not defined", (void *)node); - } - luisa::string gen(const BasicBlock *bb) { - auto it = _block_id.find(bb); - if (it != _block_id.end()) { return it->second; } - LUISA_ERROR_WITH_LOCATION("block {} not defined", (void *)bb); - } - luisa::string gen_ty(const Type *ty) { - return nullptr == ty ? luisa::string("void") : luisa::string(ty->description()); - } - void gen_block_def(const BasicBlock *bb) { - LUISA_ASSERT(!_block_id.contains(bb), "block already defined"); - auto label = luisa::format("$BB_{}:", _block_id.size()); - _block_id[bb] = label; - writeln("{}: begin", label); - with_indent([&] { - bb->for_each([&](Node *n) { - def(n); - gen_def(n); - }); - }); - writeln("{}: end", label); - } - void gen_def(const Node *node) { - auto &inst = node->inst; - auto ty = node->ty; - auto tag = inst.tag(); - switch (tag) { - case InstructionTag::ARGUMENT: { - auto arg = inst.as(); - writeln("{}, by_value:{}, ty: {}, ", gen(node), gen_ty(ty), arg->by_value); - break; - } - case InstructionTag::BUFFER: [[fallthrough]]; - case InstructionTag::TEXTURE2D: [[fallthrough]]; - case InstructionTag::TEXTURE3D: [[fallthrough]]; - case InstructionTag::BINDLESS_ARRAY: [[fallthrough]]; - case InstructionTag::ACCEL: [[fallthrough]]; - case InstructionTag::SHARED: [[fallthrough]]; - case InstructionTag::UNIFORM: { - writeln("{}, ty: {}, ", gen(node), gen_ty(ty)); - break; - } - case InstructionTag::BREAK: { - (void)gen(node); - writeln("break"); - break; - } - case InstructionTag::CONTINUE: { - (void)gen(node); - writeln("continue"); - break; - } - case InstructionTag::RETURN: { - (void)gen(node); - auto ret = inst.as(); - writeln("return {}", gen(ret->value)); - break; - } - case InstructionTag::IF: { - auto if_ = inst.as(); - auto cond = gen(if_->cond); - writeln("if {}", cond); - gen_block_def(if_->true_branch); - if (if_->false_branch) { - writeln("else"); - gen_block_def(if_->false_branch); - } - break; - } - case InstructionTag::SWITCH: { - auto sw = inst.as(); - auto value = gen(sw->value); - writeln("switch {} {{", value); - with_indent([&] { - for (auto &c : sw->cases) { - writeln("case {}=>", c.value); - gen_block_def(c.block); - } - writeln("default=>"); - gen_block_def(sw->default_); - }); - writeln("}"); - break; - } - case InstructionTag::GENERIC_LOOP: { - auto loop = inst.as(); - writeln("loop {{"); - with_indent([&] { - writeln("prepare=>"); - gen_block_def(loop->prepare); - writeln("break if !{}", gen(loop->cond)); - writeln("body=>"); - gen_block_def(loop->body); - writeln("update=>"); - gen_block_def(loop->update); - }); - writeln("}}"); - break; - } - case InstructionTag::RAY_QUERY: { - auto rq = inst.as(); - writeln("ray_query {}, ty: {} {{", gen(node), gen_ty(ty)); - with_indent([&] { - writeln("on_triangle_hit=>"); - gen_block_def(rq->on_triangle_hit); - writeln("on_procedural_hit=>"); - gen_block_def(rq->on_procedural_hit); - }); - writeln("}}"); - break; - } - case InstructionTag::CALL: { - auto call = inst.as(); - auto &func = call->func; - auto args_ = StringScratch(); - for (auto arg : call->args) { - if (!args_.empty()) { - args_ << ", "; - } - args_ << gen(arg); - } - writeln("{} = {}({}), ty: {}", gen(node), tag_name(func.tag()), args_.string_view(), gen_ty(ty)); - break; - } - case InstructionTag::CONSTANT: { - auto constant = inst.as(); - auto value = StringScratch(); - for (auto i = 0u; i < constant->value.size(); i++) { - if (i != 0) { - value << ", "; - } - value << constant->value[i]; - } - writeln("{} = Constant({}), ty: {}", gen(node), value.string_view(), gen_ty(ty)); - break; - } - case InstructionTag::LOCAL: { - auto local = inst.as(); - writeln("{} = Local({}), ty: {}", gen(node), gen(local->init), gen_ty(ty)); - break; - } - case InstructionTag::UPDATE: { - auto update = inst.as(); - writeln("store {}, {}", gen(node), gen(update->value), gen_ty(ty)); - break; - } - default: - LUISA_ERROR_WITH_LOCATION("unsupported instruction tag: {}", tag_name(tag)); - } - } - void _dump(const Module &module) noexcept { - _scratch << "module at " << (size_t)(void *)&module << " {\n"; - if (module.kind() == Module::Kind::KERNEL) { - auto &km = static_cast(module); - writeln("block size: {}", km.block_size); - } - with_indent([&] { - for (auto i = 0; i < module.args.size(); i++) { - auto arg = module.args[i]; - def(arg, luisa::format("$arg_{}", i)); - gen_def(arg); - } - gen_block_def(module.entry); - }); - _scratch << "}"; - } - template - requires std::invocable - void with_indent(F &&f) { - _indent++; - f(); - _indent--; - } - template - void writeln(Fmt &&fmt, Args &&...args) noexcept { - for (size_t i = 0; i < _indent; i++) { _scratch << " "; } - _scratch << luisa::format(std::forward(fmt), std::forward(args)...) << "\n"; - } -public: - static luisa::string dump(Module &module) noexcept { - IrDebugDump d; - d._dump(module); - return d._scratch.string(); - } -}; -luisa::string dump_human_readable(Module &module) noexcept { - return IrDebugDump::dump(module); -} -}// namespace luisa::compute::ir_v2 \ No newline at end of file diff --git a/src/ir_v2/ir_v2_api.cpp b/src/ir_v2/ir_v2_api.cpp deleted file mode 100644 index 208cd7388..000000000 --- a/src/ir_v2/ir_v2_api.cpp +++ /dev/null @@ -1,1239 +0,0 @@ -#include -#include -#include -namespace luisa::compute::ir_v2 { -static AssumeFn *Func_as_AssumeFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static UnreachableFn *Func_as_UnreachableFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static AssertFn *Func_as_AssertFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicExchangeFn *Func_as_BindlessAtomicExchangeFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicCompareExchangeFn *Func_as_BindlessAtomicCompareExchangeFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchAddFn *Func_as_BindlessAtomicFetchAddFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchSubFn *Func_as_BindlessAtomicFetchSubFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchAndFn *Func_as_BindlessAtomicFetchAndFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchOrFn *Func_as_BindlessAtomicFetchOrFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchXorFn *Func_as_BindlessAtomicFetchXorFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchMinFn *Func_as_BindlessAtomicFetchMinFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static BindlessAtomicFetchMaxFn *Func_as_BindlessAtomicFetchMaxFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static CallableFn *Func_as_CallableFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static CpuExtFn *Func_as_CpuExtFn(CFunc *self) { - return reinterpret_cast(self)->as(); -} -static RustyFuncTag Func_tag(const CFunc *self) { - return static_cast(reinterpret_cast(self)->tag()); -} -static Slice AssumeFn_msg(AssumeFn *self) { - return self->msg; -} -static void AssumeFn_set_msg(AssumeFn *self, Slice value) { - self->msg = value.to_string(); -} -static CFunc AssumeFn_new(Pool *pool, Slice msg) { - auto data = luisa::unique_ptr(); - AssumeFn_set_msg(data.get(), msg); - auto tag = AssumeFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static Slice UnreachableFn_msg(UnreachableFn *self) { - return self->msg; -} -static void UnreachableFn_set_msg(UnreachableFn *self, Slice value) { - self->msg = value.to_string(); -} -static CFunc UnreachableFn_new(Pool *pool, Slice msg) { - auto data = luisa::unique_ptr(); - UnreachableFn_set_msg(data.get(), msg); - auto tag = UnreachableFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static Slice AssertFn_msg(AssertFn *self) { - return self->msg; -} -static void AssertFn_set_msg(AssertFn *self, Slice value) { - self->msg = value.to_string(); -} -static CFunc AssertFn_new(Pool *pool, Slice msg) { - auto data = luisa::unique_ptr(); - AssertFn_set_msg(data.get(), msg); - auto tag = AssertFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicExchangeFn_ty(BindlessAtomicExchangeFn *self) { - return self->ty; -} -static void BindlessAtomicExchangeFn_set_ty(BindlessAtomicExchangeFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicExchangeFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicExchangeFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicExchangeFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicCompareExchangeFn_ty(BindlessAtomicCompareExchangeFn *self) { - return self->ty; -} -static void BindlessAtomicCompareExchangeFn_set_ty(BindlessAtomicCompareExchangeFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicCompareExchangeFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicCompareExchangeFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicCompareExchangeFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchAddFn_ty(BindlessAtomicFetchAddFn *self) { - return self->ty; -} -static void BindlessAtomicFetchAddFn_set_ty(BindlessAtomicFetchAddFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchAddFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchAddFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchAddFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchSubFn_ty(BindlessAtomicFetchSubFn *self) { - return self->ty; -} -static void BindlessAtomicFetchSubFn_set_ty(BindlessAtomicFetchSubFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchSubFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchSubFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchSubFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchAndFn_ty(BindlessAtomicFetchAndFn *self) { - return self->ty; -} -static void BindlessAtomicFetchAndFn_set_ty(BindlessAtomicFetchAndFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchAndFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchAndFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchAndFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchOrFn_ty(BindlessAtomicFetchOrFn *self) { - return self->ty; -} -static void BindlessAtomicFetchOrFn_set_ty(BindlessAtomicFetchOrFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchOrFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchOrFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchOrFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchXorFn_ty(BindlessAtomicFetchXorFn *self) { - return self->ty; -} -static void BindlessAtomicFetchXorFn_set_ty(BindlessAtomicFetchXorFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchXorFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchXorFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchXorFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchMinFn_ty(BindlessAtomicFetchMinFn *self) { - return self->ty; -} -static void BindlessAtomicFetchMinFn_set_ty(BindlessAtomicFetchMinFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchMinFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchMinFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchMinFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static const Type *BindlessAtomicFetchMaxFn_ty(BindlessAtomicFetchMaxFn *self) { - return self->ty; -} -static void BindlessAtomicFetchMaxFn_set_ty(BindlessAtomicFetchMaxFn *self, const Type *value) { - self->ty = value; -} -static CFunc BindlessAtomicFetchMaxFn_new(Pool *pool, const Type *ty) { - auto data = luisa::unique_ptr(); - BindlessAtomicFetchMaxFn_set_ty(data.get(), ty); - auto tag = BindlessAtomicFetchMaxFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static CallableModule *CallableFn_module(CallableFn *self) { - return self->module.get(); -} -static void CallableFn_set_module(CallableFn *self, CallableModule *value) { - self->module = luisa::static_pointer_castmodule)>::element_type>(value->shared_from_this()); -} -static CFunc CallableFn_new(Pool *pool, CallableModule *module) { - auto data = luisa::unique_ptr(); - CallableFn_set_module(data.get(), module); - auto tag = CallableFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static CpuExternFn *CpuExtFn_f(CpuExtFn *self) { - return self->f.get(); -} -static void CpuExtFn_set_f(CpuExtFn *self, CpuExternFn *value) { - self->f = luisa::static_pointer_castf)>::element_type>(value->shared_from_this()); -} -static CFunc CpuExtFn_new(Pool *pool, CpuExternFn *f) { - auto data = luisa::unique_ptr(); - CpuExtFn_set_f(data.get(), f); - auto tag = CpuExtFn::static_tag(); - auto cobj = CFunc{}; - auto obj = Func(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static CFunc Func_new(Pool *pool, RustyFuncTag tag) { - auto obj = Func(static_cast(tag)); - auto cobj = CFunc{}; - std::memcpy(&cobj, &obj, sizeof(CFunc)); - (void)obj.steal(); - return cobj; -} -static ArgumentInst *Instruction_as_ArgumentInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static ConstantInst *Instruction_as_ConstantInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static CallInst *Instruction_as_CallInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static PhiInst *Instruction_as_PhiInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static IfInst *Instruction_as_IfInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static GenericLoopInst *Instruction_as_GenericLoopInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static SwitchInst *Instruction_as_SwitchInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static LocalInst *Instruction_as_LocalInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static ReturnInst *Instruction_as_ReturnInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static PrintInst *Instruction_as_PrintInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static CommentInst *Instruction_as_CommentInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static UpdateInst *Instruction_as_UpdateInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static RayQueryInst *Instruction_as_RayQueryInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static RevAutodiffInst *Instruction_as_RevAutodiffInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static FwdAutodiffInst *Instruction_as_FwdAutodiffInst(CInstruction *self) { - return reinterpret_cast(self)->as(); -} -static RustyInstructionTag Instruction_tag(const CInstruction *self) { - return static_cast(reinterpret_cast(self)->tag()); -} -static bool ArgumentInst_by_value(ArgumentInst *self) { - return self->by_value; -} -static void ArgumentInst_set_by_value(ArgumentInst *self, bool value) { - self->by_value = value; -} -static CInstruction ArgumentInst_new(Pool *pool, bool by_value) { - auto data = luisa::unique_ptr(); - ArgumentInst_set_by_value(data.get(), by_value); - auto tag = ArgumentInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static const Type *ConstantInst_ty(ConstantInst *self) { - return self->ty; -} -static Slice ConstantInst_value(ConstantInst *self) { - return self->value; -} -static void ConstantInst_set_ty(ConstantInst *self, const Type *value) { - self->ty = value; -} -static void ConstantInst_set_value(ConstantInst *self, Slice value) { - self->value = value.to_vector(); -} -static CInstruction ConstantInst_new(Pool *pool, const Type *ty, Slice value) { - auto data = luisa::unique_ptr(); - ConstantInst_set_ty(data.get(), ty); - ConstantInst_set_value(data.get(), value); - auto tag = ConstantInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static const CFunc *CallInst_func(CallInst *self) { - return reinterpret_cast(&self->func); -} -static Slice CallInst_args(CallInst *self) { - return self->args; -} -static void CallInst_set_func(CallInst *self, CFunc value) { - self->func = std::move(*reinterpret_cast(&value)); -} -static void CallInst_set_args(CallInst *self, Slice value) { - self->args = value.to_vector(); -} -static CInstruction CallInst_new(Pool *pool, CFunc func, Slice args) { - auto data = luisa::unique_ptr(); - CallInst_set_func(data.get(), func); - CallInst_set_args(data.get(), args); - auto tag = CallInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Slice PhiInst_incomings(PhiInst *self) { - return self->incomings; -} -static void PhiInst_set_incomings(PhiInst *self, Slice value) { - self->incomings = value.to_vector(); -} -static CInstruction PhiInst_new(Pool *pool, Slice incomings) { - auto data = luisa::unique_ptr(); - PhiInst_set_incomings(data.get(), incomings); - auto tag = PhiInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Node *IfInst_cond(IfInst *self) { - return self->cond; -} -static const BasicBlock *IfInst_true_branch(IfInst *self) { - return self->true_branch; -} -static const BasicBlock *IfInst_false_branch(IfInst *self) { - return self->false_branch; -} -static void IfInst_set_cond(IfInst *self, Node *value) { - self->cond = value; -} -static void IfInst_set_true_branch(IfInst *self, const BasicBlock *value) { - self->true_branch = value; -} -static void IfInst_set_false_branch(IfInst *self, const BasicBlock *value) { - self->false_branch = value; -} -static CInstruction IfInst_new(Pool *pool, Node *cond, const BasicBlock *true_branch, const BasicBlock *false_branch) { - auto data = luisa::unique_ptr(); - IfInst_set_cond(data.get(), cond); - IfInst_set_true_branch(data.get(), true_branch); - IfInst_set_false_branch(data.get(), false_branch); - auto tag = IfInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static const BasicBlock *GenericLoopInst_prepare(GenericLoopInst *self) { - return self->prepare; -} -static Node *GenericLoopInst_cond(GenericLoopInst *self) { - return self->cond; -} -static const BasicBlock *GenericLoopInst_body(GenericLoopInst *self) { - return self->body; -} -static const BasicBlock *GenericLoopInst_update(GenericLoopInst *self) { - return self->update; -} -static void GenericLoopInst_set_prepare(GenericLoopInst *self, const BasicBlock *value) { - self->prepare = value; -} -static void GenericLoopInst_set_cond(GenericLoopInst *self, Node *value) { - self->cond = value; -} -static void GenericLoopInst_set_body(GenericLoopInst *self, const BasicBlock *value) { - self->body = value; -} -static void GenericLoopInst_set_update(GenericLoopInst *self, const BasicBlock *value) { - self->update = value; -} -static CInstruction GenericLoopInst_new(Pool *pool, const BasicBlock *prepare, Node *cond, const BasicBlock *body, const BasicBlock *update) { - auto data = luisa::unique_ptr(); - GenericLoopInst_set_prepare(data.get(), prepare); - GenericLoopInst_set_cond(data.get(), cond); - GenericLoopInst_set_body(data.get(), body); - GenericLoopInst_set_update(data.get(), update); - auto tag = GenericLoopInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Node *SwitchInst_value(SwitchInst *self) { - return self->value; -} -static Slice SwitchInst_cases(SwitchInst *self) { - return self->cases; -} -static const BasicBlock *SwitchInst_default_(SwitchInst *self) { - return self->default_; -} -static void SwitchInst_set_value(SwitchInst *self, Node *value) { - self->value = value; -} -static void SwitchInst_set_cases(SwitchInst *self, Slice value) { - self->cases = value.to_vector(); -} -static void SwitchInst_set_default_(SwitchInst *self, const BasicBlock *value) { - self->default_ = value; -} -static CInstruction SwitchInst_new(Pool *pool, Node *value, Slice cases, const BasicBlock *default_) { - auto data = luisa::unique_ptr(); - SwitchInst_set_value(data.get(), value); - SwitchInst_set_cases(data.get(), cases); - SwitchInst_set_default_(data.get(), default_); - auto tag = SwitchInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Node *LocalInst_init(LocalInst *self) { - return self->init; -} -static void LocalInst_set_init(LocalInst *self, Node *value) { - self->init = value; -} -static CInstruction LocalInst_new(Pool *pool, Node *init) { - auto data = luisa::unique_ptr(); - LocalInst_set_init(data.get(), init); - auto tag = LocalInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Node *ReturnInst_value(ReturnInst *self) { - return self->value; -} -static void ReturnInst_set_value(ReturnInst *self, Node *value) { - self->value = value; -} -static CInstruction ReturnInst_new(Pool *pool, Node *value) { - auto data = luisa::unique_ptr(); - ReturnInst_set_value(data.get(), value); - auto tag = ReturnInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Slice PrintInst_fmt(PrintInst *self) { - return self->fmt; -} -static Slice PrintInst_args(PrintInst *self) { - return self->args; -} -static void PrintInst_set_fmt(PrintInst *self, Slice value) { - self->fmt = value.to_string(); -} -static void PrintInst_set_args(PrintInst *self, Slice value) { - self->args = value.to_vector(); -} -static CInstruction PrintInst_new(Pool *pool, Slice fmt, Slice args) { - auto data = luisa::unique_ptr(); - PrintInst_set_fmt(data.get(), fmt); - PrintInst_set_args(data.get(), args); - auto tag = PrintInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Slice CommentInst_comment(CommentInst *self) { - return self->comment; -} -static void CommentInst_set_comment(CommentInst *self, Slice value) { - self->comment = value.to_string(); -} -static CInstruction CommentInst_new(Pool *pool, Slice comment) { - auto data = luisa::unique_ptr(); - CommentInst_set_comment(data.get(), comment); - auto tag = CommentInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Node *UpdateInst_var(UpdateInst *self) { - return self->var; -} -static Node *UpdateInst_value(UpdateInst *self) { - return self->value; -} -static void UpdateInst_set_var(UpdateInst *self, Node *value) { - self->var = value; -} -static void UpdateInst_set_value(UpdateInst *self, Node *value) { - self->value = value; -} -static CInstruction UpdateInst_new(Pool *pool, Node *var, Node *value) { - auto data = luisa::unique_ptr(); - UpdateInst_set_var(data.get(), var); - UpdateInst_set_value(data.get(), value); - auto tag = UpdateInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static Node *RayQueryInst_query(RayQueryInst *self) { - return self->query; -} -static const BasicBlock *RayQueryInst_on_triangle_hit(RayQueryInst *self) { - return self->on_triangle_hit; -} -static const BasicBlock *RayQueryInst_on_procedural_hit(RayQueryInst *self) { - return self->on_procedural_hit; -} -static void RayQueryInst_set_query(RayQueryInst *self, Node *value) { - self->query = value; -} -static void RayQueryInst_set_on_triangle_hit(RayQueryInst *self, const BasicBlock *value) { - self->on_triangle_hit = value; -} -static void RayQueryInst_set_on_procedural_hit(RayQueryInst *self, const BasicBlock *value) { - self->on_procedural_hit = value; -} -static CInstruction RayQueryInst_new(Pool *pool, Node *query, const BasicBlock *on_triangle_hit, const BasicBlock *on_procedural_hit) { - auto data = luisa::unique_ptr(); - RayQueryInst_set_query(data.get(), query); - RayQueryInst_set_on_triangle_hit(data.get(), on_triangle_hit); - RayQueryInst_set_on_procedural_hit(data.get(), on_procedural_hit); - auto tag = RayQueryInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static const BasicBlock *RevAutodiffInst_body(RevAutodiffInst *self) { - return self->body; -} -static void RevAutodiffInst_set_body(RevAutodiffInst *self, const BasicBlock *value) { - self->body = value; -} -static CInstruction RevAutodiffInst_new(Pool *pool, const BasicBlock *body) { - auto data = luisa::unique_ptr(); - RevAutodiffInst_set_body(data.get(), body); - auto tag = RevAutodiffInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static const BasicBlock *FwdAutodiffInst_body(FwdAutodiffInst *self) { - return self->body; -} -static void FwdAutodiffInst_set_body(FwdAutodiffInst *self, const BasicBlock *value) { - self->body = value; -} -static CInstruction FwdAutodiffInst_new(Pool *pool, const BasicBlock *body) { - auto data = luisa::unique_ptr(); - FwdAutodiffInst_set_body(data.get(), body); - auto tag = FwdAutodiffInst::static_tag(); - auto cobj = CInstruction{}; - auto obj = Instruction(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static CInstruction Instruction_new(Pool *pool, RustyInstructionTag tag) { - auto obj = Instruction(static_cast(tag)); - auto cobj = CInstruction{}; - std::memcpy(&cobj, &obj, sizeof(CInstruction)); - (void)obj.steal(); - return cobj; -} -static FuncMetadata _func_metadata[] = { - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {true}, - {false}, - {true}, - {true}, - {false}, - {true}, - {false}, - {false}, - {false}, - {false}, - {true}, - {true}, - {true}, - {true}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {true}, - {true}, - {true}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {false}, - {false}, - {true}, - {false}, - {false}, - {false}, - {true}, - {false}, - {false}, - {true}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {true}, - {false}, - {false}, - {false}, - {true}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {false}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {true}, - {false}, - {false}, - {false}, -}; -static_assert(sizeof(_func_metadata) == sizeof(FuncMetadata) * 215); -const FuncMetadata *func_metadata() { return _func_metadata; } -static BufferBinding *Binding_as_BufferBinding(CBinding *self) { - return reinterpret_cast(self)->as(); -} -static TextureBinding *Binding_as_TextureBinding(CBinding *self) { - return reinterpret_cast(self)->as(); -} -static BindlessArrayBinding *Binding_as_BindlessArrayBinding(CBinding *self) { - return reinterpret_cast(self)->as(); -} -static AccelBinding *Binding_as_AccelBinding(CBinding *self) { - return reinterpret_cast(self)->as(); -} -static RustyBindingTag Binding_tag(const CBinding *self) { - return static_cast(reinterpret_cast(self)->tag()); -} -static uint64_t BufferBinding_handle(BufferBinding *self) { - return self->handle; -} -static uint64_t BufferBinding_offset(BufferBinding *self) { - return self->offset; -} -static uint64_t BufferBinding_size(BufferBinding *self) { - return self->size; -} -static void BufferBinding_set_handle(BufferBinding *self, uint64_t value) { - self->handle = value; -} -static void BufferBinding_set_offset(BufferBinding *self, uint64_t value) { - self->offset = value; -} -static void BufferBinding_set_size(BufferBinding *self, uint64_t value) { - self->size = value; -} -static CBinding BufferBinding_new(Pool *pool, uint64_t handle, uint64_t offset, uint64_t size) { - auto data = luisa::unique_ptr(); - BufferBinding_set_handle(data.get(), handle); - BufferBinding_set_offset(data.get(), offset); - BufferBinding_set_size(data.get(), size); - auto tag = BufferBinding::static_tag(); - auto cobj = CBinding{}; - auto obj = Binding(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CBinding)); - (void)obj.steal(); - return cobj; -} -static uint64_t TextureBinding_handle(TextureBinding *self) { - return self->handle; -} -static uint64_t TextureBinding_level(TextureBinding *self) { - return self->level; -} -static void TextureBinding_set_handle(TextureBinding *self, uint64_t value) { - self->handle = value; -} -static void TextureBinding_set_level(TextureBinding *self, uint64_t value) { - self->level = value; -} -static CBinding TextureBinding_new(Pool *pool, uint64_t handle, uint64_t level) { - auto data = luisa::unique_ptr(); - TextureBinding_set_handle(data.get(), handle); - TextureBinding_set_level(data.get(), level); - auto tag = TextureBinding::static_tag(); - auto cobj = CBinding{}; - auto obj = Binding(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CBinding)); - (void)obj.steal(); - return cobj; -} -static uint64_t BindlessArrayBinding_handle(BindlessArrayBinding *self) { - return self->handle; -} -static void BindlessArrayBinding_set_handle(BindlessArrayBinding *self, uint64_t value) { - self->handle = value; -} -static CBinding BindlessArrayBinding_new(Pool *pool, uint64_t handle) { - auto data = luisa::unique_ptr(); - BindlessArrayBinding_set_handle(data.get(), handle); - auto tag = BindlessArrayBinding::static_tag(); - auto cobj = CBinding{}; - auto obj = Binding(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CBinding)); - (void)obj.steal(); - return cobj; -} -static uint64_t AccelBinding_handle(AccelBinding *self) { - return self->handle; -} -static void AccelBinding_set_handle(AccelBinding *self, uint64_t value) { - self->handle = value; -} -static CBinding AccelBinding_new(Pool *pool, uint64_t handle) { - auto data = luisa::unique_ptr(); - AccelBinding_set_handle(data.get(), handle); - auto tag = AccelBinding::static_tag(); - auto cobj = CBinding{}; - auto obj = Binding(tag, std::move(data)); - std::memcpy(&cobj, &obj, sizeof(CBinding)); - (void)obj.steal(); - return cobj; -} -static CBinding Binding_new(Pool *pool, RustyBindingTag tag) { - auto obj = Binding(static_cast(tag)); - auto cobj = CBinding{}; - std::memcpy(&cobj, &obj, sizeof(CBinding)); - (void)obj.steal(); - return cobj; -} -extern "C" LC_IR_API IrV2BindingTable lc_ir_v2_binding_table() { - return { - Func_as_AssumeFn, - Func_as_UnreachableFn, - Func_as_AssertFn, - Func_as_BindlessAtomicExchangeFn, - Func_as_BindlessAtomicCompareExchangeFn, - Func_as_BindlessAtomicFetchAddFn, - Func_as_BindlessAtomicFetchSubFn, - Func_as_BindlessAtomicFetchAndFn, - Func_as_BindlessAtomicFetchOrFn, - Func_as_BindlessAtomicFetchXorFn, - Func_as_BindlessAtomicFetchMinFn, - Func_as_BindlessAtomicFetchMaxFn, - Func_as_CallableFn, - Func_as_CpuExtFn, - Func_tag, - AssumeFn_msg, - AssumeFn_set_msg, - AssumeFn_new, - UnreachableFn_msg, - UnreachableFn_set_msg, - UnreachableFn_new, - AssertFn_msg, - AssertFn_set_msg, - AssertFn_new, - BindlessAtomicExchangeFn_ty, - BindlessAtomicExchangeFn_set_ty, - BindlessAtomicExchangeFn_new, - BindlessAtomicCompareExchangeFn_ty, - BindlessAtomicCompareExchangeFn_set_ty, - BindlessAtomicCompareExchangeFn_new, - BindlessAtomicFetchAddFn_ty, - BindlessAtomicFetchAddFn_set_ty, - BindlessAtomicFetchAddFn_new, - BindlessAtomicFetchSubFn_ty, - BindlessAtomicFetchSubFn_set_ty, - BindlessAtomicFetchSubFn_new, - BindlessAtomicFetchAndFn_ty, - BindlessAtomicFetchAndFn_set_ty, - BindlessAtomicFetchAndFn_new, - BindlessAtomicFetchOrFn_ty, - BindlessAtomicFetchOrFn_set_ty, - BindlessAtomicFetchOrFn_new, - BindlessAtomicFetchXorFn_ty, - BindlessAtomicFetchXorFn_set_ty, - BindlessAtomicFetchXorFn_new, - BindlessAtomicFetchMinFn_ty, - BindlessAtomicFetchMinFn_set_ty, - BindlessAtomicFetchMinFn_new, - BindlessAtomicFetchMaxFn_ty, - BindlessAtomicFetchMaxFn_set_ty, - BindlessAtomicFetchMaxFn_new, - CallableFn_module, - CallableFn_set_module, - CallableFn_new, - CpuExtFn_f, - CpuExtFn_set_f, - CpuExtFn_new, - Func_new, - Instruction_as_ArgumentInst, - Instruction_as_ConstantInst, - Instruction_as_CallInst, - Instruction_as_PhiInst, - Instruction_as_IfInst, - Instruction_as_GenericLoopInst, - Instruction_as_SwitchInst, - Instruction_as_LocalInst, - Instruction_as_ReturnInst, - Instruction_as_PrintInst, - Instruction_as_CommentInst, - Instruction_as_UpdateInst, - Instruction_as_RayQueryInst, - Instruction_as_RevAutodiffInst, - Instruction_as_FwdAutodiffInst, - Instruction_tag, - ArgumentInst_by_value, - ArgumentInst_set_by_value, - ArgumentInst_new, - ConstantInst_ty, - ConstantInst_value, - ConstantInst_set_ty, - ConstantInst_set_value, - ConstantInst_new, - CallInst_func, - CallInst_args, - CallInst_set_func, - CallInst_set_args, - CallInst_new, - PhiInst_incomings, - PhiInst_set_incomings, - PhiInst_new, - IfInst_cond, - IfInst_true_branch, - IfInst_false_branch, - IfInst_set_cond, - IfInst_set_true_branch, - IfInst_set_false_branch, - IfInst_new, - GenericLoopInst_prepare, - GenericLoopInst_cond, - GenericLoopInst_body, - GenericLoopInst_update, - GenericLoopInst_set_prepare, - GenericLoopInst_set_cond, - GenericLoopInst_set_body, - GenericLoopInst_set_update, - GenericLoopInst_new, - SwitchInst_value, - SwitchInst_cases, - SwitchInst_default_, - SwitchInst_set_value, - SwitchInst_set_cases, - SwitchInst_set_default_, - SwitchInst_new, - LocalInst_init, - LocalInst_set_init, - LocalInst_new, - ReturnInst_value, - ReturnInst_set_value, - ReturnInst_new, - PrintInst_fmt, - PrintInst_args, - PrintInst_set_fmt, - PrintInst_set_args, - PrintInst_new, - CommentInst_comment, - CommentInst_set_comment, - CommentInst_new, - UpdateInst_var, - UpdateInst_value, - UpdateInst_set_var, - UpdateInst_set_value, - UpdateInst_new, - RayQueryInst_query, - RayQueryInst_on_triangle_hit, - RayQueryInst_on_procedural_hit, - RayQueryInst_set_query, - RayQueryInst_set_on_triangle_hit, - RayQueryInst_set_on_procedural_hit, - RayQueryInst_new, - RevAutodiffInst_body, - RevAutodiffInst_set_body, - RevAutodiffInst_new, - FwdAutodiffInst_body, - FwdAutodiffInst_set_body, - FwdAutodiffInst_new, - Instruction_new, - func_metadata, - Binding_as_BufferBinding, - Binding_as_TextureBinding, - Binding_as_BindlessArrayBinding, - Binding_as_AccelBinding, - Binding_tag, - BufferBinding_handle, - BufferBinding_offset, - BufferBinding_size, - BufferBinding_set_handle, - BufferBinding_set_offset, - BufferBinding_set_size, - BufferBinding_new, - TextureBinding_handle, - TextureBinding_level, - TextureBinding_set_handle, - TextureBinding_set_level, - TextureBinding_new, - BindlessArrayBinding_handle, - BindlessArrayBinding_set_handle, - BindlessArrayBinding_new, - AccelBinding_handle, - AccelBinding_set_handle, - AccelBinding_new, - Binding_new, - ir_v2_binding_type_extract, - ir_v2_binding_type_size, - ir_v2_binding_type_alignment, - ir_v2_binding_type_tag, - ir_v2_binding_type_is_scalar, - ir_v2_binding_type_is_bool, - ir_v2_binding_type_is_int16, - ir_v2_binding_type_is_int32, - ir_v2_binding_type_is_int64, - ir_v2_binding_type_is_uint16, - ir_v2_binding_type_is_uint32, - ir_v2_binding_type_is_uint64, - ir_v2_binding_type_is_float16, - ir_v2_binding_type_is_float32, - ir_v2_binding_type_is_array, - ir_v2_binding_type_is_vector, - ir_v2_binding_type_is_struct, - ir_v2_binding_type_is_custom, - ir_v2_binding_type_is_matrix, - ir_v2_binding_type_element, - ir_v2_binding_type_description, - ir_v2_binding_type_dimension, - ir_v2_binding_type_members, - ir_v2_binding_make_struct, - ir_v2_binding_make_array, - ir_v2_binding_make_vector, - ir_v2_binding_make_matrix, - ir_v2_binding_make_custom, - ir_v2_binding_from_desc, - ir_v2_binding_type_bool, - ir_v2_binding_type_int16, - ir_v2_binding_type_int32, - ir_v2_binding_type_int64, - ir_v2_binding_type_uint16, - ir_v2_binding_type_uint32, - ir_v2_binding_type_uint64, - ir_v2_binding_type_float16, - ir_v2_binding_type_float32, - ir_v2_binding_node_prev, - ir_v2_binding_node_next, - ir_v2_binding_node_inst, - ir_v2_binding_node_type, - ir_v2_binding_node_get_index, - ir_v2_binding_basic_block_first, - ir_v2_binding_basic_block_last, - ir_v2_binding_node_unlink, - ir_v2_binding_node_set_next, - ir_v2_binding_node_set_prev, - ir_v2_binding_node_replace, - ir_v2_binding_pool_new, - ir_v2_binding_pool_drop, - ir_v2_binding_pool_clone, - ir_v2_binding_ir_builder_new, - ir_v2_binding_ir_builder_new_without_bb, - ir_v2_binding_ir_builder_drop, - ir_v2_binding_ir_builder_set_insert_point, - ir_v2_binding_ir_builder_insert_point, - ir_v2_binding_ir_build_call, - ir_v2_binding_ir_build_call_tag, - ir_v2_binding_ir_build_if, - ir_v2_binding_ir_build_generic_loop, - ir_v2_binding_ir_build_switch, - ir_v2_binding_ir_build_local, - ir_v2_binding_ir_build_break, - ir_v2_binding_ir_build_continue, - ir_v2_binding_ir_build_return, - ir_v2_binding_ir_builder_finish, - ir_v2_binding_cpu_ext_fn_data, - ir_v2_binding_cpu_ext_fn_new, - ir_v2_binding_cpu_ext_fn_clone, - ir_v2_binding_cpu_ext_fn_drop, - }; -} -}// namespace luisa::compute::ir_v2 diff --git a/src/ir_v2/ir_v2_bindings.cpp b/src/ir_v2/ir_v2_bindings.cpp deleted file mode 100644 index 5b7a9cad6..000000000 --- a/src/ir_v2/ir_v2_bindings.cpp +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include -#include -#include -#include -#include - -namespace luisa::compute::ir_v2 { -const Type *ir_v2_binding_type_extract(const Type *ty, uint32_t index) { - if (ty->is_vector() || ty->is_array()) { - return ty->element(); - } - if (ty->is_structure()) { - auto members = ty->members(); - LUISA_ASSERT(index < members.size(), "Index out of range. {} >= {}", index, members.size()); - } - LUISA_ASSERT(false, "Cannot extract element from non-vector, non-array, non-structure type."); - return nullptr; -} -size_t ir_v2_binding_type_size(const Type *ty) { - return ty->size(); -} -size_t ir_v2_binding_type_alignment(const Type *ty) { - return ty->alignment(); -} -RustyTypeTag ir_v2_binding_type_tag(const Type *ty) { - LUISA_ASSERT(!(ty->tag() >= Type::Tag::BUFFER && ty->tag() <= Type::Tag::ACCEL), "Resource types are not valid IR types."); - return static_cast(ty->tag()); -} -bool ir_v2_binding_type_is_scalar(const Type *ty) { - return ty && ty->is_scalar(); -} -bool ir_v2_binding_type_is_bool(const Type *ty) { - return ty && ty->is_bool(); -} -bool ir_v2_binding_type_is_int16(const Type *ty) { - return ty && ty->is_int16(); -} -bool ir_v2_binding_type_is_int32(const Type *ty) { - return ty && ty->is_int32(); -} -bool ir_v2_binding_type_is_int64(const Type *ty) { - return ty && ty->is_int64(); -} -bool ir_v2_binding_type_is_uint16(const Type *ty) { - return ty && ty->is_uint16(); -} -bool ir_v2_binding_type_is_uint32(const Type *ty) { - return ty && ty->is_uint32(); -} -bool ir_v2_binding_type_is_uint64(const Type *ty) { - return ty && ty->is_uint64(); -} -bool ir_v2_binding_type_is_float16(const Type *ty) { - return ty && ty->is_float16(); -} -bool ir_v2_binding_type_is_float32(const Type *ty) { - return ty && ty->is_float32(); -} -bool ir_v2_binding_type_is_array(const Type *ty) { - return ty && ty->is_array(); -} -bool ir_v2_binding_type_is_vector(const Type *ty) { - return ty && ty->is_vector(); -} -bool ir_v2_binding_type_is_struct(const Type *ty) { - return ty && ty->is_structure(); -} -bool ir_v2_binding_type_is_custom(const Type *ty) { - return ty && ty->is_custom(); -} -bool ir_v2_binding_type_is_matrix(const Type *ty) { - return ty && ty->is_matrix(); -} -const Type *ir_v2_binding_type_element(const Type *ty) { - LUISA_ASSERT(ty, "Null pointer."); - return ty->element(); -} -Slice ir_v2_binding_type_description(const Type *ty) { - LUISA_ASSERT(ty, "Null pointer."); - auto desc = ty->description(); - return {desc.data(), desc.size()}; -} -size_t ir_v2_binding_type_dimension(const Type *ty) { - return ty->dimension(); -} -Slice ir_v2_binding_type_members(const Type *ty) { - auto members = ty->members(); - return {members.data(), members.size()}; -} -const Type *ir_v2_binding_make_struct(size_t alignment, const Type **tys, uint32_t count) { - return Type::structure(alignment, luisa::span{tys, count}); -} -const Type *ir_v2_binding_make_array(const Type *ty, uint32_t count) { - return Type::array(ty, count); -} -const Type *ir_v2_binding_make_vector(const Type *ty, uint32_t count) { - return Type::vector(ty, count); -} -const Type *ir_v2_binding_make_matrix(uint32_t dim) { - return Type::matrix(dim); -} -const Type *ir_v2_binding_make_custom(Slice name) { - return Type::custom(luisa::string_view{name.data, name.len}); -} -const Type *ir_v2_binding_from_desc(Slice desc) { - return Type::from(luisa::string_view{desc.data, desc.len}); -} -const Type *ir_v2_binding_type_bool() { - return Type::of(); -} -const Type *ir_v2_binding_type_int16() { - return Type::of(); -} -const Type *ir_v2_binding_type_int32() { - return Type::of(); -} -const Type *ir_v2_binding_type_int64() { - return Type::of(); -} -const Type *ir_v2_binding_type_uint16() { - return Type::of(); -} -const Type *ir_v2_binding_type_uint32() { - return Type::of(); -} -const Type *ir_v2_binding_type_uint64() { - return Type::of(); -} -const Type *ir_v2_binding_type_float16() { - return Type::of(); -} -const Type *ir_v2_binding_type_float32() { - return Type::of(); -} - -const Node *ir_v2_binding_node_prev(const Node *node) { - return node->prev; -} -const Node *ir_v2_binding_node_next(const Node *node) { - return node->next; -} -const CInstruction *ir_v2_binding_node_inst(const Node *node) { - return reinterpret_cast(&node->inst); -} -int32_t ir_v2_binding_node_get_index(const Node *node) { - return *node->get_index(); -} -const Type *ir_v2_binding_node_type(const Node *node) { - return node->ty; -} -const Node *ir_v2_binding_basic_block_first(const BasicBlock *block) { - return block->first(); -} -const Node *ir_v2_binding_basic_block_last(const BasicBlock *block) { - return block->last(); -} -void ir_v2_binding_node_unlink(Node *node) { - node->unlink(); -} -void ir_v2_binding_node_set_next(Node *node, Node *next) { - node->next = next; -} -void ir_v2_binding_node_set_prev(Node *node, Node *prev) { - node->prev = prev; -} -void ir_v2_binding_node_replace(Node *node, Node *new_node) { - node->replace_with(new_node); -} - -Pool *ir_v2_binding_pool_new() { - auto pool = luisa::make_shared(); - auto ptr = pool.get(); - forget(std::move(pool)); - return ptr; -} -void ir_v2_binding_pool_drop(Pool *pool) { - auto _sp = pool->shared_from_this(); -} -Pool *ir_v2_binding_pool_clone(Pool *pool) { - auto sp = pool->shared_from_this(); - auto ptr = sp.get(); - forget(std::move(sp)); - return ptr; -} - -IrBuilder *ir_v2_binding_ir_builder_new(Pool *pool) { - return luisa::new_with_allocator(pool->shared_from_this()); -} -IrBuilder *ir_v2_binding_ir_builder_new_without_bb(Pool *pool) { - return luisa::new_with_allocator(std::move(IrBuilder::create_without_bb(pool->shared_from_this()))); -} -void ir_v2_binding_ir_builder_drop(IrBuilder *builder) { - luisa::delete_with_allocator(builder); -} -void ir_v2_binding_ir_builder_set_insert_point(IrBuilder *builder, Node *node) { - builder->set_insert_point(node); -} -Node *ir_v2_binding_ir_builder_insert_point(IrBuilder *builder) { - return builder->insert_point(); -} -Node *ir_v2_binding_ir_build_call(IrBuilder *builder, CFunc &&func, Slice args, const Type *ty) { - Func f{}; - std::memcpy(&f, &func, sizeof(CFunc)); - return builder->call(std::move(f), luisa::span{args.data, args.len}, ty); -} -Node *ir_v2_binding_ir_build_call_tag(IrBuilder *builder, RustyFuncTag tag, Slice args, const Type *ty) { - return builder->call(static_cast(tag), luisa::span{args.data, args.len}, ty); -} -Node *ir_v2_binding_ir_build_if(IrBuilder *builder, const Node *cond, const BasicBlock *true_branch, const BasicBlock *false_branch) { - return builder->if_(cond, true_branch, false_branch); -} -Node *ir_v2_binding_ir_build_generic_loop(IrBuilder *builder, const BasicBlock *prepare, const Node *cond, const BasicBlock *body, const BasicBlock *update) { - return builder->generic_loop(prepare, cond, body, update); -} -Node *ir_v2_binding_ir_build_switch(IrBuilder *builder, const Node *value, Slice cases, const BasicBlock *default_) { - return builder->switch_(value, luisa::span{cases.data, cases.len}, default_); -} -Node *ir_v2_binding_ir_build_local(IrBuilder *builder, const Node *init) { - return builder->local(init); -} -Node *ir_v2_binding_ir_build_break(IrBuilder *builder) { - return builder->break_(); -} -Node *ir_v2_binding_ir_build_continue(IrBuilder *builder) { - return builder->continue_(); -} -Node *ir_v2_binding_ir_build_return(IrBuilder *builder, const Node *value) { - return builder->return_(value); -} -const BasicBlock *ir_v2_binding_ir_builder_finish(IrBuilder &&builder) { - return std::move(builder).finish(); -} -const CpuExternFnData *ir_v2_binding_cpu_ext_fn_data(const CpuExternFn *f) { - return f; -} -const CpuExternFn *ir_v2_binding_cpu_ext_fn_new(CpuExternFnData data) { - auto sp = luisa::make_shared(data); - auto ptr = sp.get(); - forget(std::move(sp)); - return ptr; -} -const CpuExternFn *ir_v2_binding_cpu_ext_fn_clone(const CpuExternFn *f) { - auto sp = f->shared_from_this(); - auto ptr = sp.get(); - forget(std::move(sp)); - return ptr; -} -void ir_v2_binding_cpu_ext_fn_drop(const CpuExternFn *f) { - auto _sp = f->shared_from_this(); -} -}// namespace luisa::compute::ir_v2 \ No newline at end of file diff --git a/src/ir_v2/ir_v2_defs.cpp b/src/ir_v2/ir_v2_defs.cpp deleted file mode 100644 index b9a8150f8..000000000 --- a/src/ir_v2/ir_v2_defs.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -namespace luisa::compute::ir_v2 { -Func::Func(AssumeFn v) : _data(luisa::make_unique(std::move(v))), _tag(AssumeFn::static_tag()) {} -Func::Func(UnreachableFn v) : _data(luisa::make_unique(std::move(v))), _tag(UnreachableFn::static_tag()) {} -Func::Func(AssertFn v) : _data(luisa::make_unique(std::move(v))), _tag(AssertFn::static_tag()) {} -Func::Func(BindlessAtomicExchangeFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicExchangeFn::static_tag()) {} -Func::Func(BindlessAtomicCompareExchangeFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicCompareExchangeFn::static_tag()) {} -Func::Func(BindlessAtomicFetchAddFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchAddFn::static_tag()) {} -Func::Func(BindlessAtomicFetchSubFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchSubFn::static_tag()) {} -Func::Func(BindlessAtomicFetchAndFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchAndFn::static_tag()) {} -Func::Func(BindlessAtomicFetchOrFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchOrFn::static_tag()) {} -Func::Func(BindlessAtomicFetchXorFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchXorFn::static_tag()) {} -Func::Func(BindlessAtomicFetchMinFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchMinFn::static_tag()) {} -Func::Func(BindlessAtomicFetchMaxFn v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessAtomicFetchMaxFn::static_tag()) {} -Func::Func(CallableFn v) : _data(luisa::make_unique(std::move(v))), _tag(CallableFn::static_tag()) {} -Func::Func(CpuExtFn v) : _data(luisa::make_unique(std::move(v))), _tag(CpuExtFn::static_tag()) {} -Instruction::Instruction(ArgumentInst v) : _data(luisa::make_unique(std::move(v))), _tag(ArgumentInst::static_tag()) {} -Instruction::Instruction(ConstantInst v) : _data(luisa::make_unique(std::move(v))), _tag(ConstantInst::static_tag()) {} -Instruction::Instruction(CallInst v) : _data(luisa::make_unique(std::move(v))), _tag(CallInst::static_tag()) {} -Instruction::Instruction(PhiInst v) : _data(luisa::make_unique(std::move(v))), _tag(PhiInst::static_tag()) {} -Instruction::Instruction(IfInst v) : _data(luisa::make_unique(std::move(v))), _tag(IfInst::static_tag()) {} -Instruction::Instruction(GenericLoopInst v) : _data(luisa::make_unique(std::move(v))), _tag(GenericLoopInst::static_tag()) {} -Instruction::Instruction(SwitchInst v) : _data(luisa::make_unique(std::move(v))), _tag(SwitchInst::static_tag()) {} -Instruction::Instruction(LocalInst v) : _data(luisa::make_unique(std::move(v))), _tag(LocalInst::static_tag()) {} -Instruction::Instruction(ReturnInst v) : _data(luisa::make_unique(std::move(v))), _tag(ReturnInst::static_tag()) {} -Instruction::Instruction(PrintInst v) : _data(luisa::make_unique(std::move(v))), _tag(PrintInst::static_tag()) {} -Instruction::Instruction(CommentInst v) : _data(luisa::make_unique(std::move(v))), _tag(CommentInst::static_tag()) {} -Instruction::Instruction(UpdateInst v) : _data(luisa::make_unique(std::move(v))), _tag(UpdateInst::static_tag()) {} -Instruction::Instruction(RayQueryInst v) : _data(luisa::make_unique(std::move(v))), _tag(RayQueryInst::static_tag()) {} -Instruction::Instruction(RevAutodiffInst v) : _data(luisa::make_unique(std::move(v))), _tag(RevAutodiffInst::static_tag()) {} -Instruction::Instruction(FwdAutodiffInst v) : _data(luisa::make_unique(std::move(v))), _tag(FwdAutodiffInst::static_tag()) {} -const FuncMetadata &Func::metadata() const noexcept { - return func_metadata()[static_cast(tag())]; -} -Binding::Binding(BufferBinding v) : _data(luisa::make_unique(std::move(v))), _tag(BufferBinding::static_tag()) {} -Binding::Binding(TextureBinding v) : _data(luisa::make_unique(std::move(v))), _tag(TextureBinding::static_tag()) {} -Binding::Binding(BindlessArrayBinding v) : _data(luisa::make_unique(std::move(v))), _tag(BindlessArrayBinding::static_tag()) {} -Binding::Binding(AccelBinding v) : _data(luisa::make_unique(std::move(v))), _tag(AccelBinding::static_tag()) {} -}// namespace luisa::compute::ir_v2 diff --git a/src/ir_v2/transform/dce.cpp b/src/ir_v2/transform/dce.cpp deleted file mode 100644 index f44fa9950..000000000 --- a/src/ir_v2/transform/dce.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include - -namespace luisa::compute::ir_v2 { - - -} \ No newline at end of file diff --git a/src/ir_v2/transform/ssa.cpp b/src/ir_v2/transform/ssa.cpp deleted file mode 100644 index e7965cb9f..000000000 --- a/src/ir_v2/transform/ssa.cpp +++ /dev/null @@ -1,4 +0,0 @@ -#include -namespace luisa::compute::ir_v2 { - -}// namespace luisa::compute::ir_v2 \ No newline at end of file diff --git a/src/pydsl_v2/luisa_dsl/__init__.py b/src/pydsl_v2/luisa_dsl/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/pydsl_v2/luisa_dsl/ir.py b/src/pydsl_v2/luisa_dsl/ir.py deleted file mode 100644 index c0b546f02..000000000 --- a/src/pydsl_v2/luisa_dsl/ir.py +++ /dev/null @@ -1,8 +0,0 @@ -class IRType: - def __init__(self) -> None: - pass - - -class IRNode: - def __init__(self) -> None: - pass \ No newline at end of file diff --git a/src/pydsl_v2/luisa_dsl/parse.py b/src/pydsl_v2/luisa_dsl/parse.py deleted file mode 100644 index 220e111cb..000000000 --- a/src/pydsl_v2/luisa_dsl/parse.py +++ /dev/null @@ -1,2 +0,0 @@ -import inspect -import ast \ No newline at end of file diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt index b0af1fafe..58c926d75 100644 --- a/src/runtime/CMakeLists.txt +++ b/src/runtime/CMakeLists.txt @@ -43,7 +43,9 @@ set(LUISA_COMPUTE_RUNTIME_SOURCES ${LUISA_COMPUTE_RUNTIME_REMOTE_SOURCES}) add_library(luisa-compute-runtime SHARED ${LUISA_COMPUTE_RUNTIME_SOURCES}) -target_link_libraries(luisa-compute-runtime PUBLIC luisa-compute-ast luisa-compute-ir luisa-compute-ir-v2) +target_link_libraries(luisa-compute-runtime + PUBLIC luisa-compute-ast luisa-compute-ir + PRIVATE luisa-compute-vstl luisa-compute-ext-lmdb luisa-compute-ext-stb) target_precompile_headers(luisa-compute-runtime PRIVATE pch.h) target_compile_definitions(luisa-compute-runtime PRIVATE LC_RUNTIME_EXPORT_DLL=1) diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 3a1871d1b..45efd85a1 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -48,7 +48,6 @@ if (LUISA_COMPUTE_ENABLE_RUST) luisa_compute_add_executable(test_path_tracing_ir test_path_tracing_ir.cpp) endif () endif () -luisa_compute_add_executable(test_ir_v2 test_ir_v2.cpp) luisa_compute_add_executable(test_helloworld test_helloworld.cpp) luisa_compute_add_executable(test_type test_type.cpp) luisa_compute_add_executable(test_ast test_ast.cpp) diff --git a/src/tests/test_imgui.cpp b/src/tests/test_imgui.cpp index 8c308d3bd..143ff393f 100644 --- a/src/tests/test_imgui.cpp +++ b/src/tests/test_imgui.cpp @@ -49,7 +49,7 @@ int main(int argc, char *argv[]) { // We support multiple ImGui contexts, so if you would like to tweak ImGui settings for // a specific window, you can use window.with_context to get a context guard. window.with_context([&] { - ImGui::StyleColorsClassic(); + ImGui::StyleColorsDark(); auto &style = ImGui::GetStyle(); style.TabRounding = 0.f; }); diff --git a/src/tests/test_ir_v2.cpp b/src/tests/test_ir_v2.cpp deleted file mode 100644 index beebdaabd..000000000 --- a/src/tests/test_ir_v2.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include -#include -using namespace luisa::compute; -using namespace luisa::compute::ir_v2; -struct Foo { - int x; - float y; -}; -LUISA_STRUCT(Foo, x, y) {}; - -int main(int argc, char *argv[]) { - log_level_verbose(); - auto mod = KernelModule(); - { - auto &pool = mod.pool; - auto buf = pool->alloc(Instruction(InstructionTag::BUFFER), Type::of()); - mod.args.push_back(buf); - auto builder = IrBuilder{pool}; - auto dispatch_id = builder.call(FuncTag::DISPATCH_ID, {}, Type::of()); - auto tid = builder.extract_element(dispatch_id, luisa::span{std::array{0u}}, Type::of()); - auto foo = builder.local(builder.call(FuncTag::BUFFER_READ, luisa::span{std::array{buf, tid}}, Type::of())); - auto foo_x = builder.gep(foo, luisa::span{std::array{0u}}, Type::of()); - builder.update(foo_x, builder.const_(int(1))); - (void)builder.call(FuncTag::BUFFER_WRITE, luisa::span{std::array{buf, tid, foo}}, Type::of()); - mod.entry = std::move(builder).finish(); - } - LUISA_VERBOSE("{}", dump_human_readable(mod)); - return 0; -} \ No newline at end of file diff --git a/src/tests/test_mpm3d.cpp b/src/tests/test_mpm3d.cpp index 38afa72c3..7224b3b8f 100644 --- a/src/tests/test_mpm3d.cpp +++ b/src/tests/test_mpm3d.cpp @@ -1,229 +1,229 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) { - - using namespace luisa; - using namespace luisa::compute; - - auto sqr = [](auto x) noexcept { return x * x; }; - - Context context{argv[0]}; - if (argc <= 1) { - LUISA_INFO("Usage: {} . : cuda, dx, cpu, metal", argv[0]); - exit(1); - } - Device device = context.create_device(argv[1]); - - static constexpr int n_grid = 64; - static constexpr uint n_steps = 25u; - - static constexpr uint n_particles = n_grid * n_grid * n_grid / 4u; - static constexpr float dx = 1.f / n_grid; - static constexpr float dt = 8e-5f; - static constexpr float p_rho = 1.f; - static constexpr float p_vol = (dx * .5f) * (dx * .5f) * (dx * .5f); - static constexpr float p_mass = p_rho * p_vol; - static constexpr float gravity = 9.8f; - static constexpr int bound = 3; - static constexpr float E = 400.f; - - static constexpr uint resolution = 1024u; - - Buffer x = device.create_buffer(n_particles); - Buffer v = device.create_buffer(n_particles); - Buffer C = device.create_buffer(n_particles); - Buffer J = device.create_buffer(n_particles); - Buffer grid = device.create_buffer(n_grid * n_grid * n_grid); - Window window{"MPM3D", resolution, resolution}; - // luisa::vector> display_buffer(resolution * resolution); - // std::fstream file("luisa_cpp_speed.csv", std::ios_base::out); - // file << "Frame, Time(ms)\n"; - Stream stream = device.create_stream(StreamTag::GRAPHICS); - Swapchain swap_chain = device.create_swapchain( - stream, - SwapchainOption{ - .display = window.native_display(), - .window = window.native_handle(), - .size = make_uint2(resolution), - .wants_hdr = false, - .wants_vsync = false, - .back_buffer_count = 2, - }); - Image display = device.create_image(swap_chain.backend_storage(), make_uint2(resolution)); - - auto index = [](UInt3 xyz) noexcept { - auto p = clamp(xyz, static_cast(0), static_cast(n_grid - 1)); - return p.x + p.y * n_grid + p.z * n_grid * n_grid; - }; - auto outer_product = [](Float3 a, Float3 b) noexcept { - return make_float3x3( - make_float3(a[0] * b[0], a[1] * b[0], a[2] * b[0]), - make_float3(a[0] * b[1], a[1] * b[1], a[2] * b[1]), - make_float3(a[0] * b[2], a[1] * b[2], a[2] * b[2])); - }; - auto trace = [](Float3x3 m) noexcept { return m[0][0] + m[1][1] + m[2][2]; }; - - auto clear_grid = device.compile<3>([&] { - set_block_size(8, 8, 1); - UInt idx = index(dispatch_id().xyz()); - grid->write(idx, make_float4()); - }); - - auto point_to_grid = device.compile<1>([&] { - set_block_size(64, 1, 1); - UInt p = dispatch_id().x; - Float3 Xp = x->read(p) / dx; - Int3 base = make_int3(Xp - 0.5f); - Float3 fx = Xp - make_float3(base); - std::array w{0.5f * sqr(1.5f - fx), - 0.75f - sqr(fx - 1.0f), - 0.5f * sqr(fx - 0.5f)}; - Float stress = -4.f * dt * E * p_vol * (J->read(p) - 1.f) / sqr(dx); - Float3x3 affine = make_float3x3(stress, 0.f, 0.f, - 0.f, stress, 0.f, - 0.f, 0.f, stress) + - p_mass * C->read(p); - Float3 vp = v->read(p); - for (uint ii = 0; ii < 27; ii++) { - int3 offset = make_int3(ii % 3, ii / 3 % 3, ii / 3 / 3); - int i = offset.x; - int j = offset.y; - int k = offset.z; - Float3 dpos = (make_float3(offset) - fx) * dx; - Float weight = w[i].x * w[j].y * w[k].z; - Float3 vadd = weight * (p_mass * vp + affine * dpos); - UInt idx = index(base + offset); - grid->atomic(idx).x.fetch_add(vadd.x); - grid->atomic(idx).y.fetch_add(vadd.y); - grid->atomic(idx).z.fetch_add(vadd.z); - grid->atomic(idx).w.fetch_add(weight * p_mass); - } - }); - - auto simulate_grid = device.compile<3>([&] { - set_block_size(8, 8, 1); - Int3 coord = make_int3(dispatch_id().xyz()); - UInt i = index(coord); - Float4 v_and_m = grid->read(i); - Float3 v = v_and_m.xyz(); - Float m = v_and_m.w; - v = ite(m > 0.f, v / m, v); - v.y -= dt * gravity; - v = ite((coord < bound && v < 0.f) || (coord > n_grid - bound && v > 0.f), 0.f, v); - grid->write(i, make_float4(v, m)); - }); - - auto grid_to_point = device.compile<1>([&] { - set_block_size(64, 1, 1); - UInt p = dispatch_id().x; - Float3 Xp = x->read(p) / dx; - Int3 base = make_int3(Xp - 0.5f); - Float3 fx = Xp - make_float3(base); - std::array w{0.5f * sqr(1.5f - fx), - 0.75f - sqr(fx - 1.0f), - 0.5f * sqr(fx - 0.5f)}; - Float3 new_v = def(make_float3(0.f)); - Float3x3 new_C = def(make_float3x3(0.f)); - for (uint ii = 0; ii < 27; ii++) { - int3 offset = make_int3(ii % 3, ii / 3 % 3, ii / 3 / 3); - int i = offset.x; - int j = offset.y; - int k = offset.z; - Float3 dpos = (make_float3(offset) - fx) * dx; - Float weight = w[i].x * w[j].y * w[k].z; - UInt idx = index(base + offset); - Float3 g_v = grid->read(idx).xyz(); - new_v += weight * g_v; - new_C = new_C + 4.f * weight * outer_product(g_v, dpos) / sqr(dx); - } - v->write(p, new_v); - x->write(p, x->read(p) + new_v * dt); - J->write(p, J->read(p) * (1.f + dt * trace(new_C))); - C->write(p, new_C); - }); - auto substep = [&](CommandList &cmd_list) noexcept { - cmd_list << clear_grid().dispatch(n_grid, n_grid, n_grid) - << point_to_grid().dispatch(n_particles) - << simulate_grid().dispatch(n_grid, n_grid, n_grid) - << grid_to_point().dispatch(n_particles); - }; - - auto init = [&](Stream &stream) noexcept { - luisa::vector x_init(n_particles); - std::default_random_engine random{std::random_device{}()}; - std::uniform_real_distribution uniform; - for (uint i = 0; i < n_particles; i++) { - float rx = uniform(random); - float ry = uniform(random); - float rz = uniform(random); - x_init[i] = make_float3(rx * .4f + .2f, ry * .4f + .2f, rz * .4f + .2f); - } - luisa::vector v_init(n_particles, make_float3(0.f)); - luisa::vector J_init(n_particles, 1.f); - luisa::vector C_init(n_particles, make_float3x3(0.f)); - stream << x.copy_from(x_init.data()) - << v.copy_from(v_init.data()) - << J.copy_from(J_init.data()) - << C.copy_from(C_init.data()) - << synchronize(); - }; - - auto clear_display = device.compile<2>([&] { - display->write(dispatch_id().xy(), - make_float4(.1f, .2f, .3f, 1.f)); - }); - - static constexpr float phi = radians(28); - static constexpr float theta = radians(32); - - auto T = [&](Float3 a0) noexcept { - Float3 a = a0 - 0.5f; - Float c = cos(phi); - Float s = sin(phi); - Float C = cos(theta); - Float S = sin(theta); - a.x = a.x * c + a.z * s; - a.z = a.z * c - a.x * s; - return make_float2(a.x, a.y * C + a.z * S) + 0.5f; - }; - - auto draw_particles = device.compile<1>([&] { - UInt p = dispatch_id().x; - Float2 basepos = T(x->read(p)); - for (int i = -1; i <= 1; i++) { - for (int j = -1; j <= 1; j++) { - Int2 pos = make_int2(basepos * static_cast(resolution)) + make_int2(i, j); - $if (pos.x >= 0 & pos.x < resolution & pos.y >= 0 & pos.y < resolution) { - display->write(make_uint2(cast(pos.x), resolution - 1u - pos.y), - make_float4(.4f, .6f, .6f, 1.f)); - }; - } - } - }); - - init(stream); - Framerate fps; - while (!window.should_close()) { - fps.record(1u); - LUISA_INFO("FPS: {}", fps.report()); - CommandList cmd_list; - for (uint i = 0u; i < n_steps; i++) { substep(cmd_list); } - cmd_list << clear_display().dispatch(resolution, resolution) - << draw_particles().dispatch(n_particles); - stream << cmd_list.commit() << swap_chain.present(display); - window.poll_events(); - } - stream << synchronize(); -} +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + + using namespace luisa; + using namespace luisa::compute; + + auto sqr = [](auto x) noexcept { return x * x; }; + + Context context{argv[0]}; + if (argc <= 1) { + LUISA_INFO("Usage: {} . : cuda, dx, cpu, metal", argv[0]); + exit(1); + } + Device device = context.create_device(argv[1]); + + static constexpr int n_grid = 64; + static constexpr uint n_steps = 25u; + + static constexpr uint n_particles = n_grid * n_grid * n_grid / 4u; + static constexpr float dx = 1.f / n_grid; + static constexpr float dt = 8e-5f; + static constexpr float p_rho = 1.f; + static constexpr float p_vol = (dx * .5f) * (dx * .5f) * (dx * .5f); + static constexpr float p_mass = p_rho * p_vol; + static constexpr float gravity = 9.8f; + static constexpr int bound = 3; + static constexpr float E = 400.f; + + static constexpr uint resolution = 1024u; + + Buffer x = device.create_buffer(n_particles); + Buffer v = device.create_buffer(n_particles); + Buffer C = device.create_buffer(n_particles); + Buffer J = device.create_buffer(n_particles); + Buffer grid = device.create_buffer(n_grid * n_grid * n_grid); + Window window{"MPM3D", resolution, resolution}; + // luisa::vector> display_buffer(resolution * resolution); + // std::fstream file("luisa_cpp_speed.csv", std::ios_base::out); + // file << "Frame, Time(ms)\n"; + Stream stream = device.create_stream(StreamTag::GRAPHICS); + Swapchain swap_chain = device.create_swapchain( + stream, + SwapchainOption{ + .display = window.native_display(), + .window = window.native_handle(), + .size = make_uint2(resolution), + .wants_hdr = false, + .wants_vsync = false, + .back_buffer_count = 8, + }); + Image display = device.create_image(swap_chain.backend_storage(), make_uint2(resolution)); + + auto index = [](Int3 xyz) noexcept { + auto p = clamp(xyz, 0, n_grid - 1); + return p.x + p.y * n_grid + p.z * n_grid * n_grid; + }; + auto outer_product = [](Float3 a, Float3 b) noexcept { + return make_float3x3( + make_float3(a[0] * b[0], a[1] * b[0], a[2] * b[0]), + make_float3(a[0] * b[1], a[1] * b[1], a[2] * b[1]), + make_float3(a[0] * b[2], a[1] * b[2], a[2] * b[2])); + }; + auto trace = [](Float3x3 m) noexcept { return m[0][0] + m[1][1] + m[2][2]; }; + + auto clear_grid = device.compile<3>([&] { + set_block_size(8, 8, 1); + UInt idx = index(dispatch_id().xyz()); + grid->write(idx, make_float4()); + }); + + auto point_to_grid = device.compile<1>([&] { + set_block_size(64, 1, 1); + UInt p = dispatch_id().x; + Float3 Xp = x->read(p) / dx; + Int3 base = make_int3(Xp - 0.5f); + Float3 fx = Xp - make_float3(base); + std::array w{0.5f * sqr(1.5f - fx), + 0.75f - sqr(fx - 1.0f), + 0.5f * sqr(fx - 0.5f)}; + Float stress = -4.f * dt * E * p_vol * (J->read(p) - 1.f) / sqr(dx); + Float3x3 affine = make_float3x3(stress, 0.f, 0.f, + 0.f, stress, 0.f, + 0.f, 0.f, stress) + + p_mass * C->read(p); + Float3 vp = v->read(p); + for (uint ii = 0; ii < 27; ii++) { + int3 offset = make_int3(ii % 3, ii / 3 % 3, ii / 3 / 3); + int i = offset.x; + int j = offset.y; + int k = offset.z; + Float3 dpos = (make_float3(offset) - fx) * dx; + Float weight = w[i].x * w[j].y * w[k].z; + Float3 vadd = weight * (p_mass * vp + affine * dpos); + UInt idx = index(base + offset); + grid->atomic(idx).x.fetch_add(vadd.x); + grid->atomic(idx).y.fetch_add(vadd.y); + grid->atomic(idx).z.fetch_add(vadd.z); + grid->atomic(idx).w.fetch_add(weight * p_mass); + } + }); + + auto simulate_grid = device.compile<3>([&] { + set_block_size(8, 8, 1); + Int3 coord = make_int3(dispatch_id().xyz()); + UInt i = index(coord); + Float4 v_and_m = grid->read(i); + Float3 v = v_and_m.xyz(); + Float m = v_and_m.w; + v = ite(m > 0.f, v / m, v); + v.y -= dt * gravity; + v = ite((coord < bound && v < 0.f) || (coord > n_grid - bound && v > 0.f), 0.f, v); + grid->write(i, make_float4(v, m)); + }); + + auto grid_to_point = device.compile<1>([&] { + set_block_size(64, 1, 1); + UInt p = dispatch_id().x; + Float3 Xp = x->read(p) / dx; + Int3 base = make_int3(Xp - 0.5f); + Float3 fx = Xp - make_float3(base); + std::array w{0.5f * sqr(1.5f - fx), + 0.75f - sqr(fx - 1.0f), + 0.5f * sqr(fx - 0.5f)}; + Float3 new_v = def(make_float3(0.f)); + Float3x3 new_C = def(make_float3x3(0.f)); + for (uint ii = 0; ii < 27; ii++) { + int3 offset = make_int3(ii % 3, ii / 3 % 3, ii / 3 / 3); + int i = offset.x; + int j = offset.y; + int k = offset.z; + Float3 dpos = (make_float3(offset) - fx) * dx; + Float weight = w[i].x * w[j].y * w[k].z; + UInt idx = index(base + offset); + Float3 g_v = grid->read(idx).xyz(); + new_v += weight * g_v; + new_C = new_C + 4.f * weight * outer_product(g_v, dpos) / sqr(dx); + } + v->write(p, new_v); + x->write(p, x->read(p) + new_v * dt); + J->write(p, J->read(p) * (1.f + dt * trace(new_C))); + C->write(p, new_C); + }); + auto substep = [&](CommandList &cmd_list) noexcept { + cmd_list << clear_grid().dispatch(n_grid, n_grid, n_grid) + << point_to_grid().dispatch(n_particles) + << simulate_grid().dispatch(n_grid, n_grid, n_grid) + << grid_to_point().dispatch(n_particles); + }; + + auto init = [&](Stream &stream) noexcept { + luisa::vector x_init(n_particles); + std::default_random_engine random{std::random_device{}()}; + std::uniform_real_distribution uniform; + for (uint i = 0; i < n_particles; i++) { + float rx = uniform(random); + float ry = uniform(random); + float rz = uniform(random); + x_init[i] = make_float3(rx * .4f + .2f, ry * .4f + .2f, rz * .4f + .2f); + } + luisa::vector v_init(n_particles, make_float3(0.f)); + luisa::vector J_init(n_particles, 1.f); + luisa::vector C_init(n_particles, make_float3x3(0.f)); + stream << x.copy_from(x_init.data()) + << v.copy_from(v_init.data()) + << J.copy_from(J_init.data()) + << C.copy_from(C_init.data()) + << synchronize(); + }; + + auto clear_display = device.compile<2>([&] { + display->write(dispatch_id().xy(), + make_float4(.1f, .2f, .3f, 1.f)); + }); + + static constexpr float phi = radians(28); + static constexpr float theta = radians(32); + + auto T = [&](Float3 a0) noexcept { + Float3 a = a0 - 0.5f; + Float c = cos(phi); + Float s = sin(phi); + Float C = cos(theta); + Float S = sin(theta); + a.x = a.x * c + a.z * s; + a.z = a.z * c - a.x * s; + return make_float2(a.x, a.y * C + a.z * S) + 0.5f; + }; + + auto draw_particles = device.compile<1>([&] { + UInt p = dispatch_id().x; + Float2 basepos = T(x->read(p)); + for (int i = -1; i <= 1; i++) { + for (int j = -1; j <= 1; j++) { + Int2 pos = make_int2(basepos * static_cast(resolution)) + make_int2(i, j); + $if (pos.x >= 0 & pos.x < resolution & pos.y >= 0 & pos.y < resolution) { + display->write(make_uint2(cast(pos.x), resolution - 1u - pos.y), + make_float4(.4f, .6f, .6f, 1.f)); + }; + } + } + }); + + init(stream); + Framerate fps; + while (!window.should_close()) { + fps.record(1u); + LUISA_INFO("FPS: {}", fps.report()); + CommandList cmd_list; + for (uint i = 0u; i < n_steps; i++) { substep(cmd_list); } + cmd_list << clear_display().dispatch(resolution, resolution) + << draw_particles().dispatch(n_particles); + stream << cmd_list.commit() << swap_chain.present(display); + window.poll_events(); + } + stream << synchronize(); +} diff --git a/src/tests/test_path_tracing.cpp b/src/tests/test_path_tracing.cpp index 5c1da2caa..adba9e457 100644 --- a/src/tests/test_path_tracing.cpp +++ b/src/tests/test_path_tracing.cpp @@ -160,7 +160,7 @@ int main(int argc, char *argv[]) { return pdf_a / max(pdf_a + pdf_b, 1e-4f); }; - auto spp_per_dispatch = device.backend_name() == "metal" || device.backend_name() == "cpu" ? 1u : 64u; + auto spp_per_dispatch = device.backend_name() == "metal" || device.backend_name() == "cpu" || device.backend_name() == "fallback" ? 1u : 64u; Kernel2D raytracing_kernel = [&](ImageFloat image, ImageUInt seed_image, AccelVar accel, UInt2 resolution) noexcept { set_block_size(16u, 16u, 1u); diff --git a/src/tests/test_path_tracing_nested_callable.cpp b/src/tests/test_path_tracing_nested_callable.cpp index 382860156..781e77e63 100644 --- a/src/tests/test_path_tracing_nested_callable.cpp +++ b/src/tests/test_path_tracing_nested_callable.cpp @@ -149,7 +149,7 @@ int main(int argc, char *argv[]) { return pdf_a / max(pdf_a + pdf_b, 1e-4f); }; - auto spp_per_dispatch = device.backend_name() == "metal" || device.backend_name() == "cpu" ? 1u : 64u; + auto spp_per_dispatch = device.backend_name() == "metal" || device.backend_name() == "cpu" || device.backend_name() == "fallback" ? 1u : 64u; Kernel2D raytracing_kernel = [&](ImageFloat image, ImageUInt seed_image, AccelVar accel, UInt2 resolution) noexcept { set_block_size(16u, 16u, 1u); diff --git a/src/tests/test_rtx.cpp b/src/tests/test_rtx.cpp index cb82d6999..9f7ba5d8a 100644 --- a/src/tests/test_rtx.cpp +++ b/src/tests/test_rtx.cpp @@ -108,7 +108,7 @@ int main(int argc, char *argv[]) { auto colorspace_shader = device.compile(colorspace_kernel); auto raytracing_shader = device.compile(raytracing_kernel); - auto set_transform_shader = device.compile(set_transform_kernel); + auto set_transform_shader = device.compile(set_transform_kernel, {.name = "set_transforms"}); static constexpr uint width = 512u; static constexpr uint height = 512u; diff --git a/src/tests/test_sampler.cpp b/src/tests/test_sampler.cpp index ebb549aff..82f67ca40 100644 --- a/src/tests/test_sampler.cpp +++ b/src/tests/test_sampler.cpp @@ -77,7 +77,6 @@ int main(int argc, char *argv[]) { stream << fill_image(heap, device_image).dispatch(make_uint2(1024u)) << device_image.copy_to(host_image.data()) - << event.signal() << synchronize(); stbi_write_png("result.png", 1024u, 1024u, 4u, host_image.data(), 0u); diff --git a/src/tests/test_shader_visuals_present.cpp b/src/tests/test_shader_visuals_present.cpp index c2970d642..ffaafd334 100644 --- a/src/tests/test_shader_visuals_present.cpp +++ b/src/tests/test_shader_visuals_present.cpp @@ -1,166 +1,166 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace luisa; -using namespace luisa::compute; - -int main(int argc, char *argv[]) { - - Context context{argv[0]}; - if (argc <= 1) { - LUISA_INFO("Usage: {} . : cuda, dx, cpu, metal", argv[0]); - exit(1); - } - Device device = context.create_device(argv[1]); - - Callable comp = [](Float3 p) noexcept { - p = asin(sin(p) * .9f); - return length(p) - 1.f; - }; - - Callable erot = [](Float3 p, Float3 ax, Float ro) noexcept { - return lerp(dot(p, ax) * ax, p, cos(ro)) + sin(ro) * cross(ax, p); - }; - - Callable smin = [](Float a, Float b, Float k) noexcept { - auto h = max(0.f, k - abs(b - a)) / k; - return min(a, b) + h * h * h * k / 6.f; - }; - - Callable wrot = [](Float4 p) noexcept { - return make_float4(dot(p, make_float4(1.f)), p.yzw() + p.zwy() - p.wyz() - p.xxx()) * .5f; - }; - - Kernel2D render_kernel = [&](ImageFloat image, Float time) noexcept { - Float d1, d2, d3; - Float t; - Float lazors, doodad; - Float3 p2; - static constexpr auto bpm = 125.f; - auto scene = [&](Float3 p) noexcept { - p2 = erot(p, make_float3(0.f, 1.f, 0.f), t); - p2 = erot(p2, make_float3(0.f, 0.f, 1.f), t / 3.f); - p2 = erot(p2, make_float3(1.f, 0.f, 0.f), t / 5.f); - auto bpt = time / 60.f * bpm; - auto p4 = make_float4(p2, 0.f); - p4 = lerp(p4, wrot(p4), smoothstep(-.5f, .5f, sin(bpt / 4.f))); - p4 = abs(p4); - p4 = lerp(p4, wrot(p4), smoothstep(-.5f, .5f, sin(bpt))); - auto fctr = smoothstep(-.5f, .5f, sin(bpt / 2.f)); - auto fctr2 = smoothstep(.9f, 1.f, sin(bpt / 16.f)); - doodad = length(max(abs(p4) - lerp(0.05f, 0.07f, fctr), 0.f) + lerp(-0.1f, .2f, fctr)) - lerp(.15f, .55f, fctr * fctr) + fctr2; - p.x += asin(sin(t / 80.f) * .99f) * 80.f; - lazors = length(asin(sin(erot(p, make_float3(1.f, 0.f, 0.f), t * .2f).yz() * .5f + 1.f)) / .5f) - .1f; - d1 = comp(p); - d2 = comp(erot(p + 5.f, normalize(make_float3(1.f, 3.f, 4.f)), .4f)); - d3 = comp(erot(p + 10.f, normalize(make_float3(3.f, 2.f, 1.f)), 1.f)); - return min(doodad, min(lazors, .3f - smin(smin(d1, d2, .05f), d3, .05f))); - }; - - auto norm = [&](Float3 p) noexcept { - auto precis = ite(length(p) < 1.f, .005f, .01f); - auto k = make_float3x3(p, p, p) - make_float3x3(precis, 0.f, 0.f, 0.f, precis, 0.f, 0.f, 0.f, precis); - return normalize(scene(p) - make_float3(scene(k[0]), scene(k[1]), scene(k[2]))); - }; - - auto fragCoord = make_float2(dispatch_id().xy()); - auto iResolution = make_float2(dispatch_size().xy()); - auto uv = (fragCoord - .5f * iResolution) / iResolution.y; - - auto bpt = time / 60.f * bpm; - auto bp = lerp(pow(sin(fract(bpt) * constants::pi / 2.f), 20.f) + floor(bpt), bpt, .4f); - t = bp; - auto cam = normalize(make_float3(.8f + sin(bp * 3.14f / 4.f) * .3f, uv)); - auto init = make_float3(-1.5f + sin(bp * 3.14f) * .2f, 0.f, 0.f) + cam * .2f; - init = erot(init, make_float3(0.f, 1.f, 0.f), sin(bp * .2f) * .4f); - init = erot(init, make_float3(0.f, 0.f, 1.f), cos(bp * .2f) * .4f); - cam = erot(cam, make_float3(0.f, 1.f, 0.f), sin(bp * .2f) * .4f); - cam = erot(cam, make_float3(0.f, 0.f, 1.f), cos(bp * .2f) * .4f); - auto p = init; - auto atten = def(1.f); - auto tlen = def(0.f); - auto glo = def(0.f); - auto fog = def(0.f); - auto dlglo = def(0.f); - auto trg = def(false); - auto dist = def(0.f); - $for (i, 80) { - dist = scene(p); - auto hit = dist * dist < 1e-6f; - glo += .2f / (1.f + lazors * lazors * 20.f) * atten; - dlglo += .2f / (1.f + doodad * doodad * 20.f) * atten; - $if (hit & ((sin(d3 * 45.f) < -0.4f & (dist != doodad)) | (dist == doodad & sin(pow(length(p2 * p2 * p2), .3f) * 120.f) > .4f)) & dist != lazors) { - trg = trg | dist == doodad; - hit = false; - auto n = norm(p); - atten *= 1.f - abs(dot(cam, n)) * .98f; - cam = reflect(cam, n); - dist = .1f; - }; - p += cam * dist; - tlen += dist; - fog += dist * atten / 30.f; - $if (hit) { $break; }; - }; - fog = smoothstep(0.f, 1.f, fog); - auto lz = lazors == dist; - auto dl = doodad == dist; - auto fogcol = lerp(make_float3(.5f, .8f, 1.2f), make_float3(.4f, .6f, .9f), length(uv)); - auto n = norm(p); - auto r = reflect(cam, n); - auto ss = smoothstep(-.3f, .3f, scene(p + make_float3(.3f))) + .5f; - auto fact = length(sin(r * (ite(dl, 4.f, 3.f))) * .5f + .5f) / sqrt(3.f) * .7f + .3f; - auto matcol = lerp(make_float3(.9f, .4f, .3f), make_float3(.3f, .4f, .8f), smoothstep(-1.f, 1.f, sin(d1 * 5.f + time * 2.f))); - matcol = lerp(matcol, make_float3(.5f, .4f, 1.f), smoothstep(0.f, 1.f, sin(d2 * 5.f + time * 2.f))); - matcol = ite(dl, lerp(1.f, matcol, .1f) * .2f + .1f, matcol); - auto col = matcol * fact * ss + pow(fact, 10.f); - col = ite(lz, 4.f, col); - auto fragColor = col * atten + glo * glo + fogcol * glo; - fragColor = lerp(fragColor, fogcol, fog); - fragColor = ite(dl, fragColor, abs(erot(fragColor, normalize(sin(p * 2.f)), .2f * (1.f - fog)))); - fragColor = ite(trg | dl, fragColor, fragColor + dlglo * dlglo * .1f * make_float3(.4f, .6f, .9f)); - fragColor = sqrt(fragColor); - auto color = smoothstep(0.f, 1.2f, fragColor); - image.write(dispatch_id().xy(), make_float4(pow(color, 2.2f), 1.f)); - }; - - Kernel2D clear_kernel = [](ImageVar image) noexcept { - Var coord = dispatch_id().xy(); - Var rg = make_float2(coord) / make_float2(dispatch_size().xy()); - image.write(coord, make_float4(make_float2(0.3f, 0.4f), 0.5f, 1.0f)); - }; - auto clear = device.compile(clear_kernel); - auto shader = device.compile(render_kernel); - - static constexpr auto width = 1280u; - static constexpr auto height = 720u; - Stream stream = device.create_stream(StreamTag::GRAPHICS); - Window window{"Display", make_uint2(width, height)}; - auto swap_chain = device.create_swapchain( - stream, - SwapchainOption{ - .display = window.native_display(), - .window = window.native_handle(), - .size = window.size(), - .wants_hdr = false, - .wants_vsync = false, - .back_buffer_count = 2, - }); - auto device_image = device.create_image(swap_chain.backend_storage(), width, height); - stream << clear(device_image).dispatch(width, height); - - Clock clock; - while (!window.should_close()) { - auto time = static_cast(clock.toc() * 1e-3); - stream << shader(device_image, time).dispatch(width, height) - << swap_chain.present(device_image); - window.poll_events(); - } - stream << synchronize(); -} +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace luisa; +using namespace luisa::compute; + +int main(int argc, char *argv[]) { + + Context context{argv[0]}; + if (argc <= 1) { + LUISA_INFO("Usage: {} . : cuda, dx, cpu, metal", argv[0]); + exit(1); + } + Device device = context.create_device(argv[1]); + + Callable comp = [](Float3 p) noexcept { + p = asin(sin(p) * .9f); + return length(p) - 1.f; + }; + + Callable erot = [](Float3 p, Float3 ax, Float ro) noexcept { + return lerp(dot(p, ax) * ax, p, cos(ro)) + sin(ro) * cross(ax, p); + }; + + Callable smin = [](Float a, Float b, Float k) noexcept { + auto h = max(0.f, k - abs(b - a)) / k; + return min(a, b) + h * h * h * k / 6.f; + }; + + Callable wrot = [](Float4 p) noexcept { + return make_float4(dot(p, make_float4(1.f)), p.yzw() + p.zwy() - p.wyz() - p.xxx()) * .5f; + }; + + Kernel2D render_kernel = [&](ImageFloat image, Float time) noexcept { + Float d1, d2, d3; + Float t; + Float lazors, doodad; + Float3 p2; + static constexpr auto bpm = 125.f; + auto scene = [&](Float3 p) noexcept { + p2 = erot(p, make_float3(0.f, 1.f, 0.f), t); + p2 = erot(p2, make_float3(0.f, 0.f, 1.f), t / 3.f); + p2 = erot(p2, make_float3(1.f, 0.f, 0.f), t / 5.f); + auto bpt = time / 60.f * bpm; + auto p4 = make_float4(p2, 0.f); + p4 = lerp(p4, wrot(p4), smoothstep(-.5f, .5f, sin(bpt / 4.f))); + p4 = abs(p4); + p4 = lerp(p4, wrot(p4), smoothstep(-.5f, .5f, sin(bpt))); + auto fctr = smoothstep(-.5f, .5f, sin(bpt / 2.f)); + auto fctr2 = smoothstep(.9f, 1.f, sin(bpt / 16.f)); + doodad = length(max(abs(p4) - lerp(0.05f, 0.07f, fctr), 0.f) + lerp(-0.1f, .2f, fctr)) - lerp(.15f, .55f, fctr * fctr) + fctr2; + p.x += asin(sin(t / 80.f) * .99f) * 80.f; + lazors = length(asin(sin(erot(p, make_float3(1.f, 0.f, 0.f), t * .2f).yz() * .5f + 1.f)) / .5f) - .1f; + d1 = comp(p); + d2 = comp(erot(p + 5.f, normalize(make_float3(1.f, 3.f, 4.f)), .4f)); + d3 = comp(erot(p + 10.f, normalize(make_float3(3.f, 2.f, 1.f)), 1.f)); + return min(doodad, min(lazors, .3f - smin(smin(d1, d2, .05f), d3, .05f))); + }; + + auto norm = [&](Float3 p) noexcept { + auto precis = ite(length(p) < 1.f, .005f, .01f); + auto k = make_float3x3(p, p, p) - make_float3x3(precis, 0.f, 0.f, 0.f, precis, 0.f, 0.f, 0.f, precis); + return normalize(scene(p) - make_float3(scene(k[0]), scene(k[1]), scene(k[2]))); + }; + + auto fragCoord = make_float2(dispatch_id().xy()); + auto iResolution = make_float2(dispatch_size().xy()); + auto uv = (fragCoord - .5f * iResolution) / iResolution.y; + + auto bpt = time / 60.f * bpm; + auto bp = lerp(pow(sin(fract(bpt) * constants::pi / 2.f), 20.f) + floor(bpt), bpt, .4f); + t = bp; + auto cam = normalize(make_float3(.8f + sin(bp * 3.14f / 4.f) * .3f, uv)); + auto init = make_float3(-1.5f + sin(bp * 3.14f) * .2f, 0.f, 0.f) + cam * .2f; + init = erot(init, make_float3(0.f, 1.f, 0.f), sin(bp * .2f) * .4f); + init = erot(init, make_float3(0.f, 0.f, 1.f), cos(bp * .2f) * .4f); + cam = erot(cam, make_float3(0.f, 1.f, 0.f), sin(bp * .2f) * .4f); + cam = erot(cam, make_float3(0.f, 0.f, 1.f), cos(bp * .2f) * .4f); + auto p = init; + auto atten = def(1.f); + auto tlen = def(0.f); + auto glo = def(0.f); + auto fog = def(0.f); + auto dlglo = def(0.f); + auto trg = def(false); + auto dist = def(0.f); + $for (i, 80) { + dist = scene(p); + auto hit = dist * dist < 1e-6f; + glo += .2f / (1.f + lazors * lazors * 20.f) * atten; + dlglo += .2f / (1.f + doodad * doodad * 20.f) * atten; + $if (hit & ((sin(d3 * 45.f) < -0.4f & (dist != doodad)) | (dist == doodad & sin(pow(length(p2 * p2 * p2), .3f) * 120.f) > .4f)) & dist != lazors) { + trg = trg | dist == doodad; + hit = false; + auto n = norm(p); + atten *= 1.f - abs(dot(cam, n)) * .98f; + cam = reflect(cam, n); + dist = .1f; + }; + p += cam * dist; + tlen += dist; + fog += dist * atten / 30.f; + $if (hit) { $break; }; + }; + fog = smoothstep(0.f, 1.f, fog); + auto lz = lazors == dist; + auto dl = doodad == dist; + auto fogcol = lerp(make_float3(.5f, .8f, 1.2f), make_float3(.4f, .6f, .9f), length(uv)); + auto n = norm(p); + auto r = reflect(cam, n); + auto ss = smoothstep(-.3f, .3f, scene(p + make_float3(.3f))) + .5f; + auto fact = length(sin(r * (ite(dl, 4.f, 3.f))) * .5f + .5f) / sqrt(3.f) * .7f + .3f; + auto matcol = lerp(make_float3(.9f, .4f, .3f), make_float3(.3f, .4f, .8f), smoothstep(-1.f, 1.f, sin(d1 * 5.f + time * 2.f))); + matcol = lerp(matcol, make_float3(.5f, .4f, 1.f), smoothstep(0.f, 1.f, sin(d2 * 5.f + time * 2.f))); + matcol = ite(dl, lerp(1.f, matcol, .1f) * .2f + .1f, matcol); + auto col = matcol * fact * ss + pow(fact, 10.f); + col = ite(lz, 4.f, col); + auto fragColor = col * atten + glo * glo + fogcol * glo; + fragColor = lerp(fragColor, fogcol, fog); + fragColor = ite(dl, fragColor, abs(erot(fragColor, normalize(sin(p * 2.f)), .2f * (1.f - fog)))); + fragColor = ite(trg | dl, fragColor, fragColor + dlglo * dlglo * .1f * make_float3(.4f, .6f, .9f)); + fragColor = sqrt(fragColor); + auto color = smoothstep(0.f, 1.2f, fragColor); + image.write(dispatch_id().xy(), make_float4(pow(color, 2.2f), 1.f)); + }; + + Kernel2D clear_kernel = [](ImageVar image) noexcept { + Var coord = dispatch_id().xy(); + Var rg = make_float2(coord) / make_float2(dispatch_size().xy()); + image.write(coord, make_float4(make_float2(0.3f, 0.4f), 0.5f, 1.0f)); + }; + auto clear = device.compile(clear_kernel); + auto shader = device.compile(render_kernel); + + static constexpr auto width = 1280u; + static constexpr auto height = 720u; + Stream stream = device.create_stream(StreamTag::GRAPHICS); + Window window{"Display", make_uint2(width, height)}; + auto swap_chain = device.create_swapchain( + stream, + SwapchainOption{ + .display = window.native_display(), + .window = window.native_handle(), + .size = window.size(), + .wants_hdr = false, + .wants_vsync = false, + .back_buffer_count = 2, + }); + auto device_image = device.create_image(swap_chain.backend_storage(), width, height); + stream << clear(device_image).dispatch(width, height); + + Clock clock; + while (!window.should_close()) { + auto time = static_cast(clock.toc() * 1e-3); + stream << shader(device_image, time).dispatch(width, height) + << swap_chain.present(device_image); + window.poll_events(); + } + stream << synchronize(); +} diff --git a/src/tests/test_texture_io.cpp b/src/tests/test_texture_io.cpp index f0cc80b20..251ca9e75 100644 --- a/src/tests/test_texture_io.cpp +++ b/src/tests/test_texture_io.cpp @@ -1,58 +1,58 @@ -#include - -#include -#include -#include -#include -#include -#include - -using namespace luisa; -using namespace luisa::compute; - -int main(int argc, char *argv[]) { - - log_level_verbose(); - - Context context{argv[0]}; - if (argc <= 1) { - LUISA_INFO("Usage: {} . : cuda, dx, cpu, metal", argv[0]); - exit(1); - } - Device device = context.create_device(argv[1]); - - Callable linear_to_srgb = [](Float4 linear) noexcept { - auto x = linear.xyz(); - return make_float4( - select(1.055f * pow(x, 1.0f / 2.4f) - 0.055f, - 12.92f * x, - x <= 0.00031308f), - linear.w); - }; - - Kernel2D fill_image_kernel = [&linear_to_srgb](ImageFloat image) noexcept { - Var coord = dispatch_id().xy(); - Var rg = make_float2(coord) / make_float2(dispatch_size().xy()); - image.write(coord, linear_to_srgb(make_float4(rg, 1.0f, 1.0f))); - }; - - Kernel2D change_color_kernel = [](ImageFloat image) noexcept { - Var coord = dispatch_id().xy(); - auto c = image.read(coord); - image.write(coord, make_float4(lerp(c.xyz(), 1.f, 0.2f), 1.0f)); - }; - - auto fill_image = device.compile(fill_image_kernel); - auto change_color = device.compile(change_color_kernel); - Image device_image = device.create_image(PixelStorage::BYTE4, 1024u, 1024u, 0u); - std::vector download_image(1024u * 1024u * 4u); - - Stream stream = device.create_stream(); - stream << fill_image(device_image.view(0)).dispatch(1024u, 1024u) - << change_color(device_image.view(0)).dispatch(512u, 512u) - << device_image.copy_to(download_image.data()) - << synchronize(); - stbi_write_png("result.png", 1024u, 1024u, 4u, download_image.data(), 0u); - - Volume volume = device.create_volume(PixelStorage::FLOAT4, 64u, 64u, 64u); -} +#include + +#include +#include +#include +#include +#include +#include + +using namespace luisa; +using namespace luisa::compute; + +int main(int argc, char *argv[]) { + + log_level_verbose(); + + Context context{argv[0]}; + if (argc <= 1) { + LUISA_INFO("Usage: {} . : cuda, dx, cpu, metal", argv[0]); + exit(1); + } + Device device = context.create_device(argv[1]); + + Callable linear_to_srgb = [](Float4 linear) noexcept { + auto x = linear.xyz(); + return make_float4( + select(1.055f * pow(x, 1.0f / 2.4f) - 0.055f, + 12.92f * x, + x <= 0.00031308f), + linear.w); + }; + + Kernel2D fill_image_kernel = [&linear_to_srgb](ImageFloat image) noexcept { + Var coord = dispatch_id().xy(); + Var rg = make_float2(coord) / make_float2(dispatch_size().xy()); + image.write(coord, linear_to_srgb(make_float4(rg, 1.0f, 1.0f))); + }; + + Kernel2D change_color_kernel = [](ImageFloat image) noexcept { + Var coord = dispatch_id().xy(); + auto c = image.read(coord); + image.write(coord, make_float4(lerp(c.xyz(), 1.f, 0.2f), 1.0f)); + }; + + auto fill_image = device.compile(fill_image_kernel); + auto change_color = device.compile(change_color_kernel); + Image device_image = device.create_image(PixelStorage::BYTE4, 1024u, 1024u, 0u); + std::vector download_image(1024u * 1024u * 4u); + + Stream stream = device.create_stream(); + stream << fill_image(device_image.view(0)).dispatch(1024u, 1024u) + << change_color(device_image.view(0)).dispatch(512u, 512u) + << device_image.copy_to(download_image.data()) + << synchronize(); + stbi_write_png("result.png", 1024u, 1024u, 4u, download_image.data(), 0u); + + Volume volume = device.create_volume(PixelStorage::FLOAT4, 64u, 64u, 64u); +} diff --git a/src/vstl/CMakeLists.txt b/src/vstl/CMakeLists.txt index 24553cd08..4f93399c2 100644 --- a/src/vstl/CMakeLists.txt +++ b/src/vstl/CMakeLists.txt @@ -7,14 +7,14 @@ set(LUISA_COMPUTE_VSTL_SOURCES v_guid.cpp vstl.cpp) -add_library(luisa-compute-vstl SHARED ${LUISA_COMPUTE_VSTL_SOURCES}) +add_library(luisa-compute-vstl OBJECT ${LUISA_COMPUTE_VSTL_SOURCES}) target_precompile_headers(luisa-compute-vstl PRIVATE pch.h) target_link_libraries(luisa-compute-vstl PUBLIC luisa-compute-core PRIVATE luisa-compute-ext-lmdb) target_compile_definitions(luisa-compute-vstl PRIVATE LC_VSTL_EXPORT_DLL=1) set_target_properties(luisa-compute-vstl PROPERTIES UNITY_BUILD ${LUISA_COMPUTE_ENABLE_UNITY_BUILD} - OUTPUT_NAME lc-vstl) + POSITION_INDEPENDENT_CODE ON) if (WIN32) target_link_libraries(luisa-compute-vstl PUBLIC Shlwapi) diff --git a/src/xir/CMakeLists.txt b/src/xir/CMakeLists.txt index c941207c2..92b4bb18d 100644 --- a/src/xir/CMakeLists.txt +++ b/src/xir/CMakeLists.txt @@ -41,6 +41,9 @@ set(LUISA_COMPUTE_XIR_SOURCES translators/json2xir.cpp translators/xir2json.cpp translators/xir2text.cpp + + # passes + passes/outline.cpp ) add_library(luisa-compute-xir SHARED ${LUISA_COMPUTE_XIR_SOURCES}) diff --git a/src/xir/builder.cpp b/src/xir/builder.cpp index 4b888f693..5118dac07 100644 --- a/src/xir/builder.cpp +++ b/src/xir/builder.cpp @@ -149,12 +149,14 @@ GEPInst *Builder::gep(const Type *type, Value *base, luisa::span i LoadInst *Builder::load(const Type *type, Value *variable) noexcept { LUISA_ASSERT(variable->is_lvalue(), "Load source must be an lvalue."); + LUISA_ASSERT(type == variable->type(), "Type mismatch in Load"); return _create_and_append_instruction(type, variable); } StoreInst *Builder::store(Value *variable, Value *value) noexcept { LUISA_ASSERT(variable->is_lvalue(), "Store destination must be an lvalue."); LUISA_ASSERT(!value->is_lvalue(), "Store source cannot be an lvalue."); + LUISA_ASSERT(variable->type() == value->type(), "Type mismatch in Store"); return _create_and_append_instruction(variable, value); } diff --git a/src/xir/instructions/intrinsic_name_map.inl.h b/src/xir/instructions/intrinsic_name_map.inl.h index 769dc0f87..2f47e7ac6 100644 --- a/src/xir/instructions/intrinsic_name_map.inl.h +++ b/src/xir/instructions/intrinsic_name_map.inl.h @@ -162,7 +162,6 @@ luisa::string to_string(IntrinsicOp op) noexcept { case IntrinsicOp::BINDLESS_BUFFER_READ: return "bindless_buffer_read"; case IntrinsicOp::BINDLESS_BUFFER_WRITE: return "bindless_buffer_write"; case IntrinsicOp::BINDLESS_BUFFER_SIZE: return "bindless_buffer_size"; - case IntrinsicOp::BINDLESS_BUFFER_TYPE: return "bindless_buffer_type"; case IntrinsicOp::BINDLESS_BYTE_BUFFER_READ: return "bindless_byte_buffer_read"; case IntrinsicOp::BINDLESS_BYTE_BUFFER_WRITE: return "bindless_byte_buffer_write"; case IntrinsicOp::BINDLESS_BYTE_BUFFER_SIZE: return "bindless_byte_buffer_size"; @@ -184,7 +183,7 @@ luisa::string to_string(IntrinsicOp op) noexcept { case IntrinsicOp::RAY_TRACING_INSTANCE_USER_ID: return "ray_tracing_instance_user_id"; case IntrinsicOp::RAY_TRACING_INSTANCE_VISIBILITY_MASK: return "ray_tracing_instance_visibility_mask"; case IntrinsicOp::RAY_TRACING_SET_INSTANCE_TRANSFORM: return "ray_tracing_set_instance_transform"; - case IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY: return "ray_tracing_set_instance_visibility"; + case IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY_MASK: return "ray_tracing_set_instance_visibility_mask"; case IntrinsicOp::RAY_TRACING_SET_INSTANCE_OPACITY: return "ray_tracing_set_instance_opacity"; case IntrinsicOp::RAY_TRACING_SET_INSTANCE_USER_ID: return "ray_tracing_set_instance_user_id"; case IntrinsicOp::RAY_TRACING_TRACE_CLOSEST: return "ray_tracing_trace_closest"; @@ -234,6 +233,7 @@ luisa::string to_string(IntrinsicOp op) noexcept { case IntrinsicOp::INDIRECT_DISPATCH_SET_KERNEL: return "indirect_dispatch_set_kernel"; case IntrinsicOp::INDIRECT_DISPATCH_SET_COUNT: return "indirect_dispatch_set_count"; case IntrinsicOp::SHADER_EXECUTION_REORDER: return "shader_execution_reorder"; + case IntrinsicOp::CLOCK: return "clock"; } LUISA_ERROR_WITH_LOCATION("Unknown intrinsic operation: {}.", static_cast(op)); @@ -401,7 +401,6 @@ IntrinsicOp intrinsic_op_from_string(luisa::string_view name) noexcept { {"bindless_buffer_read", IntrinsicOp::BINDLESS_BUFFER_READ}, {"bindless_buffer_write", IntrinsicOp::BINDLESS_BUFFER_WRITE}, {"bindless_buffer_size", IntrinsicOp::BINDLESS_BUFFER_SIZE}, - {"bindless_buffer_type", IntrinsicOp::BINDLESS_BUFFER_TYPE}, {"bindless_byte_buffer_read", IntrinsicOp::BINDLESS_BYTE_BUFFER_READ}, {"bindless_byte_buffer_write", IntrinsicOp::BINDLESS_BYTE_BUFFER_WRITE}, {"bindless_byte_buffer_size", IntrinsicOp::BINDLESS_BYTE_BUFFER_SIZE}, @@ -423,7 +422,7 @@ IntrinsicOp intrinsic_op_from_string(luisa::string_view name) noexcept { {"ray_tracing_instance_user_id", IntrinsicOp::RAY_TRACING_INSTANCE_USER_ID}, {"ray_tracing_instance_visibility_mask", IntrinsicOp::RAY_TRACING_INSTANCE_VISIBILITY_MASK}, {"ray_tracing_set_instance_transform", IntrinsicOp::RAY_TRACING_SET_INSTANCE_TRANSFORM}, - {"ray_tracing_set_instance_visibility", IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY}, + {"ray_tracing_set_instance_visibility_mask", IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY_MASK}, {"ray_tracing_set_instance_opacity", IntrinsicOp::RAY_TRACING_SET_INSTANCE_OPACITY}, {"ray_tracing_set_instance_user_id", IntrinsicOp::RAY_TRACING_SET_INSTANCE_USER_ID}, {"ray_tracing_trace_closest", IntrinsicOp::RAY_TRACING_TRACE_CLOSEST}, @@ -473,6 +472,7 @@ IntrinsicOp intrinsic_op_from_string(luisa::string_view name) noexcept { {"indirect_dispatch_set_kernel", IntrinsicOp::INDIRECT_DISPATCH_SET_KERNEL}, {"indirect_dispatch_set_count", IntrinsicOp::INDIRECT_DISPATCH_SET_COUNT}, {"shader_execution_reorder", IntrinsicOp::SHADER_EXECUTION_REORDER}, + {"clock", IntrinsicOp::CLOCK}, }; auto iter = m.find(name); LUISA_ASSERT(iter != m.end(), "Unknown intrinsic operation: {}.", name); diff --git a/src/xir/passes/outline.cpp b/src/xir/passes/outline.cpp new file mode 100644 index 000000000..6f035eac5 --- /dev/null +++ b/src/xir/passes/outline.cpp @@ -0,0 +1,20 @@ +#include + +namespace luisa::compute::xir { + +OutlineInfo outline_pass_run_on_function(Module *module, Function *function) noexcept { + return {}; +} + +OutlineInfo outline_pass_run_on_module(Module *module) noexcept { + OutlineInfo info; + luisa::vector functions; + for (auto &f : module->functions()) { functions.emplace_back(&f); } + for (auto &f : module->functions()) { + auto func_info = outline_pass_run_on_function(module, &f); + + } + return info; +} + +} diff --git a/src/xir/translators/ast2xir.cpp b/src/xir/translators/ast2xir.cpp index f23168aba..844104003 100644 --- a/src/xir/translators/ast2xir.cpp +++ b/src/xir/translators/ast2xir.cpp @@ -575,7 +575,7 @@ class AST2XIRContext { case CallOp::BINDLESS_BUFFER_WRITE: return resource_call(IntrinsicOp::BINDLESS_BUFFER_WRITE); case CallOp::BINDLESS_BYTE_BUFFER_READ: return resource_call(IntrinsicOp::BINDLESS_BYTE_BUFFER_READ); case CallOp::BINDLESS_BUFFER_SIZE: return resource_call(IntrinsicOp::BINDLESS_BUFFER_SIZE); - case CallOp::BINDLESS_BUFFER_TYPE: return resource_call(IntrinsicOp::BINDLESS_BUFFER_TYPE); + case CallOp::BINDLESS_BUFFER_TYPE: LUISA_ERROR_WITH_LOCATION("Removed bindless_buffer_type operation."); case CallOp::BINDLESS_BUFFER_ADDRESS: return resource_call(IntrinsicOp::BINDLESS_BUFFER_DEVICE_ADDRESS); case CallOp::MAKE_BOOL2: return make_vector_call(Type::of(), 2); case CallOp::MAKE_BOOL3: return make_vector_call(Type::of(), 3); @@ -664,7 +664,7 @@ class AST2XIRContext { case CallOp::RAY_TRACING_INSTANCE_USER_ID: return resource_call(IntrinsicOp::RAY_TRACING_INSTANCE_USER_ID); case CallOp::RAY_TRACING_INSTANCE_VISIBILITY_MASK: return resource_call(IntrinsicOp::RAY_TRACING_INSTANCE_VISIBILITY_MASK); case CallOp::RAY_TRACING_SET_INSTANCE_TRANSFORM: return resource_call(IntrinsicOp::RAY_TRACING_SET_INSTANCE_TRANSFORM); - case CallOp::RAY_TRACING_SET_INSTANCE_VISIBILITY: return resource_call(IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY); + case CallOp::RAY_TRACING_SET_INSTANCE_VISIBILITY: return resource_call(IntrinsicOp::RAY_TRACING_SET_INSTANCE_VISIBILITY_MASK); case CallOp::RAY_TRACING_SET_INSTANCE_OPACITY: return resource_call(IntrinsicOp::RAY_TRACING_SET_INSTANCE_OPACITY); case CallOp::RAY_TRACING_SET_INSTANCE_USER_ID: return resource_call(IntrinsicOp::RAY_TRACING_SET_INSTANCE_USER_ID); case CallOp::RAY_TRACING_TRACE_CLOSEST: return resource_call(IntrinsicOp::RAY_TRACING_TRACE_CLOSEST); @@ -722,6 +722,7 @@ class AST2XIRContext { case CallOp::TEXTURE3D_SAMPLE_GRAD: return resource_call(IntrinsicOp::TEXTURE3D_SAMPLE_GRAD); case CallOp::TEXTURE3D_SAMPLE_GRAD_LEVEL: return resource_call(IntrinsicOp::TEXTURE3D_SAMPLE_GRAD_LEVEL); case CallOp::SHADER_EXECUTION_REORDER: return resource_call(IntrinsicOp::SHADER_EXECUTION_REORDER); + case CallOp::CLOCK: return pure_call(IntrinsicOp::CLOCK); } LUISA_NOT_IMPLEMENTED(); } @@ -993,6 +994,7 @@ class AST2XIRContext { if (assign->lhs() != assign->rhs()) { auto variable = _translate_expression(b, assign->lhs(), false); auto value = _translate_expression(b, assign->rhs(), true); + value = _type_cast_if_necessary(b, variable->type(), value); _commented(b.store(variable, value)); } break; @@ -1032,8 +1034,7 @@ class AST2XIRContext { // convert the arguments for (auto ast_arg : _current.ast->arguments()) { auto arg = _current.f->create_argument(ast_arg.type(), ast_arg.is_reference()); - if (auto ast_usage = _current.ast->variable_usage(ast_arg.uid()); - arg->is_value() && (ast_usage == Usage::WRITE || ast_usage == Usage::READ_WRITE)) { + if (arg->is_value()) { // AST allows update of the argument, so we need to copy it to a local variable auto local = b.alloca_local(arg->type()); local->add_comment("Local copy of argument");